Commit Graph

  • 74d8c857be feat(server): 私有服务域名分流(PANGOLIN_PRIVATE_SPLIT_DOMAINS) main wangjia 2026-07-16 07:22:16 +08:00
  • 4a98bccedc docs: iOS 绕过 App Store 分发 VPN 渠道调研(官方七渠道+国内灰产梯度+落地建议)+ 索引登记 feat/pay-v2-integration wangjia 2026-07-13 20:31:35 +08:00
  • 6d22127210 fix(client/pay): 修 Android 拉起收银台失败(couldn't open ali)——AndroidManifest 加 <queries>(https/alipays 包可见性)+ _openRedirectUrl 去 canLaunchUrl 误判改外部→app内浏览兜底 wangjia 2026-07-13 20:14:03 +08:00
  • 68608d6471 feat(server/auth): 新用户注册欢迎通知——注册同事务插 reward 类到账(零孤儿) wangjia 2026-07-13 19:03:18 +08:00
  • 70b950a084 chore(windows): installer 版本 1.0.72→1.0.73 对齐 pubspec wangjia 2026-07-13 18:24:40 +08:00
  • 823cae8e6e chore: bump 1.0.72+73 → 1.0.73+74(安全修复批测试包:设备override连接闸/promo TOCTOU/macOS自更新韧性/switchMethod) wangjia 2026-07-13 18:14:03 +08:00
  • a62a2b1797 fix(server/pay): promo 限购 settle 侧幂等复查 + 000027 部分唯一索引(TOCTOU) wangjia 2026-07-13 15:53:56 +08:00
  • ec4b3e0f22 fix(web): 注册卡片 async 回调加卸载守卫(I8);核实 I7 res.text() 已在 try 内(无需改) wangjia 2026-07-13 15:53:40 +08:00
  • 301e13f477 fix(client/payment): switchMethod 补 catch-all 兜网络/超时错(与 start/resume 对齐)防卡 awaitingPayment wangjia 2026-07-13 15:53:30 +08:00
  • 3acd3ca59d fix(client/update): macOS 自更新失败韧性——回滚校验/提权自愈防换丢+codesign验签闸+超时不硬动+退出码检 wangjia 2026-07-13 15:52:35 +08:00
  • 1e102a5a79 fix(server/nodes): 连接设备上限闸读 max_devices_override(登录闸已读,连接闸漏) wangjia 2026-07-13 15:47:15 +08:00
  • ed99e2943e fix(openapi): Notice.id string/uuid→integer/int64 + body_zh/en 移出 required(对齐实际实现,终审建议) wangjia 2026-07-13 14:22:00 +08:00
  • 5e9bb9e611 docs: 通知机制实现计划 HTML 阅读版 + 索引登记 + 设计互链 wangjia 2026-07-13 14:15:05 +08:00
  • 2b4350cfc4 feat(server): 装配 notices(路由替换空壳+reward/pay 注入)+ 发版联动插 version 公告 wangjia 2026-07-13 14:09:54 +08:00
  • 78fd600522 feat(client/notices): 通知页真实化+铃铛红点接 provider+进页清读+三类型标签六语 wangjia 2026-07-13 14:05:47 +08:00
  • 84b162e834 feat(nodectl): notice add/list/revoke 子命令(校验+审计+可选邮件) wangjia 2026-07-13 14:01:50 +08:00
  • 75ec361542 feat(server/notices): Service — 发布校验/审计/important 邮件兜底(幂等) wangjia 2026-07-13 13:51:28 +08:00
  • e1e198e169 feat(server): 到账通知四接缝(邀请注册/首充/TG/购买开通)——与发放同事务零孤儿 wangjia 2026-07-13 13:49:09 +08:00
  • 6a782a07fd feat(client): notices api + provider(未读计数/markAllRead/延迟首拉) wangjia 2026-07-13 13:48:12 +08:00
  • 0325603470 feat(server/notices): GET /v1/notices(合并+unread_count)+ POST /read + openapi 扩展 wangjia 2026-07-13 13:43:50 +08:00
  • ed1f805cbc feat(server/notices): Store — 广播∪定向合并查询/已读水位/事务内插通知 wangjia 2026-07-13 13:36:32 +08:00
  • 542954e4ea design(prototype): 通知视图两端统一(pill式)+ reward/version/promo 示例与展开态 wangjia 2026-07-13 13:36:16 +08:00
  • 21a30aa4c8 feat(server/migrate): 000026 notices 表 + users.notices_read_at 已读水位 wangjia 2026-07-13 13:32:23 +08:00
  • 0657a830d0 docs(plan): 系统通知机制实现计划(11 任务 TDD) wangjia 2026-07-13 13:30:28 +08:00
  • e195d037a4 docs: 系统通知机制设计文档(Spec ③) wangjia 2026-07-13 13:21:26 +08:00
  • ab84a3542a refactor(website): 邀请/注册页语言跟随站点路由(六语变体),移除卡内 zh/EN 切换 wangjia 2026-07-13 12:50:24 +08:00
  • b48097469e fix(website): 落地页/注册页标题防孤字折行(text-wrap:balance + 字号收档) wangjia 2026-07-13 12:39:01 +08:00
  • 94266804bc fix(server/reward): 邀请发放审计 target 带对方 id(invite:reg:invitee=N 等,替换静态占位串)——审计可回答「因谁而发」 wangjia 2026-07-13 12:24:27 +08:00
  • 65ce2664ee feat(website): 独立注册页 /register(邮箱/邀请码预填+验证码注册+平台匹配下载)+ 主页/落地页跳转接入 + 登录态隐藏注册入口 wangjia 2026-07-13 12:20:32 +08:00
  • 254db4f40d feat(website): 邀请落地页 /i/<code> —— 显码+复制+奖励说明+下载引导(CF Pages _redirects 重写) wangjia 2026-07-13 12:04:45 +08:00
  • 2c94b53a9e fix(server/reward): TG bot 回复区分已领取/未加入两态 + 按 Telegram language_code 中英双语 wangjia 2026-07-13 11:46:55 +08:00
  • 66422f92ce fix(client): created 单详情补「取消订单」按钮(原型 pending 双按钮早有规格,代码漏)+ 自动连接 toast 3s→1.5s wangjia 2026-07-13 11:43:48 +08:00
  • 1c2ec2844d feat(server/pay): 优惠套餐(Promo SKU)每账号限购一次——已付过再下单 409 PROMO_ALREADY_USED wangjia 2026-07-13 11:36:24 +08:00
  • 92943258ab fix(client/orders): 继续支付改为 retry 恢复原单会话(原误进购买页致重复下单);409 已付自纠刷新 wangjia 2026-07-13 11:29:25 +08:00
  • 07c339c18e feat(server/devices): users.max_devices_override 单用户设备上限覆盖(NULL走套餐默认)+ 迁移000025 wangjia 2026-07-13 10:15:07 +08:00
  • 3d24451835 fix(nodes): 桌面 Nodes 页统一 600 宽度(原型挂 view-body + Flutter PageBody)+ 双列网格改单列镜像原型 wangjia 2026-07-13 10:13:48 +08:00
  • a61641b53b refactor(client): SubScaffold 六合一(视觉零变化)+ tablet 注释订正 + 平板通知铃入口(#20) wangjia 2026-07-13 10:07:18 +08:00
  • 3a8ff64921 fix(client): 审计修复——device_limit 相对时间走 relativeTime 单源+裸 Icons 换 PangolinIcons+Payment onDone 三处接通+内联双语文案收进 AppText wangjia 2026-07-13 09:56:22 +08:00
  • e95995f20f fix(prototype): 桌面补 redeem 兑换视图 + accRedeemRow 接线改指 redeem(原为误指购买页) wangjia 2026-07-13 09:53:25 +08:00
  • fa9a5c2d5e design+client: 抽 .view-body/PageBody 统一桌面内容页宽度(600/wide 840)——stats·contact 补约束,settings·contact 560→600,九页收口 wangjia 2026-07-13 09:46:57 +08:00
  • b88921a030 fix(prototype): ui-desktop 补 [hidden] display:none 守卫——登录静态屏 signup 表单不再与 signin 并排溢出 wangjia 2026-07-13 09:29:39 +08:00
  • a48e38cac0 design(prototype): 回填邀请屏——战绩三格+TG任务卡两态+具体天数(镜像 invite_page.dart,补原型先行欠账) wangjia 2026-07-13 09:23:14 +08:00
  • 559fd38a52 docs(reward): 设计文档 webhook 路径 /tg/webhook→/v1/tg/webhook + app_text 首充注释 15→7 wangjia 2026-07-13 08:18:40 +08:00
  • 488688aeac fix(reward): TG webhook 空 secret fail-fast + 首充奖励文案六语 15→7(终审必修) wangjia 2026-07-13 08:17:11 +08:00
  • 98ba578169 docs: 邀请奖励实现计划 HTML 阅读版 + 索引登记 wangjia 2026-07-13 08:10:55 +08:00
  • d04183b066 merge(invite): 客户端邀请奖励 UI 轨(Task 11-13)并入 wangjia 2026-07-13 08:05:18 +08:00
  • c29aaf9a2a feat(server): 装配 reward 服务 — 注入 auth/webhook + 挂 /v1/invite、/tasks/telegram/start、/tg/webhook wangjia 2026-07-13 08:01:01 +08:00
  • 0b24e26fb6 feat(client/auth): 注册页加邀请码(选填)输入,提交时传 invite_code wangjia 2026-07-13 08:00:25 +08:00
  • e26284d072 feat(server/reward): TG getChatMember 真校验 + ClaimTelegram + POST /tg/webhook wangjia 2026-07-13 07:54:46 +08:00
  • e061237496 feat(client/invite): 邀请页真实化(邀请区+战绩+TG 任务卡)+ 六语 l10n wangjia 2026-07-13 07:51:19 +08:00
  • e23cd5e1bd feat(server/reward): TG 绑定 token 签发/消费 + GET /v1/tasks/telegram/start wangjia 2026-07-13 07:49:31 +08:00
  • d23f7bca8f feat(server/reward): GET /v1/invite — 邀请码/链接/战绩/TG 任务态 wangjia 2026-07-13 07:46:07 +08:00
  • de1117b0e6 feat(server/pay): 首充钩子 — settle 内接邀请首充段发奖(first_paid_at 幂等) wangjia 2026-07-13 07:41:15 +08:00
  • cdf67a200c feat(client): invite api + provider + auth_api.register 加 inviteCode wangjia 2026-07-13 07:39:01 +08:00
  • 54d106ca8b feat(server/auth): Register 加 inviteCode + ReferralHook(注册后 best-effort 归因) wangjia 2026-07-13 07:33:42 +08:00
  • 2fb7391a17 feat(server/reward): OnRegister 绑定 + 注册段双方发奖 + 自邀请/设备/月封顶防刷 wangjia 2026-07-13 07:27:10 +08:00
  • 2bd31bbd55 fix(server/reward): isDup 收窄到 unique/duplicate 防误判 FK/NOTNULL + 补 referrals 唯一路径测试 wangjia 2026-07-13 07:19:41 +08:00
  • 75636c8ea3 feat(server/reward): Store — referrals/reward_claims/invite_code 数据访问 + 唯一守卫 wangjia 2026-07-13 07:15:28 +08:00
  • 0695c7958b feat(server/codes): GrantRewardTx 复用 applySubscription 发奖励会员天数 wangjia 2026-07-13 07:11:17 +08:00
  • 52b5e90d92 fix(server/migrate): 000024 sqlite 重建 subscriptions 后补回 idx_subs_user_exp 索引 + 回归断言 wangjia 2026-07-13 07:08:26 +08:00
  • 9b858c5224 feat(server/migrate): 000024 邀请奖励表 + subscriptions.source 扩 invite/task wangjia 2026-07-13 06:59:52 +08:00
  • b70857cc0e docs(plan): 邀请奖励 + 奖励任务实现计划(14 任务 TDD) wangjia 2026-07-12 23:58:30 +08:00
  • b223cc5f81 docs: 邀请奖励 + 奖励任务(加入 TG 频道)设计文档(Spec ②) wangjia 2026-07-12 23:10:20 +08:00
  • 252779c607 fix(client/pay): CNY 渠道 method 对齐生产哪吒(nezha)+ 下单失败不再静默 wangjia 2026-07-12 22:09:31 +08:00
  • b702957788 feat(client/update): macOS 自更新改为自动装进 /Applications + 重启 wangjia 2026-07-12 21:55:58 +08:00
  • 71fc982bb2 chore: bump 1.0.72+73(优惠套餐 + 发版测自动更新) client-v1.0.72 wangjia 2026-07-12 20:01:13 +08:00
  • 17d99acf62 feat(client/purchase): 全员优惠月付特殊卡片(¥6/$1,随渠道显价) wangjia 2026-07-12 19:34:07 +08:00
  • 7ac9fa40f0 feat(server/pay): catalog 加全员优惠月付 pro_month_promo(¥6/$1)+ Promo 标记 wangjia 2026-07-12 19:27:34 +08:00
  • 2d599f836d chore(scripts): local_test.sh API_URL 支持 env 覆盖(发版烘生产域名) wangjia 2026-07-12 19:04:34 +08:00
  • e5f831796f chore: bump 1.0.71+72(PlansScreen删除 + Redeem 文案 + 过期单重新购买) wangjia 2026-07-12 18:58:09 +08:00
  • 41f42dc250 fix(client/orders): 过期单动作改「重新购买」(orderRebuy),不再用歧义的「继续支付」 wangjia 2026-07-12 18:56:01 +08:00
  • 04d5cbc11f feat(l10n): 账户入口 redeemEntry 改「Redeem」(去掉「& buy」,购买已独立成购买套餐行) wangjia 2026-07-12 18:54:58 +08:00
  • 2416c943cb refactor(client): 删除死代码 PlansScreen + NavView.plans + choosePlan l10n(Renew→Purchase 直达后无调用者) wangjia 2026-07-12 18:53:10 +08:00
  • a06a9d5c89 fix(client/macos): 重签 entitlements 的 App Group 修回 macOS 原生格式 worktree-fix-sysext-appgroup wangjia 2026-07-12 18:46:07 +08:00
  • d0bd24bc4b chore: bump 1.0.70+71(账户 IA 重构 + 订单过期态) wangjia 2026-07-12 18:44:02 +08:00
  • 8fba080d20 docs(pay-v2): IA 重构 + 订单过期态 落地验收记录(step5) wangjia 2026-07-12 18:32:24 +08:00
  • 0421c86099 test(golden): 重录 IA 漂移的 7 个 desktop golden(侧栏 Account + 账户页重排导致 shell 变化) wangjia 2026-07-12 18:31:56 +08:00
  • 73012ee03c feat(client/orders): 订单列表/详情显示 expired 过期态 wangjia 2026-07-12 18:28:28 +08:00
  • 5cf42a64c8 feat(settings): 删购买/订单卡 + 归连接/外观/关于三组 + Web 链接下沉底部 wangjia 2026-07-12 18:10:37 +08:00
  • 44f22dcf52 fix(client/notif): 通知占位示例文案改英文(默认语言一致,避免英文 app 显中文) wangjia 2026-07-12 18:05:24 +08:00
  • f5669c1a67 feat(notif): 通知占位屏 + 移动顶栏铃铛(Spec ③接口占位) wangjia 2026-07-12 18:01:07 +08:00
  • dd3323add9 chore: 取消跟踪 local-l13-start.sh(本地联调脚本,含 throwaway 值,不入 git)+ gitignore wangjia 2026-07-12 17:57:52 +08:00
  • 2d37ef1e7b fix(client): NotificationBell.onTap 恢复 required 非空(对齐规范) wangjia 2026-07-12 17:57:02 +08:00
  • df19629944 feat(shell): 桌面侧栏加 Account 一级项 + 顶栏通知铃铛 + invite/notifications 视图接线 wangjia 2026-07-12 17:51:48 +08:00
  • b839c77712 feat(account): IA 重排+邀请入口+删偏好卡+设置/联系 formFactor 门控 wangjia 2026-07-12 17:44:51 +08:00
  • c520449002 refactor(contact): 渠道抽单源常量 + RedeemScreen 删去哪买引流卡(仅留兑换码) wangjia 2026-07-12 17:30:25 +08:00
  • 3a270cbeb0 feat(l10n): 邀请/通知/设置分组文案 ×6 语言(Spec ②③占位) wangjia 2026-07-12 17:25:30 +08:00
  • c48ff034e2 feat(nav): NavView 加 invite/notifications + kAccountSubViews 收录 invite wangjia 2026-07-12 17:21:30 +08:00
  • b9e2f8c2da feat(server/pay): 订单展示层过期态(created 超 TTL 显 expired,零迁移) wangjia 2026-07-12 17:18:02 +08:00
  • a0367b37e5 docs(plan): IA 计划加 Task 0 订单过期态后端 + 前端 expired 处理 + 部署步骤 wangjia 2026-07-12 17:14:09 +08:00
  • 6f74c80025 docs(plan): 账户 IA 重构 Flutter 实现计划(8 任务,TDD,含 Spec ②③占位接口) wangjia 2026-07-12 17:07:08 +08:00
  • 040e715479 fix(prototype): 桌面内容视图宽度统一 600 居中(账户/设置/设备/订单/通知/邀请一致) wangjia 2026-07-12 17:07:08 +08:00
  • 576e9ee5a5 design(prototype): 设备⋮弹出菜单(重命名/强制退出/清除登录信息) + 设备管理页宽度收窄600居中 wangjia 2026-07-12 17:01:28 +08:00
  • 18858b33d4 design(prototype): 设备管理改下钻页 + 桌面登录页注册表单切换 wangjia 2026-07-12 16:47:10 +08:00
  • 53426bd4c1 fix(ds): .plan-banner 窄宽度按钮换行 + 名字保底宽度(修 Renew/Upgrade 覆盖用户名) wangjia 2026-07-12 16:44:52 +08:00
  • 7700c43216 design(prototype): 设备超限整合为全窗口挡板 overlay + 演示语言控件改 6 语言下拉 wangjia 2026-07-12 16:37:21 +08:00
  • 6ff048967e chore(prototype): 移除 setting-row 冗余 inline width(原子已带,防重复源) wangjia 2026-07-12 16:22:02 +08:00
  • 6f4be57ab8 fix(ds): .setting-row 加 box-sizing:border-box(width:100%+padding 出界修复) wangjia 2026-07-12 09:31:29 +08:00
  • 5002a4f35d fix(ds): .setting-row 原子按钮安全化(border/background/width/text-align 重置) wangjia 2026-07-12 09:27:21 +08:00
  • 6f5a805536 design(prototype): 渲染新 IA 视觉稿(桌面+移动)— 含 bell 图标单源 + 通知/邀请预留 wangjia 2026-07-12 09:08:25 +08:00