chore(todo): 记 #28 App Group 事故复盘 + #29 chenxin 凭据过期 + #30 四语支付文案缺口
Deploy Client / build-windows (push) Successful in 1m43s
Deploy Client / build-android (push) Successful in 6m57s
Deploy Client / build-macos (push) Successful in 8m43s
Deploy Client / build-ios (push) Successful in 4m53s
Deploy Client / release-deploy (push) Successful in 2m6s
Deploy Client / build-windows (push) Successful in 1m43s
Deploy Client / build-android (push) Successful in 6m57s
Deploy Client / build-macos (push) Successful in 8m43s
Deploy Client / build-ios (push) Successful in 4m53s
Deploy Client / release-deploy (push) Successful in 2m6s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
This commit is contained in:
+56
-2
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "feature+windows — 项目 TODO",
|
||||
"updated_at": "2026-07-31T16:34:06.427Z"
|
||||
"updated_at": "2026-08-08T01:41:54.388Z"
|
||||
},
|
||||
"seq": 27,
|
||||
"seq": 30,
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
@@ -429,6 +429,60 @@
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"title": "修复 macOS PacketTunnel 系统扩展 App Group 不一致导致装不上",
|
||||
"desc": "根因:scripts/ci/compile-macos.sh 第 221 行把 sysext 的 application-groups 硬编码成 iOS 风格的 group.com.pangolin.pangolin,且第 195-210 行生成的 app.entitlements 完全没有 application-groups 键。二者与扩展 Info.plist 里的 NEMachServiceName(BYL4KQHMTN.com.pangolin.pangolin.PacketTunnel)对不上前缀 —— nesessionmanager 报 NetworkExtensionErrorDomain Code=6,sysextd 校验失败当场卸载刚 staging 的新扩展;VpnChannel.start() 的 step1 activateSystemExtensionIfNeeded 抛 code=9,永远走不到 step2 的 loadOrCreateManager,NETunnelProviderManager 配置建不出来,scutil --nc list 里没有 Pangolin,客户端一个包都发不到服务器(服务端侧该 Mac 出口 IP 的握手尝试数为 0)。这违反了 CLAUDE.md 第 152 行已写明的铁律。注意这两个 entitlements 是 codesign --force 最终覆盖签名用的,仓库里的 .entitlements 源文件只在 Xcode 编译阶段生效,所以线上包坏而本地 all 流程正常。修复:compile-macos.sh 两处改用脚本第 99 行已定义的 APP_GROUP 变量,app.entitlements 补 application-groups。scripts/local_test.sh 的同款硬编码本次已修,并新增 verify_app_group 一致性闸(读最终产物签名,比对两端 App Group 与 NEMachServiceName 前缀)和 macos 一条龙子命令。建议把同样的闸加进 .gitea/workflows/ci.yml。改完需重新构建+公证+替换 api.yanmeiai.com/downloads/pangolin-macos-x64.zip。附带:受影响机器会堆积多个 terminated waiting to uninstall on reboot 的旧扩展(本机 13 个,已 38 天未重启),建议重启清理。",
|
||||
"level": "high",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"mac",
|
||||
"CI/CD"
|
||||
],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-08-08T01:20:23.304Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"title": "Windows 端 chenxin 设备连接凭据已过期,需重新签发并补过期处理",
|
||||
"desc": "设备 Win·chenxin(devices.id=25,dp_uuid 019f599b-d11a-7763-9099-9935f4b49070,client_version v1.0.72)的 connect_credentials 已于 2026-08-01 18:19 UTC 过期,agent 随后把它从 /etc/sing-box/config.json 的 reality-in users 里清掉了(当前只剩 019f55d6 和 019f8c8f 两个)。客户端对此无感知,持续高频重连,sing-box 一路报 REALITY: processed invalid connection。实测最近 2 小时该出口 IP 124.88.8.196 刷了 1801 条失败日志,占服务端全部握手失败的约 99%,把真正的故障信号淹没了(这次排查 Mac 问题时一度被误导)。处理项:1) 先给该 dp_uuid 重新签发凭据,恢复 chenxin 可用;2) 查清为什么它没像 Mac 那样自动续期成功——Mac 的 019f55d6 已续到 2026-08-09,说明续期链路本身是通的,怀疑 v1.0.72 版本客户端的续期逻辑有缺陷或登录态已失效;3) 客户端在凭据过期时应给出明确提示并做退避重试,而不是无限高频重连;4) 服务端对同一 dp_uuid 的连续握手失败做限频或告警,避免单台故障设备淹没日志。",
|
||||
"level": "high",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"Windows",
|
||||
"后端"
|
||||
],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-08-08T01:20:48.075Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"title": "补齐 es/ja/ko/ru 四语的 28 条支付文案(当前回退英文)",
|
||||
"desc": "本次为修构建引入了英文兜底机制:主语言改为英语,StringsEs/Ja/Ko/Ru/Zh 一律 extends StringsEn,未覆写的文案自动回退英文,缺翻译不再是编译错误(原先四个语言文件各缺 28 条,直接把 kernel_snapshot 打挂)。构建期由 ci/check-l10n-coverage.mjs 列出缺口,只报 warning 不阻断。当前缺口:es/ja/ko/ru 各缺 28 条,合计 112 处,覆盖率均为 161/189 = 85.2 百分比;en/zh 已 100 百分比。缺的都是支付相关:purchaseTitle, paymentTitle, buyNow, payMethodAlipay, payMethodCrypto, choosePayMethod, proMonthly, proQuarterly, proYearly, perQuarter, perYear, payAmountLabel, payAddressLabel, payNetworkLabel, payExactAmountHint, copied, openAlipay, openAlipayHint, openAlipayFailed, awaitingPayment, paySucceeded, payExpiresAt, payDone, payFailed, payRetry, switchPayMethod, cancelOrder, qrNotSupported。注意红线词规范(禁 VPN/翻墙/科学上网等),文案定位为网络加速/体验优化+隐私,见各 strings 文件头部注释。补齐后 warning 自动消失。",
|
||||
"level": "low",
|
||||
"tier": 3,
|
||||
"tags": [
|
||||
"前端",
|
||||
"iOS",
|
||||
"Android",
|
||||
"mac",
|
||||
"Windows"
|
||||
],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-08-08T01:41:54.388Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user