wangjia
d094a53d7e
docs(ci): W3/W4 落地记录——git 局域网直达 24ms + 华为防私接 DHCP 偏差
...
W3/W4 标记完成。W4 按计划(DSM 443 反代改 HTTPS+导入 ali LE 证书)。
W3 改方案:原定 NAS 接管 DHCP 被华为 Q2S 防私接 DHCP 挡死→放弃,改成
NAS 装 Synology DNS Server(git/nas/win 单主机主区+转发其余)+仅 runner mac
家里 Wi-Fi 手动 DNS=.200。§8 记完整过程/偏差/坑(mDNSResponder 负缓存需 flush)。
真相源 baize domains.yaml 家内分光 note;NAS 運維归 ~/code/nas。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-07 22:19:19 +08:00
wangjia
c152c2aadf
docs(ci): 标记 W5 已完成(runner 收敛为单一用户级+relay 退役)
...
W5 执行记录:mac-pangolin-2(id=7)本就用户级+已指向域名,唯一 bug 是
label 错成 nas(根因 Shadowrocket 掐连接致 Declare 从没上报成)。换
pangolin 后改 config labels nas:host→mac:host + kickstart 重启,
Declare 成功、label 变 mac,立即接走队列 task 2299。退役 jiu id=3
(删+launchd .disabled)+relay(.retired)。工作表 W5 改已完成。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-07 18:11:40 +08:00
wangjia
cf3b806311
docs(ci): 补 NAS 可行性判定(DS925+ 支持 W3/W4)
...
read-only 实测:NAS=DS925+ x86/DSM7.3.2,本身就是 LAN DHCP 服务器
(DhcpServer 已装,引擎 dnsmasq,段 .10-.230)→DNS 下发自控、无需碰路由器;
ContainerManager 已装(可跑 AdGuard/dnsmasq 容器);DSM Reverse Proxy 已在用
→加 SNI vhost git→localhost:3000 即可;gitea 为 3000 native 进程非容器。
唯一 caveat:证书 DSM 内置 LE 仅 HTTP-01 家里签不了→走 acme.sh DNS-01(阿里云)
或同步 ali 已有 LE。判定:W3+W4 均可行,不属于「一般 nas 不支持」。
新增 §6 可行性判定表,W3/W4 状态改可行·待建,W3 修正为 NAS 自身 DHCP。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-07 16:47:57 +08:00
wangjia
f1e527918f
docs(ci): runner 走域名注册 + 局域网/外网无感切换实现方案
...
daily 代理换成 pangolin 全局 TUN(对 Go 二进制透明,不再掐 act_runner
直连)→ relay 淘汰,runner 统一注册到域名 https://git.51yanmei.com 。
git 已在 PANGOLIN_PRIVATE_SPLIT_DOMAINS,靠 dns-system 解析:在家局域网
DNS 覆盖→LAN 直连规则先命中直达 NAS;在外公网锚点→私有域名走隧道→
pangolin1 出口→ali frp→NAS。含 SVG 架构图、机制(clientconfig 三处
注入)、六 workstream、迁移顺序、验证清单、需确认的机器改动。登记进
docs/index.html 实现计划分类。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-07 16:35:11 +08:00
wangjia
5513377221
docs: CI/CD 多账号签名设计(Apple 多账号 × 多 App,配置切换)
...
方案:CI 签名拆成正交两维——account(用哪个 Apple 账号,Developer ID/Apple
Distribution 证书 + ASC Key 跨该账号所有 App 共享)× app(bundle 专属描述文件)。
App 在自己仓 scripts/signing.env 声明 SIGNING_ACCOUNT=us|cn 一行完成切换;工作流
读它、三元映射从 gitea 用户级取对应账号 SIGN_<ACCT>_* 密钥集,描述文件走仓库级 per-app。
证书按账号存一次共享 + 描述文件按 App 存本仓 → 避免多账号×多App 的密钥爆炸。
含三层配置模型、gitea 命名规范、workflow 切换机制(基于现有 secret→env 映射层)、
composite action 多 App 复用、新增账号/App/切换的操作手册、Phase 0(pangolin 仓库级
快速解锁)/Phase 1(完整多账号模型)分期、待核实的 gitea 能力。已登记 docs/index.html。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-07 00:08:30 +08:00
wangjia
acb9d8052b
docs: runbook 修正 App ID 能力(主 app 需 System Extension)+ 收敛为 2 个 App ID
...
实操验证补正:§1.2 原写 4 个 App ID 各勾 App Groups+Network Extensions,漏了主 app
的 System Extension 能力——缺它 macOS 主 app 的 Developer ID profile 不含
com.apple.developer.system-extension.install,构建报「profile doesn't include the
System Extension capability」。改为 2 个唯一 App ID(iOS/macOS 共用同串):主 app 需
App Groups+Network Extensions+System Extension,扩展需 App Groups+Network Extensions;
并说明改能力后 profile 变 Invalid 须重新生成。
背景:macOS Developer ID 签名链已本地端到端验证通过(build→重签→codesign 核验:
Yanmei AI LLC / 44WULXM6SV / com.yanmeiai.pangolin,零中国痕迹)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-06 23:17:47 +08:00
wangjia
7be0eb4c08
docs: 迁移 Runbook 更新——代码侧已完成(signing.env 单源 + codegen)
...
Team ID 已知(44WULXM6SV),§3 代码替换已落地并收敛为单一真相源:改写 §3 为
「signing.env + gen-signing.mjs codegen + drift 闸」,占位 <NEW_TEAM> 全替为真值,
顶部进度卡与 §6 责任表标注代码侧完成。剩余为 Apple 后台建资产/本机公证/gitea/验证。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-06 22:06:36 +08:00
wangjia
47c1e3329f
docs: Apple 开发者账号迁移 Runbook(中国→美国 Yanmei AI LLC)
...
完整迁移流程:把 Pangolin 的 Apple 签名从中国「岩美北京技术」(Team BYL4KQHMTN)
整体迁到美国「Yanmei AI LLC」,目标产物+仓库无中国账号痕迹。干净切割方案(全新
Bundle ID com.yanmeiai.* + 全新 Team/证书/描述文件/公证凭据,零依赖旧账号)。
含:命名总表、Apple 后台建资产逐步(App ID/App Group/两证书/四描述文件/ASC Key)、
本机钥匙串+公证凭据配置、仓库 Team ID/Bundle ID/App Group/实体名全量替换点清单、
gitea 12 个 Apple secret 换新、无痕验收清单、责任顺序表。已登记 docs/index.html。
代码替换待用户提供新 Team ID + 证书全名后单独一批执行。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01FEVUXAbFT6bF1Qw27RHWoD
2026-09-06 19:42:46 +08:00
wangjia
52912268d0
docs(routing): 可配置分流 spec 状态 → Phase 1 已实现
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
2026-07-28 09:34:35 +08:00
wangjia
3a2c48541c
docs(routing): 计划澄清 enabled 缺省语义(必填/客户端恒发/服务端不默认)
...
Task 2 复核发现 plan 内部不一致(接口注释 vs 代码块)。裁决:enabled 必填,Task 6 model
恒输出 enabled=true、fromJson 容错默认 true;服务端不修正缺省(缺失=禁用属 fail-safe)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
2026-07-28 07:39:51 +08:00
wangjia
c99a9b1106
Merge branch 'main' into feat/configurable-proxy
...
# Conflicts:
# .gitignore
# client/lib/l10n/strings_es.dart
# client/lib/l10n/strings_ja.dart
# client/lib/l10n/strings_ko.dart
# client/lib/l10n/strings_ru.dart
# docs/index.html
# scripts/local_test.sh
2026-07-28 07:17:34 +08:00
wangjia
7776fc4d6c
docs(routing): 可配置分流 Phase 1 实现计划(.md 执行版 + HTML 阅读版 + 登记索引)
...
Phase 1 计划:Task 0 合并 main(前置)+ 10 任务 TDD(服务端 routing_profiles 表/校验/
API/BuildClientConfig 翻译/connect 读档案;客户端 model+API+provider/规则子屏 UI/设置入口/
自动重连)。执行真相源 docs/superpowers/plans/2026-07-27-configurable-proxy-phase1.md,
阅读版 docs/configurable-proxy-plan.html 已登记 docs/index.html「实现计划」。待用户确认后执行。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
2026-07-27 12:06:21 +08:00
wangjia
f1292b757c
design(configurable-proxy): 修图标(补 plus/私有服务用 shield)+ 桌面补齐 + 模式语义
...
- icons.js 补 'plus'(原缺失致「添加规则」+ 空);私有服务图标 server(不存在)→ shield
- 桌面 routing 视图:内置规则加图标框(与移动一致)+ 从文本导入/重置默认已在
- 移动 routing 子屏:补「从文本导入/重置默认」
- 两端加模式说明:用户规则仅「智能分流」生效;全局/直连忽略(系统层仍强制)
- 说明文档加三模式语义表 + 系统层解释
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-27 02:26:48 +08:00
wangjia
f10e887c2a
design(configurable-proxy): Settings页衔接(Smart routing→分流规则入口)+ 默认/自定义规则冲突处理
...
- Settings 的 Smart routing 二元开关演进为「分流规则」入口行(显示模式+chevron)
- 冲突处理:系统层永远赢>用户规则(有序首命中)>智能分流>FINAL;
UI 主动标记①被遮蔽永不命中②撞锁定系统目标 两类冲突
原型加 before/after 对照 + 冲突可视化例;说明文档加对应章节。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-27 01:57:38 +08:00
wangjia
51317e9f43
design(prototype): 分流规则屏用 v2 真 ui-kit 重建 + 搬入配置说明文档(Task 3)
...
用 v2 设计系统真原子(.segswitch/.setting-row/.toggle/.card/.pill/.btn)建
screens/routing-rules.html(移动子屏 + 桌面设置窗口),替代独立 docs mockup。
配置说明文档搬入本分支 docs/。设计-first,待确认 4 取舍后出实现计划。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-27 01:48:22 +08:00
wangjia
5bc5ed1e62
ci: pangolin 的 runs-on 从 nas 统一改为 mac
...
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (push) Successful in 29s
ci-pangolin / Cleartext Scan — Android 禁明文 (push) Successful in 21s
ci-pangolin / Lint — shellcheck (push) Successful in 49s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (push) Successful in 22s
ci-pangolin / OpenAPI Sync Check (push) Successful in 10m53s
ci-pangolin / Flutter — analyze + test (push) Failing after 12s
ci-pangolin / Codegen Drift — token 生成物未漂移 (push) Successful in 28s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (push) Successful in 24s
ci-pangolin / Go — build + test (push) Failing after 46s
ci-pangolin / E2E Smoke — L4 进程级端到端 (push) Failing after 36s
ci-pangolin / Go — integration (mysql/redis testcontainers) (push) Failing after 5m15s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (push) Successful in 1m3s
runner 命名/标签统一:mac-pangolin-2 是跑在 Mac 上的个人级 runner,原来挂
`nas` 标签(历史上按"理想归宿是 NAS Linux runner"预留),命名与实体不符、
易混。现把 runner 标签改为 `mac`(个人级不变,仍服务名下所有仓库),并把
pangolin 全部 workflow 的 `runs-on: nas` → `runs-on: mac` 对齐(ci.yml 9 个
job + 解释注释、deploy-client.yml 4 个 job)。与 jiu 的 `runs-on: mac` 统一,
一个个人级 mac runner 即可服务两边。ci-runner.md 标签引用同步更新。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-26 00:55:26 +08:00
wangjia
344dfe9a82
docs(agent): 记录 auth_user 血泪教训 + 客户端隧道前置 + 验收须真连接
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-24 07:39:39 +08:00
wangjia
e4b527b2c9
docs(agent): 上线验收补「live 生效核实」与「域名+裸IP 双形式测另一账号被拒」
...
C1 指出 config.json 内容正常不等于线上生效——SIGHUP 走 sing-box 自身校验,若
新配置被拒,它会保留旧实例继续跑,agent 侧仍记"渲染成功"。第 4 步补
systemctl is-active sing-box + journalctl -u sing-box -n5 | grep -v FATAL。
I3 表明 ip_cidr 目的地存在域名形式绕过口子(已修),第 6 步"另一账号被拒"补充
必须分别用域名和裸 IP 两种目的地表达形式各测一遍,只测一种形式验证不到位。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-23 07:45:38 +08:00
wangjia
dbc787ac2e
docs(agent): 设计 §12 补 SNI 绕过残留 + brain basic auth 已落地
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-23 07:38:16 +08:00
wangjia
1cb494daa6
docs(agent): 计划回填 cleanHosts 去重的执行后修订
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-23 02:28:49 +08:00
wangjia
3324c1d687
docs(agent): 私有目的地 ACL 配置样例与常驻校验测试
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-23 02:24:51 +08:00
wangjia
6df7c9de44
docs(agent): 修复计划未闭合代码块 + Task 6 改用常驻测试校验样例
...
未闭合的 ```go 让 Task 4-6 的标题落进代码块,task-brief 无法提取;
Task 6 原用 go run 校验样例文件,该文件在 module 外无法解析 import,
改为常驻测试 TestACLExampleFileStaysValid,并断言样例 uuid 为占位符
以防真实 dp_uuid 入库。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-23 01:12:06 +08:00
wangjia
9cbffbb727
docs(agent): 私有目的地 ACL 设计方案与实现计划
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-23 01:01:19 +08:00
wangjia
4a98bccedc
docs: iOS 绕过 App Store 分发 VPN 渠道调研(官方七渠道+国内灰产梯度+落地建议)+ 索引登记
ci-pangolin / Lint — shellcheck (pull_request) Successful in 10s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 23s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 20s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 37s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 25s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 6s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 4s
ci-pangolin / Go — build + test (pull_request) Failing after 10s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m49s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 19s
ci-pangolin / OpenAPI Sync Check (pull_request) Failing after 12m23s
2026-07-13 20:31:35 +08:00
wangjia
5e9bb9e611
docs: 通知机制实现计划 HTML 阅读版 + 索引登记 + 设计互链
2026-07-13 14:15:05 +08:00
wangjia
0657a830d0
docs(plan): 系统通知机制实现计划(11 任务 TDD)
...
ci-pangolin / Lint — shellcheck (pull_request) Successful in 12s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 24s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 19s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 39s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 18s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 32s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 3s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 3s
ci-pangolin / Go — build + test (pull_request) Failing after 10s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 5m7s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 20s
迁移000026 → notices.Store → handler+openapi → 四事件钩子(同事务) → Service邮件兜底
→ nodectl notice → main装配+发版联动 → 原型统一 → client api/provider → 通知页+红点+l10n → 文档。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-13 13:30:28 +08:00
wangjia
e195d037a4
docs: 系统通知机制设计文档(Spec ③)
...
ci-pangolin / Lint — shellcheck (pull_request) Successful in 15s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 28s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 21s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 36s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 20s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 3s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 4s
ci-pangolin / Go — build + test (pull_request) Failing after 11s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m36s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 21s
ci-pangolin / Flutter — analyze + test (pull_request) Failing after 11m37s
App 内统一通知收件箱,六类(重要/新特性/新闻/到账/版本/活动)。
单 notices 表+user_id(NULL=广播);已读服务端 last_read_at 水位;
GET /v1/notices(合并+unread_count)+POST /read;生产三路(nodectl/
事件钩子同事务/发版联动);邮件仅 important+显式 --email。
含数据流 SVG;登记 docs/index.html;与 Spec② 奖励事件接缝正式接通。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-13 13:21:26 +08:00
wangjia
559fd38a52
docs(reward): 设计文档 webhook 路径 /tg/webhook→/v1/tg/webhook + app_text 首充注释 15→7
...
ci-pangolin / Lint — shellcheck (pull_request) Successful in 10s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 25s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 19s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 36s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 3s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 3s
ci-pangolin / Go — build + test (pull_request) Failing after 13s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Successful in 4m28s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 20s
ci-pangolin / OpenAPI Sync Check (pull_request) Failing after 14m23s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Failing after 14m35s
终审指出:实际路由挂在 /v1 组下,setWebhook 须指向 https://api.yanmeiai.com/v1/tg/webhook ;
app_text.dart:603 抽象 getter 上的过时「15 天」注释一并订正为 7。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-13 08:18:40 +08:00
wangjia
98ba578169
docs: 邀请奖励实现计划 HTML 阅读版 + 索引登记
2026-07-13 08:10:55 +08:00
wangjia
b70857cc0e
docs(plan): 邀请奖励 + 奖励任务实现计划(14 任务 TDD)
...
依据 docs/invite-task-rewards-design.html 拆成逐任务 TDD 计划:
后端 迁移000024 → GrantRewardTx → reward.Store → reward.Service(注册段防刷发奖)
→ auth.Register 接 inviteCode → pay webhook 首充钩子 → GET /v1/invite
→ TG token → TG webhook getChatMember 真校验 → main 装配;
客户端 invite api/provider → invite 页真实化+六语 l10n → 注册页邀请码输入。
含真实签名/建表 SQL/防刷用例;deep-link 预填列为可选后置。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 23:58:30 +08:00
wangjia
b223cc5f81
docs: 邀请奖励 + 奖励任务(加入 TG 频道)设计文档(Spec ②)
...
两条并行得分途径共用发天数原语(applySubscription source=invite/task):
- 邀请两段式双方都得:注册各 +3、被邀请人首充双方再各 +7(每转化 +10/+10)
- 奖励任务首个「加入 TG 频道」+3,Bot getChatMember 真校验
(token 绑号 → /tg/webhook → 查频道成员 → 发)
防刷:自邀请拦截 + invitee 唯一 + dp_uuid 设备去重 + 注册段月度封顶(首充不封)
+ telegram_id 全局唯一领
数据:users +invite_code/first_paid_at、referrals、通用 reward_claims
含 TG 验证时序 SVG 图;登记 docs/index.html。边界:不做现金/多级/退群回收,
通知集成留接缝待 Spec③。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 23:10:20 +08:00
wangjia
8fba080d20
docs(pay-v2): IA 重构 + 订单过期态 落地验收记录(step5)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-12 18:32:24 +08:00
wangjia
a0367b37e5
docs(plan): IA 计划加 Task 0 订单过期态后端 + 前端 expired 处理 + 部署步骤
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-12 17:14:09 +08:00
wangjia
6f74c80025
docs(plan): 账户 IA 重构 Flutter 实现计划(8 任务,TDD,含 Spec ②③占位接口)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-12 17:07:08 +08:00
wangjia
77a37fce12
docs(design): 账户/设置/联系 信息架构重构 Spec ①(去重+归位,含邀请/通知预留位)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-12 08:40:55 +08:00
wangjia
ff91be928a
docs(pay-v2): 开发决策日志 step3-4(客户端落地 + 集成测试)
...
ci-pangolin / Lint — shellcheck (pull_request) Successful in 10s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 25s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 16s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 17s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 57s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 37s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 4s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 3s
ci-pangolin / Go — build + test (pull_request) Failing after 12s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 11s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m49s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 20s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-12 00:07:51 +08:00
wangjia
f6ce5267d5
feat(design): 支付渠道 switch 原型 + segswitch 原子 + 图标/语言同源闸
...
- .segswitch 段控原子入 atoms.css + 登记 index.html
- purchase/ui-mobile/ui-desktop 三屏:购买页支付渠道 switch(USDT→crypto 默认 / 人民币→alipay),套餐价随渠道分币种显示,删两步弹层 + nezha
- 订单列表/详情集成进移动+桌面主框架
- icons.js 58 图标 sprite 单源 + gen_flutter_icons codegen + check-l1-sync 同源闸(图标同集 + l10n 完整)
- pay-v2 开发决策日志 docs/pay-v2-dev-log.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-11 23:45:55 +08:00
wangjia
43c76fb978
Merge remote-tracking branch 'origin/main' into feat/pay-v2-integration
...
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (push) Successful in 25s
ci-pangolin / Lint — shellcheck (push) Successful in 29s
ci-pangolin / Cleartext Scan — Android 禁明文 (push) Successful in 22s
ci-pangolin / OpenAPI Sync Check (push) Successful in 40s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (push) Successful in 19s
ci-pangolin / Flutter — analyze + test (push) Failing after 4m59s
ci-pangolin / Codegen Drift — token 生成物未漂移 (push) Successful in 1m51s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (push) Successful in 5s
ci-pangolin / Go — build + test (push) Failing after 1m33s
ci-pangolin / E2E Smoke — L4 进程级端到端 (push) Failing after 14s
ci-pangolin / Go — integration (mysql/redis testcontainers) (push) Failing after 4m59s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (push) Failing after 4s
# Conflicts:
# docs/index.html
# server/cmd/server/main.go
2026-07-11 16:44:05 +08:00
wangjia
390b8b8f84
chore(server): pay v2 接入终验 + OpenAPI 登记 + 交付说明
...
全量矩阵本地全绿(build/vet/test/run_sqlite_test.sh + 新增 SQLite 文件库带数据
升级彩排 + MySQL 8 容器验证 000021 MODIFY ENUM;client analyze/test 功能全绿,
27 个既有 golden 像素噪声与本次接入无关)。server/api/openapi.yaml 登记 6 个新
Pay 端点(catalog/orders/orderNo/retry/cancel/webhook)+ schema,通过结构校验。
顺手修复 run_mysql_test.sh 缺 multiStatements=true 的既有 bug(与 pay-v2 无关)。
新增 pay_migration_rehearsal_test.go 验证 000021 升级不丢行/AUTOINCREMENT 续序,
并确认一处安全特性:已有 source='pay' 行后 down 会被 CHECK 约束正确拒绝。
交付说明 docs/pay-v2-integration-delivery.html(含测试矩阵/联调 checklist/部署
附录)已登记 docs/index.html,记录一处既有但未修的部署前置阻断项(go.mod 的
wangjia/codes 本地路径 replace 会阻断异机构建,超出本任务授权范围)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-11 00:34:10 +08:00
wangjia
3df5867c02
docs: pangolin×pay-v2 接入计划(9任务:迁移/codes提炼/PayClient/代理/webhook/Flutter购买支付页/终验)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-10 20:39:09 +08:00
wangjia
4cccd6bbfd
docs: pangolin×codes 共享库集成验证计划(10 任务,validation-first)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-10 13:34:40 +08:00
wangjia
d2d75cd33c
docs(ds-flow): Phase 5.6 — 前端全景文档 frontend-overview.html
...
docs/frontend-overview.html(照 jiu 十节裁剪):一次 UI 改动标准路径 · 目录地图 ·
三层真相源模型 · 令牌 codegen · 四道静态闸「违规谁拦」· 像素验收(golden 双主题
全绿含 CJK / fidelity 待建) · 响应式五端 · 规则速查 · 文档索引。登记进 docs/index.html。
同时标注两项延后(非阻塞,前置=原型整屏 HTML 属 L3 新屏工作):
- 4.4 mobile golden 覆盖扩容
- 5.5 fidelity 像素闸(原型无整屏可比,待 design/prototype/screens/ 落地)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:44:31 +08:00
wangjia
a22db0874f
feat(ds-flow): Phase 5.4 — pre-commit 增挂 ds-flow 条件闸
...
.githooks/pre-commit 在原有(红线/SQL/codegen-drift)基础上增挂三道 ds-flow 闸,
条件触发、秒级:
- 原型校验(check-ds):动了 design/prototype/ 才跑
- 跨端同源(check-l1-sync):动了 prototype/ 或 web/{website,usercenter}/ 才跑
- Flutter 颜色单源(check_ds_code --changed):动了 client/lib/*.dart 才跑(只扫改动)
install-hooks.sh 说明同步更新。启用仍是每台机一次性 `bash ci/install-hooks.sh`
(不代跑,改本机 git config;CLAUDE.md 治理章节已注明)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:42:27 +08:00
wangjia
29e225c63c
feat(ds-flow): Phase 5.3 — CI 串联三道闸 + golden 扩全量
...
.gitea/workflows/ci.yml:
- 新增 ds-flow job:原型校验(check-ds)+ 跨端同源(check-l1-sync)+ Flutter
颜色单源(check_ds_code --strict),均 node:20 容器零依赖跑。
- golden job 从「components+auth」扩到全量 test/golden(desktop/tablet 现均绿,
含 CJK 真渲染 + tablet zh/en 矩阵)。
- codegen 零 diff(codegen-drift job)已有。
至此四道静态闸 + golden 全部进 CI 硬闸(「规则没上闸=没有规则」)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:41:10 +08:00
wangjia
14a9836882
feat(ds-flow): Phase 5.1-5.2 — Flutter 裸色闸 + 原型校验闸
...
5.1 client/tool/check_ds_code.mjs(照 jiu):禁 Flutter 业务代码裸 Color(0x)/
具名 Colors.x;豁免 token 生成层(pangolin_tokens.gen.dart)+ 实现层
(pangolin_theme.dart);--changed(pre-commit)/--strict(CI)/全量三模式;
剥行尾注释防误报。现状 --strict 通过(0 违规,UI 层零裸色)。
5.2 design/prototype/tools/check-ds.mjs:原型单源守门,5 道——硬编码色(仅严格
扫 atoms.css)/未定义 token/font-family 走 var(--font*)/图标走 icons.js sprite/
组件原子在 index.html 登记;剥 CSS+HTML 注释防误报,SVG fill/stroke 豁免。
现状通过(serve.mjs 改动时自动跑)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:39:44 +08:00
wangjia
c4eb92fc2d
feat(ds-flow): Phase 4.2/4.3/4.5 — CJK golden 字体 + timer 泄漏修复 + 基线重生成
...
4.5 harness/资源修复:UpdateNotifier 初始延迟由不可取消的 Future.delayed 改为
可取消 Timer,onDispose 一并取消——修 golden 整屏挂载时 pending-timer 泄漏
(生产也受益,provider dispose 不再悬挂 timer)。
4.2 CJK 测试字体:拷生产子集 NotoSansSC-Regular-subset.otf 进 test/fonts/ +
flutter_test_config 注册(family 'Noto Sans SC'),golden 中文真渲染不出豆腐块。
顺带修 tablet_pages_golden_test 既存编译错(6 语言改动遗留):localeProvider
override 返回值 AppLang → 改返回 LocaleNotifier 子类 _FixedLocale(钉死语言态)。
4.3 权威 Linux 容器(ghcr.io/cirruslabs/flutter)重生成全量 golden 基线:
34 tests All passed,32 张 PNG 更新(CJK 真字 + 暖阴影 + tablet zh/en 矩阵)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:27:09 +08:00
wangjia
bb5acb6c1e
feat(ds-flow): Phase 4.1 — 清 adaptive_menu 唯一裸 Material 色
...
adaptive_menu.dart shadowColor: Colors.black26(冷黑)→ PangolinColors.sand950
withValues(0.24)(暖近黑,对齐 §5 暖阴影铁律)。UI 层(widgets/screens/shell)
自此零裸 Material 色。flutter analyze 通过。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:11:11 +08:00
wangjia
39324c46a7
feat(ds-flow): Phase 3 — Web 硬编码色清零 + 原子台账收敛
...
「各自实现 + 同源闸」决策落地(不建跨端组件包):
- website.css 页脚恒暗区灰阶就近吸附主题无关 sand 原色阶(cfc6b8→sand-300、
a89e8e→sand-400、8a8070→sand-500),消除 5 处硬编码。
- check-l1-sync 白名单加品牌 logo 色 f4efe8(Brand.astro 内联 SVG fill)。
- usercenter 13 处硬编码全为 #fff(白名单),已干净。
- CONTRACT.md 增「§6 ds-flow Web 原子清单 + 屏级三态台账」:公用原子两端映射表、
图标三端⊆原型、L2 屏级三态(Flutter 快照/Web 代码先行/原子层同步)、硬编码白名单。
同源闸 4 道全绿(token 值 · 图标⊆原型 · Web 无硬编码色 · 幂等零 diff)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:09:16 +08:00
wangjia
f69696daae
feat(ds-flow): Phase 2 — Web token 同源闸 check-l1-sync.mjs
...
tools/check-l1-sync.mjs:L1 跨端同源闸(纯 Node 零依赖),4 道:
① website tokens.gen.css token 值 ≡ 原型 tokens.css(:root+dark)
② usercenter public/colors_and_type.css 同上
③ 三端图标 ⊆ 原型 icons.js sprite(usercenter LUCIDE 键+路径、Flutter
_byName 键)
④ Web 硬编码色扫描(白名单 #fff/#000+品牌 logo 色,ds-allow 行内豁免,
排除生成的 token 定义文件)
现状:①②③ 全过(Web token 与原型一致、Web token 幂等零 diff、图标已收敛);
补原型 icons.js 的 'chart' 别名(Flutter barChart 用,先登记原型)。
④ 余 6 处 website.css 页脚灰阶/Brand.astro 近白 —— Phase 3 清理 worklist。
CI 接线见 Phase 5。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 01:03:36 +08:00
wangjia
83fce75c8c
docs(ds-flow): Phase 1.6-1.7 — ui_kits 标 DEPRECATED + 真源指针收敛
...
用户定:ui_kits 暂留(整屏布局尚无 HTML 替代,重建属 L3 不在本轮),标废弃
不删。
- design/CLAUDE.md:顶部加「真源对照」横幅(令牌→prototype/tokens.css、原子
→atoms.css+index.html、图标→icons.js、Flutter→client/lib/widgets、Web→
web/*;colors_and_type.css 降级别名、design/flutter 已删、ui_kits DEPRECATED、
_ds_manifest/_ds_bundle 历史派生物);§6「修改设计系统时」重写为 ds-flow 流程。
- design/ui_kits/DEPRECATED.md:醒目废弃标记 + 真源指引 + 暂留理由。
- 1.7:确认无构建/CI 消费 _ds_manifest/_ds_bundle/_adherence,登记职责交
index.html,旧工具产物标历史派生物(不删,无消费者)。
Phase 1(原型单源三件套)完成。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 00:59:26 +08:00