wangjia
|
b48097469e
|
fix(website): 落地页/注册页标题防孤字折行(text-wrap:balance + 字号收档)
ci-pangolin / Lint — shellcheck (pull_request) Successful in 13s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 25s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 17s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 37s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 21s
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 12s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 9s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m31s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 20s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 12:39:01 +08:00 |
|
wangjia
|
94266804bc
|
fix(server/reward): 邀请发放审计 target 带对方 id(invite:reg:invitee=N 等,替换静态占位串)——审计可回答「因谁而发」
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 24s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 22s
ci-pangolin / Lint — shellcheck (pull_request) Successful in 6s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 34s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 31s
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 9s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 11s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m37s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 19s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Failing after 14m46s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 12:24:27 +08:00 |
|
wangjia
|
65ce2664ee
|
feat(website): 独立注册页 /register(邮箱/邀请码预填+验证码注册+平台匹配下载)+ 主页/落地页跳转接入 + 登录态隐藏注册入口
ci-pangolin / Lint — shellcheck (pull_request) Successful in 13s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 25s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 23s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 34s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 21s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 34s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 8s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 8s
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) Failing after 4m34s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 19s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 12:20:32 +08:00 |
|
wangjia
|
254db4f40d
|
feat(website): 邀请落地页 /i/<code> —— 显码+复制+奖励说明+下载引导(CF Pages _redirects 重写)
App 分享的邀请链接 /i/<8位邀请码> 此前回落主页;CF Pages 静态托管加 _redirects
把 /i/* 统一重写到 /i/ 的静态产物,邀请码本身由 InviteCard.jsx 在浏览器端从
location.pathname 解析并按 server/internal/reward/service.go 的字母表校验格式。
奖励文案对齐客户端 strings_zh/en.dart 的 inviteReward* 措辞;因邀请码只在运行时
可知,该页正文用 .langseg 胶囊做 zh/en 单显运行时切换,Header/Footer 仍走全站
i18n 惯例整页单显中文;下载按钮指向主页 #download 锚点。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 12:04:45 +08:00 |
|
wangjia
|
2c94b53a9e
|
fix(server/reward): TG bot 回复区分已领取/未加入两态 + 按 Telegram language_code 中英双语
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 24s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 23s
ci-pangolin / Lint — shellcheck (pull_request) Successful in 6s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 36s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 34s
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 11s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Failing after 10m52s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m33s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 19s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 11:46:55 +08:00 |
|
wangjia
|
66422f92ce
|
fix(client): created 单详情补「取消订单」按钮(原型 pending 双按钮早有规格,代码漏)+ 自动连接 toast 3s→1.5s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 19s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 23s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 19s
ci-pangolin / Lint — shellcheck (pull_request) Successful in 6s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 34s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 36s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 4s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 5s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m42s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 21s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10m19s
ci-pangolin / Go — build + test (pull_request) Failing after 10m26s
- orders 详情 created 态:继续支付(主)+ 取消订单(ghost)——orders.html/ui-desktop 原型
pending 态早已登记双按钮,Flutter 侧漏实现(代码落后原型)。取消走远程 cancel,
失败(如其实已付,pay 409)不报错,统一 invalidate 刷新以最新状态为准。
- 自动连接「正在自动连接到 X」toast 缺省 3s 用户反馈偏长 → 1.5s(与「已复制」1.4s 同量级)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 11:43:48 +08:00 |
|
wangjia
|
1c2ec2844d
|
feat(server/pay): 优惠套餐(Promo SKU)每账号限购一次——已付过再下单 409 PROMO_ALREADY_USED
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 23s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 17s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 18s
ci-pangolin / Lint — shellcheck (pull_request) Successful in 6s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 35s
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 4s
ci-pangolin / Go — build + test (pull_request) Failing after 10s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 9s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Failing after 4m40s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 21s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 11:36:24 +08:00 |
|
wangjia
|
92943258ab
|
fix(client/orders): 继续支付改为 retry 恢复原单会话(原误进购买页致重复下单);409 已付自纠刷新
ci-pangolin / Lint — shellcheck (pull_request) Successful in 12s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 25s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 20s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 32s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 21s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 38s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 2s
ci-pangolin / DS-flow — 原型/跨端同源/代码色单源闸 (pull_request) Successful in 5s
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) Failing after 4m50s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 20s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 11:29:25 +08:00 |
|
wangjia
|
07c339c18e
|
feat(server/devices): users.max_devices_override 单用户设备上限覆盖(NULL走套餐默认)+ 迁移000025
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 23s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 16s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 39s
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 4s
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) Failing after 5m8s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 19s
ci-pangolin / Lint — shellcheck (pull_request) Failing after 13m37s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 10:15:07 +08:00 |
|
wangjia
|
3d24451835
|
fix(nodes): 桌面 Nodes 页统一 600 宽度(原型挂 view-body + Flutter PageBody)+ 双列网格改单列镜像原型
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 10:13:48 +08:00 |
|
wangjia
|
a61641b53b
|
refactor(client): SubScaffold 六合一(视觉零变化)+ tablet 注释订正 + 平板通知铃入口(#20)
|
2026-07-13 10:07:18 +08:00 |
|
wangjia
|
3a8ff64921
|
fix(client): 审计修复——device_limit 相对时间走 relativeTime 单源+裸 Icons 换 PangolinIcons+Payment onDone 三处接通+内联双语文案收进 AppText
|
2026-07-13 09:56:22 +08:00 |
|
wangjia
|
e95995f20f
|
fix(prototype): 桌面补 redeem 兑换视图 + accRedeemRow 接线改指 redeem(原为误指购买页)
|
2026-07-13 09:53:25 +08:00 |
|
wangjia
|
fa9a5c2d5e
|
design+client: 抽 .view-body/PageBody 统一桌面内容页宽度(600/wide 840)——stats·contact 补约束,settings·contact 560→600,九页收口
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
|
2026-07-13 09:46:57 +08:00 |
|
wangjia
|
b88921a030
|
fix(prototype): ui-desktop 补 [hidden] display:none 守卫——登录静态屏 signup 表单不再与 signin 并排溢出
.login-form{display:flex} 作者样式覆盖了 hidden 属性的 UA display:none,致带 hidden 的
signupForm 被顶出来与 signin 并排、溢出 760px 分屏卡被裁。补 ui-mobile.html:93 同款
[hidden]{display:none!important} 全局守卫;已审计全部 hidden 元素均用 .hidden 属性切换,
无 style.display 依赖冲突。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 09:29:39 +08:00 |
|
wangjia
|
a48e38cac0
|
design(prototype): 回填邀请屏——战绩三格+TG任务卡两态+具体天数(镜像 invite_page.dart,补原型先行欠账)
|
2026-07-13 09:23:14 +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
|
488688aeac
|
fix(reward): TG webhook 空 secret fail-fast + 首充奖励文案六语 15→7(终审必修)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 08:17:11 +08:00 |
|
wangjia
|
98ba578169
|
docs: 邀请奖励实现计划 HTML 阅读版 + 索引登记
|
2026-07-13 08:10:55 +08:00 |
|
wangjia
|
d04183b066
|
merge(invite): 客户端邀请奖励 UI 轨(Task 11-13)并入
invite api/provider + invite页真实化(邀请区+战绩+TG任务卡,六语) + 注册页邀请码输入。
客户端并行轨,文件与后端不相交,SDD 逐任务评审全过。
|
2026-07-13 08:05:18 +08:00 |
|
wangjia
|
c29aaf9a2a
|
feat(server): 装配 reward 服务 — 注入 auth/webhook + 挂 /v1/invite、/tasks/telegram/start、/tg/webhook
|
2026-07-13 08:01:01 +08:00 |
|
wangjia
|
0b24e26fb6
|
feat(client/auth): 注册页加邀请码(选填)输入,提交时传 invite_code
|
2026-07-13 08:00:25 +08:00 |
|
wangjia
|
e26284d072
|
feat(server/reward): TG getChatMember 真校验 + ClaimTelegram + POST /tg/webhook
|
2026-07-13 07:54:46 +08:00 |
|
wangjia
|
e061237496
|
feat(client/invite): 邀请页真实化(邀请区+战绩+TG 任务卡)+ 六语 l10n
|
2026-07-13 07:51:19 +08:00 |
|
wangjia
|
e23cd5e1bd
|
feat(server/reward): TG 绑定 token 签发/消费 + GET /v1/tasks/telegram/start
|
2026-07-13 07:49:31 +08:00 |
|
wangjia
|
d23f7bca8f
|
feat(server/reward): GET /v1/invite — 邀请码/链接/战绩/TG 任务态
|
2026-07-13 07:46:07 +08:00 |
|
wangjia
|
de1117b0e6
|
feat(server/pay): 首充钩子 — settle 内接邀请首充段发奖(first_paid_at 幂等)
|
2026-07-13 07:41:15 +08:00 |
|
wangjia
|
cdf67a200c
|
feat(client): invite api + provider + auth_api.register 加 inviteCode
|
2026-07-13 07:39:01 +08:00 |
|
wangjia
|
54d106ca8b
|
feat(server/auth): Register 加 inviteCode + ReferralHook(注册后 best-effort 归因)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 07:33:42 +08:00 |
|
wangjia
|
2fb7391a17
|
feat(server/reward): OnRegister 绑定 + 注册段双方发奖 + 自邀请/设备/月封顶防刷
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
2026-07-13 07:27:10 +08:00 |
|
wangjia
|
2bd31bbd55
|
fix(server/reward): isDup 收窄到 unique/duplicate 防误判 FK/NOTNULL + 补 referrals 唯一路径测试
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 07:19:41 +08:00 |
|
wangjia
|
75636c8ea3
|
feat(server/reward): Store — referrals/reward_claims/invite_code 数据访问 + 唯一守卫
|
2026-07-13 07:15:28 +08:00 |
|
wangjia
|
0695c7958b
|
feat(server/codes): GrantRewardTx 复用 applySubscription 发奖励会员天数
|
2026-07-13 07:11:17 +08:00 |
|
wangjia
|
52b5e90d92
|
fix(server/migrate): 000024 sqlite 重建 subscriptions 后补回 idx_subs_user_exp 索引 + 回归断言
000024 迁移重建 subscriptions 表(source CHECK 扩容)时未重新创建
idx_subs_user_exp(user_id, expires_at)索引,导致 SQLite(生产 pangolin1
实际驱动)上订阅按 user_id/expires_at 查询退化为全表扫描。up/down 均补回
CREATE INDEX,并在 TestSQLiteMigrateUpDown 里加断言防止再次静默丢失。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
2026-07-13 07:08:26 +08:00 |
|
wangjia
|
9b858c5224
|
feat(server/migrate): 000024 邀请奖励表 + subscriptions.source 扩 invite/task
|
2026-07-13 06:59:52 +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
|
252779c607
|
fix(client/pay): CNY 渠道 method 对齐生产哪吒(nezha)+ 下单失败不再静默
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 45s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 20s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 37s
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 15s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 10s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Successful in 4m41s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 20s
ci-pangolin / Lint — shellcheck (pull_request) Failing after 12m35s
根因(购买按钮全端「点了没反应」):
- 生产 pay-v2 的 CNY 渠道是哪吒(nezha)聚合(底层支付宝/微信),客户端却给
CNY 发 method=alipay → pay 不认 → POST /api/v2/orders 400。USDT/crypto 一直正常。
- 且 _buy 只在 awaitingPayment 时导航,下单失败(phase=failed)既不导航也不弹错,
非 Auth 异常还直接从 start() 抛出未捕获 → 用户看着「没反应」。
改:
- PayChannelX.method:cny 'alipay' → 'nezha'(usdt 仍 crypto)
- payment_provider._metadata 法币条件同步 nezha;start() 补 catch(_) 兜非 Auth 异常
落 failed(状态机不再卡 creating)
- purchase_page._buy:phase==failed 时 showPangolinToast 显式提示
- payment_page 换支付方式的另一渠道 alipay → nezha
- 测试钉:PayChannel.cny.method == 'nezha'(发错 method 会被 pay 400)
nezha 返回 render_type=redirect(payload.url),客户端现成 redirect 分支直接接;
orders_page 早有 'nezha'→payMethodNezha 标签。服务端无需改(method 透传、
SettlementCurrency 只区分 crypto vs 法币)。
验证:flutter analyze 干净;payment 相关 18 测试全过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 22:09:31 +08:00 |
|
wangjia
|
b702957788
|
feat(client/update): macOS 自更新改为自动装进 /Applications + 重启
ci-pangolin / Lint — shellcheck (pull_request) Successful in 9s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 24s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 20s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 19s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 56s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 33s
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 12s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Failing after 12s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Successful in 4m32s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 22s
原「下载到 Downloads → 访达定位 → 手动拖入」半自动流程改为全自动:
- 下 zip → ditto 解压到暂存 → 写分离 helper 脚本、Process.start(detached)、exit(0)
- helper 等主进程退出 → 原子换 bundle(mv 旧→.old → mv 新→原位,任一步失败自动回滚)
→ 清 quarantine → open 重启新版
- 权限:主 app 未开沙箱;admin 用户对 /Applications 可写 → 静默无弹窗(案例①,绝大多数)
.app 属主非本人 → osascript 弹一次系统原生密码框提权(案例②/③)
- 兜底:非 /Applications/不可写/解压失败/提权取消 → 回退旧的访达定位手动流程,绝不残废 app
- 不碰 sysext:运行中的扩展从 /Library/SystemExtensions 跑,换 .app 与手动拖同路径,
新版启动照常 OSSystemExtensionRequest
验证:flutter analyze 干净;helper sh -n + shellcheck 通过;假 bundle dry-run 换装+重启+清理跑通。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 21:55:58 +08:00 |
|
wangjia
|
71fc982bb2
|
chore: bump 1.0.72+73(优惠套餐 + 发版测自动更新)
ci-pangolin / Lint — shellcheck (pull_request) Successful in 12s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 28s
ci-pangolin / Cleartext Scan — Android 禁明文 (pull_request) Successful in 18s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 46s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 21s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 34s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 4s
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) Successful in 5m6s
ci-pangolin / Golden — 视觉回归 (全量:components/auth/desktop/tablet) (pull_request) Failing after 21s
Deploy Client / build-windows (push) Successful in 1m54s
Deploy Client / build-android (push) Successful in 2m0s
Deploy Client / build-macos (push) Successful in 3m37s
Deploy Client / build-ios (push) Successful in 4m56s
Deploy Client / release-deploy (push) Successful in 2m9s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
client-v1.0.72
|
2026-07-12 20:01:13 +08:00 |
|
wangjia
|
17d99acf62
|
feat(client/purchase): 全员优惠月付特殊卡片(¥6/$1,随渠道显价)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 19:34:07 +08:00 |
|
wangjia
|
7ac9fa40f0
|
feat(server/pay): catalog 加全员优惠月付 pro_month_promo(¥6/$1)+ Promo 标记
优惠档全员可见,客户端用特殊卡片展示;pay 侧需种同 biz_code 商品后方可真下单
(未种前 product_not_found→404,UI 先就绪)。catalog 测试更新为 4 档 + promo 断言。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 19:27:34 +08:00 |
|
wangjia
|
2d599f836d
|
chore(scripts): local_test.sh API_URL 支持 env 覆盖(发版烘生产域名)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 19:04:34 +08:00 |
|
wangjia
|
e5f831796f
|
chore: bump 1.0.71+72(PlansScreen删除 + Redeem 文案 + 过期单重新购买)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 18:58:09 +08:00 |
|
wangjia
|
41f42dc250
|
fix(client/orders): 过期单动作改「重新购买」(orderRebuy),不再用歧义的「继续支付」
过期单 pay 会话已失效,点击本质是重新下单;expired 与 canceled 同用 orderRebuy。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 18:56:01 +08:00 |
|
wangjia
|
04d5cbc11f
|
feat(l10n): 账户入口 redeemEntry 改「Redeem」(去掉「& buy」,购买已独立成购买套餐行)
6 语言:Redeem/兑换/コード引き換え/코드 등록/Активация/Canjear;account golden 重录。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 18:54:58 +08:00 |
|
wangjia
|
2416c943cb
|
refactor(client): 删除死代码 PlansScreen + NavView.plans + choosePlan l10n(Renew→Purchase 直达后无调用者)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 18:53:10 +08:00 |
|
wangjia
|
d0bd24bc4b
|
chore: bump 1.0.70+71(账户 IA 重构 + 订单过期态)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 18:44:02 +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
|
0421c86099
|
test(golden): 重录 IA 漂移的 7 个 desktop golden(侧栏 Account + 账户页重排导致 shell 变化)
account/contact/devices/plans/redeem/servers/stats —— 均因 desktop_shell 侧栏加 Account 一级项 + account_page 重排,渲染变化,非 bug。full suite 232 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
|
2026-07-12 18:31:56 +08:00 |
|