Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9aafb63461 |
+164
-39
@@ -327,12 +327,12 @@ header .header-meta{color:var(--fg-soft)}
|
||||
<header>
|
||||
<div class="wrap">
|
||||
<h1>feature+windows — 项目 TODO</h1>
|
||||
<div class="header-meta">生成于 2026-07-23 · 真相源 todo/todo.json</div>
|
||||
<div class="header-meta">生成于 2026-08-01 · 真相源 todo/todo.json</div>
|
||||
<div class="stats">
|
||||
<div class="stat-pill"><strong>22</strong>全部</div>
|
||||
<div class="stat-pill"><strong>9</strong>待开始</div>
|
||||
<div class="stat-pill"><strong>1</strong>开发中</div>
|
||||
<div class="stat-pill"><strong>4</strong>待验收</div>
|
||||
<div class="stat-pill"><strong>26</strong>全部</div>
|
||||
<div class="stat-pill"><strong>13</strong>待开始</div>
|
||||
<div class="stat-pill"><strong>0</strong>开发中</div>
|
||||
<div class="stat-pill"><strong>5</strong>待验收</div>
|
||||
<div class="stat-pill"><strong>8</strong>已验收</div>
|
||||
|
||||
</div>
|
||||
@@ -376,7 +376,7 @@ header .header-meta{color:var(--fg-soft)}
|
||||
|
||||
<div class="section-block" id="section-open">
|
||||
<div class="section-title st-open" data-toggle="open">
|
||||
📋 待开始 <span class="s-count">9</span>
|
||||
📋 待开始 <span class="s-count">13</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-open">
|
||||
@@ -630,6 +630,130 @@ header .header-meta{color:var(--fg-soft)}
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="24"
|
||||
data-level="mid"
|
||||
data-status="open"
|
||||
data-tier=""
|
||||
data-tags="">
|
||||
<div class="card-header">
|
||||
<span class="item-id">#24</span>
|
||||
<span class="item-title">客户端长时间运行后重开显示未连接(Offline)但隧道实际仍在连——UI连接态与真实VPN态脱钩。iOS实测:系统VPN设置里『已连接』(Pangolin加速/穿山甲激活),但app连接页显示Offline/Tap to connect。排查方向:app冷启/回前台时未从NETunnelProviderManager/系统VPN真实态同步隧道状态,statusStream初始态错判为off。四端可能共性(Dart侧状态流)。</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-open">待开始</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"></div>
|
||||
<div class="item-meta">
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-07-26</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="25"
|
||||
data-level="mid"
|
||||
data-status="open"
|
||||
data-tier=""
|
||||
data-tags="">
|
||||
<div class="card-header">
|
||||
<span class="item-id">#25</span>
|
||||
<span class="item-title">私有服务在家直连(不绕 Ali frps):nas/git/win/brain.51yanmei.com。方案=局域网分离解析 DNS(dnsmasq 或 AdGuard Home 挂 NAS,per-host 覆盖到 192.168.3.x + DHCP option6 下发)解决 VPN 关闭情形;VPN 开启情形走 B2 两旋钮(保留极小 dns-system 服务端清单,路由决策下沉用户规则)。需在家局域网环境操作。前置修复 reverse_mapping 已完成(commit e157b16)</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-open">待开始</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"></div>
|
||||
<div class="item-meta">
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-07-31</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="26"
|
||||
data-level="mid"
|
||||
data-status="open"
|
||||
data-tier=""
|
||||
data-tags="">
|
||||
<div class="card-header">
|
||||
<span class="item-id">#26</span>
|
||||
<span class="item-title">切 MySQL 前必补 Promo 限购并发防线:pay/webhook.go settle 对 pro_month_promo 靠应用层 HasPaidPurchaseExcludingTx 复查,MySQL READ COMMITTED 下并发两笔独立订单会双发一个月 Pro。当前 SQLite _txlock 串行化 + 部分唯一索引 ux_pay_promo_paid 双兜底,不触发;切 MySQL 需改 SELECT..FOR UPDATE 锁 user 维度或全表唯一索引</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-open">待开始</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"></div>
|
||||
<div class="item-meta">
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-08-01</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="27"
|
||||
data-level="mid"
|
||||
data-status="open"
|
||||
data-tier=""
|
||||
data-tags="">
|
||||
<div class="card-header">
|
||||
<span class="item-id">#27</span>
|
||||
<span class="item-title">分支审核 Minor 硬化(routing/pay):①TG webhook secret 改 subtle.ConstantTimeCompare(reward/handler.go:113 现用 !=);②routing 保存成功后回填服务端 Normalize 结果(现保留本地乐观值,重复/带空格规则短暂 UI 漂移);③nodes.go splitCN 冗余赋值清理</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-open">待开始</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"></div>
|
||||
<div class="item-meta">
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-08-01</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="3"
|
||||
data-level="low"
|
||||
@@ -665,48 +789,18 @@ header .header-meta{color:var(--fg-soft)}
|
||||
</div>
|
||||
<div class="section-block" id="section-doing">
|
||||
<div class="section-title st-doing" data-toggle="doing">
|
||||
🔨 开发中 <span class="s-count">1</span>
|
||||
🔨 开发中 <span class="s-count">0</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-doing">
|
||||
<ul class="todo-list" id="list-doing">
|
||||
|
||||
<li class="todo-card s-doing"
|
||||
data-id="23"
|
||||
data-level="mid"
|
||||
data-status="doing"
|
||||
data-tier=""
|
||||
data-tags="">
|
||||
<div class="card-header">
|
||||
<span class="item-id">#23</span>
|
||||
<span class="item-title">私有目的地 ACL(节点侧):只有白名单 dp_uuid 能经 pangolin 出口访问 brain/nas/git/win.51yanmei.com。节点本地 acl.json + agent 渲染放行/拒绝规则对,fail-closed,SIGHUP 热生效。设计 docs/private-dest-acl-design.html,计划 docs/superpowers/plans/2026-07-23-private-dest-acl.md</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-doing">开发中</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"></div>
|
||||
<div class="item-meta">
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-07-23</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<p class="empty-tip">暂无条目</p>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-block" id="section-done">
|
||||
<div class="section-title st-done" data-toggle="done">
|
||||
🔍 待验收 <span class="s-count">4</span>
|
||||
🔍 待验收 <span class="s-count">5</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-done">
|
||||
@@ -837,6 +931,37 @@ header .header-meta{color:var(--fg-soft)}
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-07-16</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-done"
|
||||
data-id="23"
|
||||
data-level="mid"
|
||||
data-status="done"
|
||||
data-tier=""
|
||||
data-tags="">
|
||||
<div class="card-header">
|
||||
<span class="item-id">#23</span>
|
||||
<span class="item-title">私有目的地 ACL(节点侧):只有白名单 dp_uuid 能经 pangolin 出口访问 brain/nas/git/win.51yanmei.com。节点本地 acl.json + agent 渲染放行/拒绝规则对,fail-closed,SIGHUP 热生效。设计 docs/private-dest-acl-design.html,计划 docs/superpowers/plans/2026-07-23-private-dest-acl.md</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-done">待验收</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
|
||||
<button class="reject-btn" data-id="23" data-title="私有目的地 ACL(节点侧):只有白名单 dp_uuid 能经 pangolin 出口访问 brain/nas/git/win.51yanmei.com。节点本地 acl.json + agent 渲染放行/拒绝规则对,fail-closed,SIGHUP 热生效。设计 docs/private-dest-acl-design.html,计划 docs/superpowers/plans/2026-07-23-private-dest-acl.md">拒绝验收</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"></div>
|
||||
<div class="item-meta">
|
||||
<span class="tag owner-agent">🤖 agent</span>
|
||||
<span class="meta-date">🕐 2026-07-23</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
+59
-3
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "feature+windows — 项目 TODO",
|
||||
"updated_at": "2026-07-22T16:59:57.735Z"
|
||||
"updated_at": "2026-07-31T16:34:06.427Z"
|
||||
},
|
||||
"seq": 23,
|
||||
"seq": 27,
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
@@ -368,11 +368,67 @@
|
||||
"tier": null,
|
||||
"tags": [],
|
||||
"owner": "agent",
|
||||
"status": "doing",
|
||||
"status": "done",
|
||||
"created_at": "2026-07-22T16:59:41.945Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"title": "客户端长时间运行后重开显示未连接(Offline)但隧道实际仍在连——UI连接态与真实VPN态脱钩。iOS实测:系统VPN设置里『已连接』(Pangolin加速/穿山甲激活),但app连接页显示Offline/Tap to connect。排查方向:app冷启/回前台时未从NETunnelProviderManager/系统VPN真实态同步隧道状态,statusStream初始态错判为off。四端可能共性(Dart侧状态流)。",
|
||||
"desc": null,
|
||||
"level": "mid",
|
||||
"tier": null,
|
||||
"tags": [],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-07-26T07:33:36.766Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"title": "私有服务在家直连(不绕 Ali frps):nas/git/win/brain.51yanmei.com。方案=局域网分离解析 DNS(dnsmasq 或 AdGuard Home 挂 NAS,per-host 覆盖到 192.168.3.x + DHCP option6 下发)解决 VPN 关闭情形;VPN 开启情形走 B2 两旋钮(保留极小 dns-system 服务端清单,路由决策下沉用户规则)。需在家局域网环境操作。前置修复 reverse_mapping 已完成(commit e157b16)",
|
||||
"desc": null,
|
||||
"level": "mid",
|
||||
"tier": null,
|
||||
"tags": [],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-07-31T02:10:58.408Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"title": "切 MySQL 前必补 Promo 限购并发防线:pay/webhook.go settle 对 pro_month_promo 靠应用层 HasPaidPurchaseExcludingTx 复查,MySQL READ COMMITTED 下并发两笔独立订单会双发一个月 Pro。当前 SQLite _txlock 串行化 + 部分唯一索引 ux_pay_promo_paid 双兜底,不触发;切 MySQL 需改 SELECT..FOR UPDATE 锁 user 维度或全表唯一索引",
|
||||
"desc": null,
|
||||
"level": "mid",
|
||||
"tier": null,
|
||||
"tags": [],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-07-31T16:34:06.353Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"title": "分支审核 Minor 硬化(routing/pay):①TG webhook secret 改 subtle.ConstantTimeCompare(reward/handler.go:113 现用 !=);②routing 保存成功后回填服务端 Normalize 结果(现保留本地乐观值,重复/带空格规则短暂 UI 漂移);③nodes.go splitCN 冗余赋值清理",
|
||||
"desc": null,
|
||||
"level": "mid",
|
||||
"tier": null,
|
||||
"tags": [],
|
||||
"owner": "agent",
|
||||
"status": "open",
|
||||
"created_at": "2026-07-31T16:34:06.426Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user