Files
pangolin/docs/index.html
wangjia cc47f16190 docs(pay): P1 实现计划(数据层+开通重构)+ 哪吒密钥入库标记已定
P1 计划(4 TDD 任务:迁移 000022 双引擎 / subscription.Grant 抽取 / codes 委托 /
payorders 数据访问)+ HTML 阅读版 + 登记 index。设计文档哪吒行更新为已定
(Bitwarden nzzf)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 23:17:47 +08:00

262 lines
25 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pangolin 文档索引</title>
<style>
:root{
--bg:#0f1117; --panel:#171a22; --panel2:#1d2129; --fg:#e6e8ee; --fg2:#a8afbd;
--accent:#e0884f; --accent2:#5fb0c9; --ok:#5ec27a; --bad:#e06a6a; --warn:#e0b84f;
--border:#272c36; --mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
--sans:-apple-system,"PingFang SC","Helvetica Neue",Arial,sans-serif;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--sans);line-height:1.7;font-size:15px}
.wrap{max-width:920px;margin:0 auto;padding:48px 24px 96px}
h1{font-size:30px;line-height:1.3;margin:0 0 8px;letter-spacing:-.01em}
.sub{color:var(--fg2);font-size:15px;margin:0 0 32px}
h2{font-size:21px;margin:40px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--border)}
p{margin:10px 0}
code{font-family:var(--mono);font-size:.88em;background:var(--panel2);padding:1px 6px;border-radius:5px;color:#f0d9c4}
a{color:var(--accent2);text-decoration:none}
a:hover{text-decoration:underline}
.lead{background:linear-gradient(180deg,rgba(224,136,79,.10),transparent);border:1px solid var(--border);border-radius:12px;padding:18px 20px;margin:0 0 8px}
.small{color:var(--fg2);font-size:13px}
.tag{display:inline-block;font-size:11px;font-weight:700;padding:1px 8px;border-radius:999px;vertical-align:middle;margin-left:6px}
.tag.html{background:rgba(94,194,122,.16);color:var(--ok)}
.tag.md{background:rgba(168,175,189,.16);color:var(--fg2)}
.doc{display:block;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin:10px 0;transition:border-color .15s}
.doc:hover{border-color:var(--accent2);text-decoration:none}
.doc .t{font-size:16px;font-weight:600;color:var(--fg)}
.doc .d{color:var(--fg2);font-size:13px;margin-top:3px}
.doc .path{font-family:var(--mono);font-size:11px;color:#6b7385;margin-top:4px}
</style>
</head>
<body>
<div class="wrap">
<h1>Pangolin 文档索引</h1>
<p class="sub">全部设计 / 调研 / 排障文档汇总 · 单一入口</p>
<div class="lead">
<strong>约定:</strong>新的<b>设计文档 / 调研文档</b>统一以 <b>HTML</b> 形式输出(深色家族风格,可直接 <code>file://</code> 打开),并登记到本索引。历史 <code>.md</code> 文档保留原状、逐步迁移。
</div>
<h2>设计方案 / Specs</h2>
<a class="doc" href="pay-orchestration-design.html">
<div class="t">统一支付编排层 · provider 无关架构(加渠道不改客户端)<span class="tag html">HTML</span></div>
<div class="d">控制面新增支付编排层:<b>Order 业务订单 + PaymentAttempt 支付尝试 + Provider 适配器(Create/HandleCallback/Query</b>,客户端只认服务端下发的少数 <b>render_type</b>redirect/display_details/…)联合体,不认具体平台 → 同形态新网关零改客户端。首批接 crypto(USDT-TRC20,包裹已部署 pangolin-paydisplay_details) + 哪吒聚合支付(支付宝跳转,redirect,RSA 签/GET 回调,<b>灰产四方·可随时换持牌</b>)。统一开通管线(验签→定位→幂等→金额核对→复用 codes 开通,source=pay+ Query 轮询兜底。四端 Flutter 统一支付页。含 SKU 目录/双币定价/两表 schema/边界与合规。</div>
<div class="path">docs/pay-orchestration-design.html</div>
</a>
<a class="doc" href="payment-reseller-fulfillment-design.html">
<div class="t">支付落地方案 · 发卡/Reseller 收款 + 激活码自动发货 <span class="tag html">HTML</span></div>
<div class="d">把「收钱」与品牌 VPN 主体解耦:收款外包给发卡平台/Reseller(他们承担支付宝/微信跑分、冻卡、跑路风险),你只交付「激活码」;客户端/用户中心只认码,codes 模块核销即生效。含完整流程图(钱流/码流/结算)、两种对接模型(A 预充卡密库存 / B API 实时签发 POST /v1/codes/issue)、三阶段落地节奏、对账与风险边界(主体永不碰跑分/中国支付)。灰产“付完秒发货”体验的合规化替身。</div>
<div class="path">docs/payment-reseller-fulfillment-design.html</div>
</a>
<a class="doc" href="cicd-design.html">
<div class="t">CI/CD 全流程(tag 触发编译/发版/部署)<span class="tag html">HTML</span></div>
<div class="d">#30。参考 jiu 的 scripts/ci + .gitea/workflowstag 触发(site-v*/server-v*/client-v*)→ 编译 → 测试 → Gitea release → 部署。runner 混合(nas=官网+服务端容器化 / mac=Android+macOS / windows=Windows)。服务端部署固化 F3/F4「备份→migrate→换二进制→重启→健康检查+回滚」;官网部署 pangolin.yanmeiai.com;客户端 apk/dmg/exe 挂 release 喂官网下载链接。密钥作用域:Apple/token 账户级、部署 key/Android keystore 仓库级。范围 A~F(排除 iOS/#26/#25)。</div>
<div class="path">docs/cicd-design.html · 真相源 docs/superpowers/specs/2026-07-05-cicd-design.md</div>
</a>
<a class="doc" href="contact-telegram-channels-design.html">
<div class="t">联系我们 · 渠道二级页(Telegram 频道/群组,DB 配置)<span class="tag html">HTML</span></div>
<div class="d">点 Telegram 进二级页,按 kind 分组(频道/群组/Bot)列多条链接,含 @handle/说明/认证/「打开·加入」动作,全渠道(含邮箱/发卡)统一一张 contact_link 表(靠 url 协议区分 mailto/https/tg)。独立 GET /v1/contact。规则:平台 >1 条链接才进二级,否则点击直达。LINE 同构但先灰置「即将开放」(registry comingSoon 开关,配好即去灰)。不展示成员数、群组=加入。含可点原型。</div>
<div class="path">docs/contact-telegram-channels-design.html</div>
</a>
<a class="doc" href="free-quota-ad.html">
<div class="t">免费版 10 分钟卡控 + 累加式看广告加时 <span class="tag html">HTML</span></div>
<div class="d">免费版真卡控(账户级/全设备共享):连接期倒计时 + 到点自动切断 + 耗尽按钮灰化 + 点击弹广告看完 +10 分钟(累加,每日封顶 120)。桌面硬 10 分钟不可延。服务端 ad_bonus_minutes 累加模型 + ConnectNode 按 remaining 卡控 + TTL 硬切断;占位 DevVerifier。#21。</div>
<div class="path">docs/free-quota-ad.html</div>
</a>
<a class="doc" href="device-limit-design.html">
<div class="t">设备数量限制 + 超限 UX <span class="tag html">HTML</span></div>
<div class="d">真正启用套餐设备上限(free 1 / pro 3 / team 10):卡在登录(非硬拒登,返回 device_limit 信号)+ 选择移除/一键踢最旧 + 服务端按 last_seen 自动清理久不活跃。复用现成 DeleteDevice/ResolvePlan。无 DB schema 变更。#16。</div>
<div class="path">docs/device-limit-design.html</div>
</a>
<a class="doc" href="device-session-management-design.html">
<div class="t">设备 &amp; 会话管理 + 每设备流量归因 <span class="tag html">HTML</span></div>
<div class="d">「我的设备」管理(名称/平台/客户端版本/在线/最后登录 + 强制退出/清除登录信息)+ 控制面 sessions 表绑设备 + 数据面每设备 dp_uuid 记账。核心洞察:后端大半已建但 RegisterIfAbsent 未接线致 devices 表空。P1P5 路线。</div>
<div class="path">docs/device-session-management-design.html</div>
</a>
<a class="doc" href="android-client-design.html">
<div class="t">Pangolin Android 客户端设计方案 <span class="tag html">HTML</span></div>
<div class="d">把 M2 纸面 PoC 推到真机端到端连通 + 切节点 + KillSwitch(清 TODO 11G)。里程碑 A–F、三处定调。</div>
<div class="path">docs/android-client-design.html</div>
</a>
<a class="doc" href="ios-ipad-support-design.html">
<div class="t">iOS + iPad 支持设计方案 <span class="tag html">HTML</span></div>
<div class="d">iOS 隧道从 PoC 桩推到真机连通 + TestFlight;五条工作线 + NE 50MB 内存闸门;iPad 横屏侧栏布局适配。</div>
<div class="path">docs/ios-ipad-support-design.html</div>
</a>
<a class="doc" href="superpowers/specs/2026-06-21-windows-client-design.md">
<div class="t">Windows 客户端设计 <span class="tag md">MD</span></div>
<div class="d">Windows 端 sing-box 子进程 + wintun 隧道客户端设计。</div>
<div class="path">docs/superpowers/specs/2026-06-21-windows-client-design.md</div>
</a>
<h2>实现计划 / Plans</h2>
<a class="doc" href="pay-orchestration-p1-plan.html">
<div class="t">统一支付编排层 · P1 数据层 + 开通重构(阅读版)<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-09-pay-orchestration-p1-schema-grant.md</code>(含 checkbox)。<a href="pay-orchestration-design.html">编排层设计</a>的首个落地阶段(7 阶段之 P1)。建 <b>pay_orders</b>(业务订单/购买账本,order_no 幂等)+ <b>pay_attempts</b>(支付尝试/收款账本,UNIQUE(provider,provider_ref) 幂等)两表;把「开通订阅」从 codes 抽成可传 <code>source</code><code>subscription.Grant</code> 包,<code>subscriptions.source</code> 枚举加 <code>'pay'</code><code>payorders</code> 数据访问含幂等 MarkOrderPaid。4 任务 TDD。P2-P7Provider 抽象/crypto·哪吒 adapter/Flutter 支付页/订单页/端到端)各自成计划、落地前细化。</div>
<div class="path">docs/pay-orchestration-p1-plan.html · 真相源 docs/superpowers/plans/2026-07-09-pay-orchestration-p1-schema-grant.md</div>
</a>
<a class="doc" href="pay-single-address-plan.html">
<div class="t">pangolin-pay 单地址 + 唯一金额收款模型(定稿,#34/34A)<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-09-pay-single-address.md</code>(含 checkbox)。<b>定稿:单个固定收款地址 + 每单唯一金额</b>(取代每单唯一 HD 地址/地址池)。归集=1 地址(激活一次、扫一笔)最省;订单靠金额区分。唯一金额=base+微尾数(≤0.01 USDT);精确 == 匹配 + 时间戳(晚于建单)防迟到误配;付错→孤儿人工对账。前端契约不变(POST /order 返回 address+expect_amount)→ 以后升多地址/GasFree 纯后端切、前端零改。5 Phase:数据模型→建单→watcher 匹配/超时/孤儿→归集(能量租赁)→并发/付错真链验证。</div>
<div class="path">docs/pay-single-address-plan.html · 真相源 docs/superpowers/plans/2026-07-09-pay-single-address.md</div>
</a>
<a class="doc" href="crypto-tx-engine-plan.html">
<div class="t">pangolin-pay 加密货币交易引擎(#34 第一块,可独立验证)<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-09-crypto-tx-engine.md</code>(含 checkbox)。#34 里"加密货币交易"核心的独立可执行件:钱包(两套助记词 A 运营/B 金库,离线生成、热服务只持 xpub)→ Go 服务 pangolin-pay HD 派生收款地址(对齐 Ian Coleman)→ TronGrid watcher 侦测 TRC20 到账(每单唯一地址+金额、确认、幂等)→ 归集 sweep(离线签名、TRON gas 两步/能量租赁)→ 真实 1 USDT 端到端验证。不含独角数卡/发码,跑通后再接门面。</div>
<div class="path">docs/crypto-tx-engine-plan.html · 真相源 docs/superpowers/plans/2026-07-09-crypto-tx-engine.md</div>
</a>
<a class="doc" href="payment-clean-usdt-plan.html">
<div class="t">收款闭环 · 独角数卡 + 自托管 USDT(TRC20) + webhook JIT#34<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-09-payment-clean-usdt-loop.md</code>(含 checkbox)。最干净长期方案:门面独角数卡(独立海外 VPS)+ 自托管 TRC20 HD 钱包(热服务只持 xpub、watch-only,绝不持私钥)+ 自建 TronGrid watcher(每单唯一地址侦测到账)+ webhook JIT 发码(新增控制面 <code>POST /internal/codes/mint</code>,HMAC,售出才产合法码)。复用已就绪 codesredeem/批次/webhook)。6 Phase:钱包 → watcher → mint 端点 → 独角数卡 epay+API提货对接 → 部署/归集/变现/对账 → 端到端验证。全程无跑分、收款终点自托管、变现出金 US LLC。</div>
<div class="path">docs/payment-clean-usdt-plan.html · 真相源 docs/superpowers/plans/2026-07-09-payment-clean-usdt-loop.md</div>
</a>
<a class="doc" href="payment-a-selfhosted-store-plan.html">
<div class="t">方案A · 自建发卡网(独角数卡)落地细化 <span class="tag html">HTML</span></div>
<div class="d">门面自建(独角数卡,独立 VPS 隔离部署)+ USDT 收款 + 激活码自动发货。<b>关键:后端已就绪</b>——发卡店回调 <code>POST /webhook/store/codes</code>HMAC+时间戳+nonce 防重放)、兑换 <code>POST /v1/redeem</code>(JWT)、批次生成/导出/作废均在 server/internal/codes。含拓扑图、两种发货模型(A 预充卡密零胶水 / B webhook JIT 更安全,待补 /internal/codes/mint 单源产码)、SKU 映射、USDT 两条接入路子、落地步骤与风险边界。</div>
<div class="path">docs/payment-a-selfhosted-store-plan.html</div>
</a>
<a class="doc" href="frontend-ds-refactor-plan.html">
<div class="t">前端设计系统治理重构(ds-flow 全端)<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-07-frontend-ds-refactor.md</code>(含 checkbox)。用 ds-flow 把 Flutter 五端 + 官网 + 用户中心收口到「设计单源·代码镜像·静态闸拦漂移·golden/fidelity 双级像素验收兜底」。<b>非从零 bootstrap(已约 65% 达标)</b>:补原型三件套(atoms.css/icons.js/index.html 登记页)+ Web 共享原子层去重(各自实现+同源闸)+ 硬编码色/fidelity 闸 + 启用 pre-commit。6 阶段:CLAUDE.md → 原型单源 → Web token 同源 → Web 原子对齐 → Flutter golden 补齐 → 闸挂满。主题保持 light/dark。</div>
<div class="path">docs/frontend-ds-refactor-plan.html · 真相源 docs/superpowers/plans/2026-07-07-frontend-ds-refactor.md</div>
</a>
<a class="doc" href="control-plane-tls-tunnel.html">
<div class="t">控制面 TLS(Cloudflare Tunnel 前置)实现计划 <span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-06-control-plane-tls-tunnel.md</code>(含 checkbox)。把控制面 API 从明文 <code>http://103.119.13.48:8080</code> 迁到 <code>https://api.yanmeiai.com</code>cloudflared 出站隧道前置,源站仅绑 127.0.0.1,数据面 sing-box REALITY :443 全程不动)。6 任务:CF Tunnel 供给 → 客户端切 https/Android 去明文 → CI 守护禁明文 → PANGOLIN_PUBLIC_URL 切 https → 退役明文口(收 loopback,带上线顺序闸)→ 文档。</div>
<div class="path">docs/control-plane-tls-tunnel.html · 真相源 docs/superpowers/plans/2026-07-06-control-plane-tls-tunnel.md</div>
</a>
<a class="doc" href="cicd-plan.html">
<div class="t">CI/CD 全流程 实现计划(#30<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源 <code>docs/superpowers/plans/2026-07-05-cicd.md</code>(含 checkbox)。三期 11 任务:Phase1 基座+官网+服务端(无签名可立即上线,服务端固化 F3/F4 备份/迁移/回滚) → Phase2 Android(接 release keystore 签名,解锁下载链接) → Phase3 macOS 公证 dmg + Windows 安装包。runner 混合 nas/mac/windows;密钥已建(对齐 jiu)。设计见 cicd-design.html。</div>
<div class="path">docs/cicd-plan.html · 真相源 docs/superpowers/plans/2026-07-05-cicd.md</div>
</a>
<a class="doc" href="device-session-management-plan.html">
<div class="t">设备 &amp; 会话管理 + 每设备流量归因 实现计划(P1–P6)<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源为 <code>docs/superpowers/plans/2026-06-29-device-session-management.md</code>(含 checkbox)。P1 设备注册打通 → P2 sessions表+在线/最后登录 → P3 强制退出/清除 → P4 每设备流量 → P5 2FA信任(future) → P6 UI重做。</div>
<div class="path">docs/device-session-management-plan.html</div>
</a>
<a class="doc" href="superpowers/plans/2026-06-22-android-client.md">
<div class="t">Android 客户端实现计划 <span class="tag md">MD</span></div>
<div class="d">11 个任务:Go 1.24.3 工具链 → 构建 libbox.aar → 解析真实 API → Dart 接线 → 修原生编译 → 模拟器端到端 → 统计 → 切节点 → KillSwitch → 真机验证。</div>
<div class="path">docs/superpowers/plans/2026-06-22-android-client.md</div>
</a>
<a class="doc" href="ios-ipad-support-plan.html">
<div class="t">iOS + iPad 支持 实现计划 <span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源为 <code>docs/superpowers/plans/2026-06-22-ios-ipad-support.md</code>(含 checkbox)。6 阶段 12 任务。</div>
<div class="path">docs/ios-ipad-support-plan.html</div>
</a>
<a class="doc" href="superpowers/plans/2026-06-21-windows-client.md">
<div class="t">Windows 客户端实现计划 <span class="tag md">MD</span></div>
<div class="d">Windows 客户端的分步实现计划。</div>
<div class="path">docs/superpowers/plans/2026-06-21-windows-client.md</div>
</a>
<a class="doc" href="stats-overhaul-plan.html">
<div class="t">统计体系整改 实现计划(#5<span class="tag html">HTML</span></div>
<div class="d">阅读版;执行真相源为 <code>docs/superpowers/plans/2026-06-24-stats-overhaul.md</code>(含 checkbox)。三期:四端实时统计修复 → 每设备归因+GB综合配额 → 统计页重设计(上聚合·下分设备)。</div>
<div class="path">docs/stats-overhaul-plan.html</div>
</a>
<h2>知识库 / 调研</h2>
<a class="doc" href="payment-channels-overview.html">
<div class="t">支付渠道选型总览 <span class="tag html">HTML</span></div>
<div class="d">各支付渠道候选与甄别标准(研究起点,非背书)。核心心智:「发卡平台」= 门面 × 通道两层分离,灰/干净分水岭在通道不在门面。候选 A 自建发卡网(独角数卡/acg-faka/KamiFaka)· B 加密网关(NOWPayments/Cryptomus/CoinGate)· C 自建 USDT 监听(TronGrid)· D 官方鹅(TG Stars/IAP)· E 支付宝微信第三方(跑分层,不列名单)。含决策矩阵 + 尽调清单 + 推荐起步组合(独角数卡+USDT)。</div>
<div class="path">docs/payment-channels-overview.html</div>
</a>
<a class="doc" href="frontend-overview.html">
<div class="t">前端全景(ds-flow 设计系统治理)<span class="tag html">HTML</span></div>
<div class="d">Flutter 五端 + 官网 + 用户中心的设计系统治理全景:一次 UI 改动标准路径、目录地图、三层真相源模型、令牌 codegen、四道静态闸「违规谁拦」、像素验收(golden 双主题 + fidelity 待建)、响应式五端、规则速查。原型单源 design/prototype/tokens/atoms/icons/index.html)、check-ds/check-l1-sync/check_ds_code/codegen-drift 四闸进 CI、golden 全量 34 绿含 CJK。</div>
<div class="path">docs/frontend-overview.html</div>
</a>
<a class="doc" href="code-review-2026-07.html">
<div class="t">全栈设计审查 2026-07(前端/后端/数据库)<span class="tag html">HTML</span></div>
<div class="d">核心链路精读式审查,13 项发现分 P0/P1/P2:明文 HTTP、SQLite 零备份(P0);同机换账号 403 死结、disconnect 撤错凭证、用量取走即焚、Redis 重启全员掉线、argon2id OOM(P1);留存/UTC 日界/三时钟口径等(P2)。附「做得好的」与处理顺序建议。</div>
<div class="path">docs/code-review-2026-07.html</div>
</a>
<a class="doc" href="dev-conventions.html">
<div class="t">开发规范 · 可测试性五支柱 <span class="tag html">HTML</span></div>
<div class="d">「怎么写才好测」——开发规范作为可测试性前置条件。五支柱(接缝即接口/契约单源/纯逻辑分离/错误是值/可观测)+ 支柱↔测试层咬合矩阵图 + 反例→真实bug→对应支柱对照表。与测试框架文档咬合。</div>
<div class="path">docs/dev-conventions.html</div>
</a>
<a class="doc" href="test-architecture.html">
<div class="t">统一测试框架 · 架构说明 <span class="tag html">HTML</span></div>
<div class="d">多端项目可复用的分层测试方法论(L0 契约→L4 E2E)+ 四类诉求(界面一致/交互/数值/后端记账)→层→工具→量化指标映射 + 五张架构图(金字塔/契约接缝/CI 流水线/E2E 拓扑)+ ⑩「已知缺口/测试盲区」单一跟踪源(没测什么·为什么·何时补)。</div>
<div class="path">docs/test-architecture.html</div>
</a>
<a class="doc" href="feature-test-coverage-checklist.html">
<div class="t">功能 × 测试覆盖清单 <span class="tag html">HTML</span></div>
<div class="d">逐功能盘点验证五端是否正确:A 共享逻辑+后端(控制面 21 包/数据面渲染+记账/Flutter 共享),每行「现有能力→已覆盖+怎么覆盖→欠缺→只能人工」;B 平台隧道层五端矩阵 + 每端真连通验收清单(出口IP变化/DNS劫持/分流/记账对账/KillSwitch/切节点)。配套 test-architecture.html 的「逐功能」视角。</div>
<div class="path">docs/feature-test-coverage-checklist.html</div>
</a>
<a class="doc" href="traffic-accounting-scopes.html">
<div class="t">流量记账口径 · 连接页实时 vs 统计页累计 <span class="tag html">HTML</span></div>
<div class="d">客户端两处"上传/下载"为何对不上:连接页实时来自内核 Clash API 全局吞吐(/traffic+/connections)<b>含直连</b>;统计页累计来自服务端节点 v2ray_api per-user 计数<b>仅代理</b>。差额=直连流量(国内站/分流),设计使然非 bug;附对账口径警示(不能拿连接页含直连的数去对节点计数)。</div>
<div class="path">docs/traffic-accounting-scopes.html</div>
</a>
<a class="doc" href="killswitch-design.html">
<div class="t">KillSwitch 设计与跨平台能力矩阵 <span class="tag html">HTML</span></div>
<div class="d">断网保护 L0–L3 分级模型 + 各平台能力天花板 / 当前实现矩阵。KillSwitch 决策依据。</div>
<div class="path">docs/killswitch-design.html</div>
</a>
<a class="doc" href="技术方案.md">
<div class="t">技术方案(总) <span class="tag md">MD</span></div>
<div class="d">Pangolin 整体技术选型与架构方案。</div>
<div class="path">docs/技术方案.md</div>
</a>
<a class="doc" href="vpn-core-embedding.md">
<div class="t">VPN 内核内嵌 <span class="tag md">MD</span></div>
<div class="d">sing-box 内核在各端的内嵌方式调研。</div>
<div class="path">docs/vpn-core-embedding.md</div>
</a>
<a class="doc" href="vpn-testing-research.md">
<div class="t">VPN 测试调研 <span class="tag md">MD</span></div>
<div class="d">VPN 黑盒测试方法与口径调研。</div>
<div class="path">docs/vpn-testing-research.md</div>
</a>
<a class="doc" href="vpn-test-plan.md">
<div class="t">VPN 测试计划 <span class="tag md">MD</span></div>
<div class="d">国内外站点矩阵 + 延迟/连通性测试计划。</div>
<div class="path">docs/vpn-test-plan.md</div>
</a>
<h2>排障 / Runbook</h2>
<a class="doc" href="connect-latency-urltest.html">
<div class="t">连接页延迟(urltest)· 跨端实现 + 排障 <span class="tag html">HTML</span></div>
<div class="d">连接页"延迟"= 内核 urltest(非直连实测)。根因链:服务端配置无 clash_api、libbox 单 client Group 不回调、Dart 广播流抢 EventChannel sink、连接态直连实测假值。各端(macOS/iOS/Android/Windows)注入 clash_api + 本地 HTTP 取法 + 排障打点 + libbox 构建前置(Android 要 JDK 17、包名 io.nekohasekai.libbox)。</div>
<div class="path">docs/connect-latency-urltest.html</div>
</a>
<a class="doc" href="ci-runner.md">
<div class="t">CI Runner 设置记录 <span class="tag md">MD</span></div>
<div class="d">gitea Actions self-hosted runner 记录:决定用 1 个(mac-pangolin-2,项目级·mac host·label nas·复用 jiu relay)、已删 orphan 的清理命令、launchd 持久化 + 单点韧性(runner 离线 Telegram 告警)。CI 首跑 run #298。</div>
<div class="path">docs/ci-runner.md</div>
</a>
<a class="doc" href="macos-sysext-realize-troubleshooting.html">
<div class="t">macOS 系统扩展 realize 失败(code=4)踩坑复盘 <span class="tag html">HTML</span></div>
<div class="d">PacketTunnel 系统扩展无法激活的三个叠加配置 bug 排查与修复。</div>
<div class="path">docs/macos-sysext-realize-troubleshooting.html</div>
</a>
<a class="doc" href="p1-macos-system-extension.md">
<div class="t">P1 macOS 系统扩展 <span class="tag md">MD</span></div>
<div class="d">macOS 原生 System Extension 隧道方案说明。</div>
<div class="path">docs/p1-macos-system-extension.md</div>
</a>
<a class="doc" href="node-rebuild-checklist.md">
<div class="t">节点重建检查单 <span class="tag md">MD</span></div>
<div class="d">节点重装/重建的操作检查清单。</div>
<div class="path">docs/node-rebuild-checklist.md</div>
</a>
<a class="doc" href="runbook-scheduler.md">
<div class="t">Scheduler Runbook <span class="tag md">MD</span></div>
<div class="d">调度器运维手册。</div>
<div class="path">docs/runbook-scheduler.md</div>
</a>
</div>
</body>
</html>