Files
pangolin/docs/index.html
T
wangjia e7b37d7719
ci-pangolin / Lint — shellcheck (pull_request) Successful in 9s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 23s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 5s
ci-pangolin / Flutter — analyze + test (pull_request) Failing after 37s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 6s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 4s
ci-pangolin / Go — build + test (pull_request) Successful in 19s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Successful in 17s
ci-pangolin / Go — integration (mysql/redis testcontainers) (pull_request) Successful in 4m16s
ci-pangolin / Golden — 视觉回归 (components + auth) (pull_request) Successful in 15s
ci-pangolin / Lint — shellcheck (push) Successful in 5s
ci-pangolin / OpenAPI Sync Check (push) Successful in 23s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (push) Successful in 6s
ci-pangolin / Flutter — analyze + test (push) Failing after 15s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (push) Successful in 5s
ci-pangolin / Codegen Drift — token 生成物未漂移 (push) Successful in 5s
ci-pangolin / Go — build + test (push) Successful in 7s
ci-pangolin / E2E Smoke — L4 进程级端到端 (push) Successful in 19s
ci-pangolin / Go — integration (mysql/redis testcontainers) (push) Failing after 4m29s
ci-pangolin / Golden — 视觉回归 (components + auth) (push) Successful in 13s
test(ci): 刀3 — CI 单点韧性:runner 离线告警(缺口③)
CI 整条吊在一台 mac,关机/掉线即全停且无人知道。新增
deploy/runner/runner-deadman.sh(仿 bootstrap/monitor/deadman-watch.sh):
放另一台常在线主机,每 3 分钟查 gitea Actions API 里 mac-pangolin-2 的 status,
连续 offline 到阈值 → Telegram 告警,恢复也通知;API 取不到时跳过不误报。

响应字段已对照真 gitea API 核验({"runners":[{"name":...,"status":"online"}]}),
shellcheck 干净,实跑验证 online→不告警、缺失→进告警分支。

docs/ci-runner.md 增「韧性」节(告警部署 + cron/launchd)并标注持久化激活仍待
本机手动跑(pkill/launchctl,Claude 跑不了);验证段 job 数 9→10。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:04:35 +08:00

152 lines
8.9 KiB
HTML
Raw 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="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="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="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="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="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>