# TestFlight v0.1.0

iKuai 工具类插件调试沙箱 — 独立网段隔离、Ed25519 权限签名、每应用独立 netns。

## 下载

```
https://dl.naixi.net/ikuai/testflight/testflight-0.1.0.ipkg
sha256: ba09a3a407743633c1934f4256754a06c901a6190d40f75a6900359daec86e53
```

## 安装

```sh
naixi install https://dl.naixi.net/ikuai/testflight/testflight-0.1.0.ipkg
```

装完后访问 `http://<路由器LAN_IP>:7600/`（默认 bind 0.0.0.0:7600）。

## 架构

```
主系统 LAN (192.168.*.*)
    └─ br-tf (172.18.50.1/24 + .2/24)       ← start.sh 创建
        ├─ app-<id> netns                    ← 每应用独立 netns
        │   └─ veth + 独立 IP (172.18.50.11, 12, ...)
        ├─ app-mihomo netns
        └─ ...

每个应用：
  - 独立 PID/MNT/USER namespace
  - 独立网络命名空间（独立 IP，端口空间隔离）
  - overlay 根文件系统（只读 rootfs + 可写 upper）
  - uid 隔离（1001+）
```

## 权限模型（三层）

| 档位 | 签发者 | 范围 | 示例权限 |
|---|---|---|---|
| **basic** | 免签 | per-app | shell, write-overlay, network-host, raw-socket, port-bind |
| **network** | iKuai 团队 | per-device (gwid) | net-admin, privileged-ports, device-tty |
| **host** | TF_HOST 钥匙（希总独占） | per-app | modify-system-files, bind-host-fs, host-network-stack |

## 开发者工作流

1. 打包 .ikpkg（tar.gz，顶层目录 = 应用 id）
2. 需要高级网络权限：向 iKuai 团队申请 device license（带 gwid）
3. 需要改主路由（mihomo 类）：向希总申请 host-claim
4. 在 TestFlight 面板上传，测试
5. 调试完通过 `/api/export?app=<id>` 导出标准 ipkg
6. 提交审核 → iKuai 团队用官方钥匙重签 → 上架

## 签名工具

包内置 `app/bin/devtools/tf-sign`：

```sh
# iKuai 团队签 device license
tf-sign license --key ikuai-official.pem --gwid <hex> \
  --perm net-admin,privileged-ports --issued-to <dev>

# 希总签 host claim（改主路由类应用）
tf-sign host-claim --key tf-host.pem --app <id> --gwid <hex> \
  --grant modify-system-files,bind-host-fs

# 开发者签 manifest 完整性
tf-sign manifest --key dev.pem --app-dir <dir>
```
