docs: pay v2 执行总览与评审页(单页汇总 P1状态/DAG/P2·P7计划/决策点)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -52,6 +52,11 @@
|
||||
</a>
|
||||
|
||||
<h2>📋 实现计划</h2>
|
||||
<a class="doc" href="./pay-v2-execution-overview.html">
|
||||
<div class="title">pay v2 · 执行总览与评审 ⭐</div>
|
||||
<div class="desc">一页看全:P1 已完成 + 依赖 DAG + P2/P7 待审计划(任务清单)+ 4 个待拍决策点(是否开跑/新仓/延后取舍/资金链路)+ 波次建议。评审入口。</div>
|
||||
<div class="meta">overview · 2026-07-10 · 评审入口</div>
|
||||
</a>
|
||||
<a class="doc" href="./pay-v2-p1-plan.html">
|
||||
<div class="title">pay v2 · P1 核心数据模型 + 配置账户注册表(阅读版)⭐</div>
|
||||
<div class="desc">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-10-pay-v2-p1-core-model.md</code>(含 checkbox)。<a href="./pay-v2-unified-gateway-design.html">pay v2 设计</a>的首个落地阶段(8 阶段之 P1)。4 个 TDD 任务:money 包(int64 最小单位+币种)→ Order/Attempt/Account/Refund 模型+状态机+<code>:memory:</code> 测试约定 → OrderStore(幂等标付/取消/列表,条件UPDATE+RowsAffected)→ 账户配置注册表(凭证走 env)。沿用 GORM AutoMigrate/glebarez sqlite 惯例;金额从 string 元改 int64。P2-P8(Provider/收款管线/渠道 adapter/退款/路由/对账/codes 库/订阅)各自成计划、落地前细化。</div>
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>pay v2 · 执行总览与评审</title>
|
||||
<style>
|
||||
:root{--bg:#0d1117;--card:#161b22;--card-2:#1c2330;--border:#283041;--fg:#e6edf3;--fg-soft:#aeb9c7;--muted:#7d8896;--accent:#58a6ff;--ok:#3fb950;--warn:#d29922;--bad:#f85149;--radius:14px;--mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace}
|
||||
*{box-sizing:border-box}
|
||||
body{margin:0;background:radial-gradient(1200px 600px at 80% -10%,rgba(88,166,255,.08),transparent 60%),var(--bg);color:var(--fg);font:15px/1.7 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}
|
||||
.wrap{max-width:1000px;margin:0 auto;padding:44px 24px 96px}
|
||||
.eyebrow{color:var(--accent);font-weight:600;letter-spacing:.12em;font-size:12px;text-transform:uppercase}
|
||||
h1{font-size:28px;margin:8px 0 8px}
|
||||
.lead{color:var(--fg-soft);margin:0 0 20px}
|
||||
h2{font-size:19px;margin:38px 0 12px;color:var(--accent);border-bottom:1px solid var(--border);padding-bottom:8px}
|
||||
h3{font-size:15px;margin:20px 0 8px;color:var(--fg)}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
code{font-family:var(--mono);font-size:.85em;background:var(--card-2);padding:1px 6px;border-radius:5px;color:#cdd9e5}
|
||||
b{color:#fff}
|
||||
table{width:100%;border-collapse:collapse;margin:12px 0;font-size:13.5px}
|
||||
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:top}
|
||||
th{color:var(--fg-soft);font-weight:600;font-size:13px}
|
||||
table.fields td:first-child{font-family:var(--mono);font-size:12px;color:#cdd9e5;white-space:nowrap;width:1%}
|
||||
.lead-box{background:linear-gradient(180deg,rgba(88,166,255,.10),transparent);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;margin:0 0 8px}
|
||||
.tag{display:inline-block;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:999px}
|
||||
.tag.ok{background:rgba(63,185,80,.16);color:var(--ok)}
|
||||
.tag.par{background:rgba(210,153,34,.16);color:var(--warn)}
|
||||
.tag.info{background:rgba(88,166,255,.16);color:var(--accent)}
|
||||
.svgwrap{overflow-x:auto;background:#0a0e14;border:1px solid var(--border);border-radius:12px;padding:10px 6px;margin:14px 0}
|
||||
.decision{background:var(--card);border:1px solid var(--border);border-left:3px solid var(--warn);border-radius:10px;padding:12px 16px;margin:10px 0}
|
||||
.decision b{color:#fff}
|
||||
.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
|
||||
@media(max-width:760px){.grid{grid-template-columns:1fr}}
|
||||
.col{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px}
|
||||
.col h3{margin-top:0;color:var(--accent)}
|
||||
ol{padding-left:20px;margin:6px 0}
|
||||
ol li{margin:3px 0;font-size:13.5px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<div class="eyebrow">pay v2 · Execution</div>
|
||||
<h1>pay v2 · 执行总览与评审</h1>
|
||||
<p class="lead">2026-07-10 · 一页看全:当前进度 + 依赖 DAG + P2/P7 待审计划 + 你要拍的决策点。详见 <a href="pay-v2-unified-gateway-design.html">设计</a> · <a href="pay-v2-p1-plan.html">P1</a> · <a href="pay-v2-p2-plan.html">P2</a> · <a href="pay-v2-p7-codes-lib.html">P7</a> · <a href="pay-v2-roadmap-dag.html">DAG</a>。</p>
|
||||
|
||||
<div class="lead-box">
|
||||
<b>现状</b>:<span class="tag ok">P1 已完成</span>(核心数据模型,6 提交全绿,SDD 逐任务复审 + opus 整支复审通过)。<b>P2(收款管线)与 P7(codes 库)计划已并行起草,待你评审后执行。</b>
|
||||
</div>
|
||||
|
||||
<h2>1. 8 阶段进度</h2>
|
||||
<table class="fields">
|
||||
<thead><tr><th>阶段</th><th>内容</th><th>状态</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>P1</td><td>核心数据模型(Order/Attempt/Account/Refund)+ money + 账户注册表</td><td><span class="tag ok">✅ 完成</span></td></tr>
|
||||
<tr><td>P2</td><td>Provider 抽象 + 一次性收款管线 + 统一入账 + webhook v2</td><td><span class="tag info">计划待审</span></td></tr>
|
||||
<tr><td>P3</td><td>首批渠道 adapter:crypto 自托管 / 支付宝 / Stripe</td><td>路线图</td></tr>
|
||||
<tr><td>P4</td><td>退款 POST /refunds + 三向</td><td>路线图</td></tr>
|
||||
<tr><td>P5</td><td>多账户路由策略</td><td>路线图</td></tr>
|
||||
<tr><td>P6</td><td>对账 job</td><td>路线图</td></tr>
|
||||
<tr><td>P7</td><td>codes 共享库(独立仓,A 嵌入各产品)</td><td><span class="tag info">计划待审</span></td></tr>
|
||||
<tr><td>P8</td><td>订阅/recurring + 拒付(later)</td><td>路线图</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>2. 依赖 DAG 与波次</h2>
|
||||
<div class="svgwrap">
|
||||
<svg viewBox="0 0 940 400" style="width:100%;min-width:820px;height:auto;display:block" font-family="'SF Mono',ui-monospace,'PingFang SC',sans-serif" role="img" aria-label="P2-P8 依赖 DAG">
|
||||
<defs><marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 Z" fill="#58a6ff"/></marker></defs>
|
||||
<style>
|
||||
.n{fill:#161b22;stroke:#283041;stroke-width:1.2}.nd{fill:#12251a;stroke:#2ea043;stroke-width:1.4}.npar{fill:#231d10;stroke:#9e7016;stroke-width:1.4}
|
||||
.t{fill:#e6edf3;font-size:12.5px;font-weight:600}.ts{fill:#8aa0b8;font-size:10px}.e{stroke:#3d5578;stroke-width:1.6;fill:none}
|
||||
</style>
|
||||
<line class="e" x1="150" y1="60" x2="248" y2="90" marker-end="url(#a)"/>
|
||||
<line class="e" x1="378" y1="88" x2="470" y2="66" marker-end="url(#a)"/>
|
||||
<line class="e" x1="378" y1="104" x2="470" y2="196" marker-end="url(#a)"/>
|
||||
<line class="e" x1="600" y1="52" x2="690" y2="40" marker-end="url(#a)"/>
|
||||
<line class="e" x1="600" y1="66" x2="690" y2="128" marker-end="url(#a)"/>
|
||||
<line class="e" x1="600" y1="78" x2="690" y2="214" marker-end="url(#a)"/>
|
||||
<rect class="nd" x="24" y="34" width="126" height="52" rx="9"/><text class="t" x="38" y="56">P1 数据模型</text><text class="ts" x="38" y="72">✅ 已完成</text>
|
||||
<rect class="n" x="250" y="66" width="130" height="56" rx="9"/><text class="t" x="264" y="88">P2 Provider 抽象</text><text class="ts" x="264" y="104">收款管线+webhook</text><text class="ts" x="264" y="116">关键路径起点</text>
|
||||
<rect class="n" x="472" y="30" width="130" height="52" rx="9"/><text class="t" x="486" y="52">P3 渠道 adapter</text><text class="ts" x="486" y="68">crypto/支付宝/Stripe</text>
|
||||
<rect class="n" x="472" y="176" width="130" height="52" rx="9"/><text class="t" x="486" y="198">P5 多账户路由</text><text class="ts" x="486" y="214">∥ P3</text>
|
||||
<rect class="n" x="692" y="16" width="128" height="48" rx="9"/><text class="t" x="706" y="37">P4 退款</text><text class="ts" x="706" y="53">三向</text>
|
||||
<rect class="n" x="692" y="104" width="128" height="48" rx="9"/><text class="t" x="706" y="125">P6 对账 job</text><text class="ts" x="706" y="141">query 兜底</text>
|
||||
<rect class="n" x="692" y="192" width="128" height="48" rx="9"/><text class="t" x="706" y="213">P8 订阅/拒付</text><text class="ts" x="706" y="229">later</text>
|
||||
<rect class="npar" x="24" y="300" width="300" height="64" rx="9"/><text class="t" x="40" y="324">P7 codes 共享库(独立仓)</text><text class="ts" x="40" y="342">零依赖 pay · 全程可并行(worktree)</text><text class="ts" x="40" y="356">▶ Wave0 与 P2 同步起跑</text>
|
||||
</svg>
|
||||
</div>
|
||||
<p><b>关键路径</b> P2→P3→P4/P6(硬串行);<b>波次</b>:Wave0 P7 ∥ Wave1 P2 → Wave2 P3∥P5 → Wave3 P4∥P6 → Wave4 P8。</p>
|
||||
|
||||
<h2>3. 待审计划</h2>
|
||||
<div class="grid">
|
||||
<div class="col">
|
||||
<h3>P2 收款管线(pay 仓,7 任务)</h3>
|
||||
<ol>
|
||||
<li>Provider 接口 + 6 render_type + PaidEvent + 注册表</li>
|
||||
<li>fake provider(测试用)</li>
|
||||
<li>OrderStore 扩展(GetOrder/AttemptByProviderRef…)</li>
|
||||
<li>一次性收款管线 gateway(建单/查单/重试/取消)</li>
|
||||
<li>统一入账/开通 settle(复用 P1 幂等标付)</li>
|
||||
<li>webhook v2 outbox + Notifier(event_type + HMAC)</li>
|
||||
<li>HTTP /v1 接线</li>
|
||||
</ol>
|
||||
<p style="font-size:12.5px;color:var(--muted)">→ <a href="pay-v2-p2-plan.html">P2 详细阅读版</a></p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3>P7 codes 共享库(新仓 ~/code/codes,8 任务)</h3>
|
||||
<ol>
|
||||
<li>模块脚手架 + 通用权益描述符 Entitlement + 状态机</li>
|
||||
<li>Crockford Base32 生成器(移植 pangolin)</li>
|
||||
<li>Dialect + 内嵌迁移 + Store CRUD</li>
|
||||
<li>Mint(批次生成,明文只现一次)</li>
|
||||
<li><b>Redeem[T] 兑换事务骨架</b>(宿主本地事务 + grant 回调)</li>
|
||||
<li>RateLimiter/NonceChecker 接口 + GuardedRedeem</li>
|
||||
<li>redisx 可选子包(唯一 import Redis 处)</li>
|
||||
<li>webhook 灌码(pay-contract 式 HMAC)</li>
|
||||
</ol>
|
||||
<p style="font-size:12.5px;color:var(--muted)">→ <a href="pay-v2-p7-codes-lib.html">P7 详细阅读版</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>4. 你要拍的决策点</h2>
|
||||
<div class="decision"><b>D1 · 是否开跑大执行波</b> —— P2(7)+P7(8)≈15 任务、~40 次 SDD agent 调用,多小时工程;P7 要<b>新建仓 <code>~/code/codes</code></b>。开跑 / 先只跑 P7 / 暂缓?</div>
|
||||
<div class="decision"><b>D2 · P7 独立新仓</b> —— codes 做成 <code>github.com/wangjia/codes</code> 独立仓(不放 pay 内、不留 pangolin),核心零第三方依赖。认可?</div>
|
||||
<div class="decision"><b>D3 · P2 延后取舍</b> —— webhook 暂无 biz_code(用 biz_ref)、路由取"首个 enabled 账户"(策略延 P5)、币种走部署默认(多币种延 P3+)、/v1 与 /api/v1 并存。都认可?</div>
|
||||
<div class="decision"><b>D4 · settle 资金链路 & Provider 接口</b> —— 入账归一/幂等/金额核对(P2 Task5)与 Provider 抽象(P2 Task1)是资金命脉与扩展地基,是否需要我讲深或调整?</div>
|
||||
|
||||
<h2>5. 建议下一步</h2>
|
||||
<p>我建议:<b>D2/D3 认可后开跑</b> —— P7 在新仓/worktree 与 P2 关键路径并行,按 DAG 波次推进,每波边界向你汇报。若想稳,先只跑 P7(独立、低风险、不动 pay 主线)试水。你定。</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user