-
Notifications
You must be signed in to change notification settings - Fork 0
ROADMAP
唯一真源(single source of truth):本文件是所有阶段(L/R/P/S)的唯一整合视图。 实施细节见各专项文档,本文件只负责总览、阶段编排、验收标准与优先级决策。 专项文档:
Plan.md(语言实现)、方案.md(语言设计)、docs/长期规划.md(L0-L5 生态)、docs/Rust迁移方案.md(R0-R5 核心迁移)、docs/CLI-Rust转型方案.md(P0-P6 CLI 迁移)、docs/THREAT-MODEL.md(威胁模型与边界)、docs/安全测试报告.md、docs/沙箱白皮书.md。
| 域 | 条目 | 状态 |
|---|---|---|
| 语言 | 8 关键字(safe/only/lock/mask/cage/guard/seal/trace) | ✅ P0-P7 全部落地 |
| 语言 | 污点引擎(R1-R5)、escape 全局扫描、运行时注入(guard/only/seal/trace/cage 节) | ✅ |
| 语言 | 进程级沙箱 fly-sandbox(Linux=ns+Landlock+seccomp;macOS=Seatbelt;Windows=Job Object) | ✅ 三平台原生实现(v0.6.5) |
| CLI | 全 Rust(P0-P6 完全交付,cmd/fly 退役):build/run/check/sandbox/version/error/update/lsp + fmt/analyze | ✅ |
| Rust | lexer(R0/R1)、ast、parser、checkd 客户端、错误渲染 format、gen、typeinfer | ✅ |
| 工程 | VSCode 插件(LSP)、npm 包、GitHub Actions 发布链、自更新 | ✅ |
| 质量 | testdata 反例 52+、golden、checker 单测、fuzz(lexer/parser/compile/checker) | ✅ |
| 安全 | 威胁模型、边界清单 B1-B8、外部评估回应(THREAT-MODEL §9/§10)、逃逸面 E1-E14 枚举 | ✅ 2026-08 两次审计落地 |
已填缺口(2026-08):G3 签名 ✅、G5 fuzz+红队 ✅、G2 交互矩阵 ✅、G4 审计注释 ✅、 G7 类型生态澄清 ✅、G1 wrapper 试点 ✅(S6,requests)。G6 错误信息迭代(S7)随 L0 P6 推进。
已填缺口(2026-08 二轮审查,13 项):only 块 dunder __import__ 逃逸修复(E14,运行时特判 +
编译期 onlyDeny∪escapeModules 联合 + __builtins__ 纳入)、needs_guard 递归 only/trace/cage、
aug_assign 单次求值(Go/Rust 双修 + golden 重生成)、fmt not in 空格、checkArgs *args 误报、
propagateTaint 基符号、analyze 评分边界、lexer 省略号列号、http 相对重定向 scheme + 拒绝明文降级、
LSP 单一 debounce 线程、prelude cage ctypes 投递、refCollector 参数默认值;fuzz 追加 FuzzCheckSource。
| # | 条目 | 类型 | 状态 |
|---|---|---|---|
| W1 | 平台 | ✅ v0.6.5:macOS=Seatbelt(sandbox-exec SBPL:禁网/限文件写/内存CPU上限),Windows=Job Object(kill-on-close+内存/时间/进程上限),强度声明入 README 平台表 | |
| W2 | 发布链依赖人工 secret:SIGN_PRIVATE_KEY/VSCE_PAT/NPM_TOKEN 未配即静默跳过 → fly update 无 .sig 自断链 |
发布 | 🔲 CI 显性告警;PR 门禁 CI(当前仅 tag 触发 release.yml) |
| W3 | 安全核心(escape/taint/only/guard 拦截逻辑)无专项 fuzz | 质量 | 🔲 补 fuzz 目标 |
| W4 | 错误码双真源(errors.go ↔ errorinfo.rs)靠人工同步 | 质量 | 🔲 CI 一致性校验 |
| W5 | fly-sandbox |
架构 | ✅ 已决(2026-08):删除 Wasm 原型,单沙箱主线(进程级:Linux=ns+Landlock+seccomp,win/mac=平台原生隔离) |
| W6 | 生态 | ✅ 已决(2026-08):暂不实现,写入 docs/compat.md(报错 E0004/E0008/E0009 + workaround),74% 接受 | |
| W7 | 第三方库 wrapper:requests 之后补 sqlalchemy | 生态 | ✅ v0.6.6:sqlalchemy 可用——text() 汇点编译期拦截(taint.go)+ _FLY_SB_ALLOWED_MODS 白名单 + execute 通用汇点;文档与反例锁定(checker_test TestTaintIOSources) |
| W8 | 品牌 | ✅ 已决(2026-08):不改名——品牌完全即 PyFly(repo PyFly-lang、产物 fly、npm fly-lang),撞车风险接受并记录风险表 | |
| W9 | Go(checker/沙箱)+ Rust(CLI)双实现并存,语义漂移风险靠 golden 对比兜底 | 维护 | 持续(D1/D6 已定,checker 留 Go) |
现状 ──L0──► v0.3.0(基线收尾)──L1──► v1.0.0(Rust 全量)✅ 2026-08 达成(实际 v0.6.4)
└───── S 系列安全专项(S1-S6,随阶段插入,S2/S3 优先)──────┐
v1.0.0 ──L2──► v1.1(工具链自举)──L3──► v2.0(自举编译器闭环)
──L4──► v2.x(开放协作)──L5──► v3.0(生态与治理)
| 任务 | 说明 | 验收 |
|---|---|---|
| P6 打磨 | golden 全量覆盖、错误消息快照、边界用例(闭包/嵌套/f-string 内 mask) | ✅ 已交付 |
| 行为测试接入 CI | 生成 .py 由 python3 实跑 | ✅ 已交付(release.yml python 3.10-3.14 矩阵) |
| S1 边界文档 | THREAT-MODEL §9/§10(本文件)+ README 安全边界声明 | ✅ 已交付 |
| 条目 | 任务 | 优先级 | 验收 |
|---|---|---|---|
| S2 |
fly update 产物签名(ed25519,零第三方)+ 校验,失败拒绝安装 |
🔴 高 | ✅ 已交付:tools/sign + verify.go + release.yml 签名步骤 + 5 单测(正签/篡改/缺签/换钥/--insecure) |
| S3 | Go fuzz(parser/checker)+ 逃逸红队回归 | 🔴 高 | ✅ 已交付:3 个 fuzz 目标(lexer/parser/compile,seed=testdata 全量),修复 3 个 parser panic;redteam_test.go 19 项对抗回归,新增属性赋值污点传播,B7 确认不可达 |
| S4 | 8 关键字交互矩阵文档 + 表驱动组合测试 | 🟡 中 | ✅ 已交付:docs/关键字交互矩阵.md + interaction_test.go 22 组合 |
| S5 | 可选 --keep-annotations:产物保留安全标记注释(审计/复盘) |
🟡 中 | ✅ 已交付:fly build --keep-annotations,6 类注解(safe/mask/lock/guard/only/seal/trace/cage) |
| S6 | 第三方库 wrapper 试点(requests/sqlalchemy 任一) | 🟢 低 | ✅ 已交付:requests 受控包装(examples/third_party/safe_http.fly + docs/第三方库安全包装.md);修复 guard 消息字符串转义 bug;运行时白名单与编译期 taint 源点一致化(allow_requests_s6 防漂移测试) |
| S7 | 错误信息用户测试迭代(G6) | 持续 | 🔲 随 P6 消息快照推进 |
S2 待用户操作:
~/.fly-sign/priv.pem(本次生成)内容配置到 GitHub Actions secretSIGN_PRIVATE_KEY,否则 CI 跳过签名(无 .sig 时 fly update 默认拒绝安装)。
| 阶段 | 内容 | 状态 |
|---|---|---|
| R0/R1 | lexer(token/缩进/字符串) | ✅ |
| R1.5 | ast + parser(1322 行翻译) | ✅ |
| P1/P2 | version/help/error + check(checkd 桥接,零差异) | ✅ |
| R2 | gen + 运行时注入(only/seal/trace/cage/runtime/sandbox 节) | ✅ |
| P3 |
fly build / fly run(checkd 复用,golden 逐字节一致) |
✅ |
| R3 | checker 语义子集自举(可选,checker 留 Go 为 D6 默认) | 🔲 可选(D1/D6 决策:checker 留 Go) |
| P4 |
fly update(签名先行,见 S2)/ fly lsp
|
✅ |
| R4 | compile 管线整合、错误聚合 20 条上限 | ✅(checkd 侧) |
| P5 |
fly sandbox(决策 B:fly-sandboxd 二进制桥接) |
✅ |
| R5/P6 | 切换与退役:release.yml 切 Rust 构建,产物命名不变,AGENTS.md/README 更新 | ✅(b147c25:cmd/fly 退役 + fmt/analyze 迁 Rust + 三二进制打包) |
验收:v1.0.0 与 Go 版 CLI diff 零差异;单静态二进制(<3MB);VSCode/CI/update 契约零改动。已达成(golden 双端逐字节一致 + LSP full_session 集成 + update 实测全链路)。
-
fly fmt(AST 驱动,注释保留,用 Fly 编写,Rust 壳调用) -
fly doc(docstring → Markdown)、fly test(目录级测试运行器) - Neovim/JetBrains LSP 客户端配置
- 验收:
fly fmt格式化自身源码后 golden 无差异(dogfooding 自证) - 前置:§1.1 W2-W4 收尾(CI 门禁、安全 fuzz、错误码校验)随 L2 并行(W1/W5 已于 v0.6.5 完成)
- gen 发射器用 Fly 重写(参考实现,D-1 双实现互证)
- 前端
flyc.fly自编译闭环:fly build flyc.fly → python3 flyc.py编译任意 .fly - 验收:Fly 写的编译器能编译自身并产出可运行 .py
- RFC 流程、CHANGELOG 自动生成、文档站(GitHub Pages + docsify,D-3)、playground
- 安全评审清单 + 漏洞披露流程
- 验收:外部贡献者 PR 全流程无维护者人工干预
- 标准库/包管理寄生 Python(pip/PyPI 复用,无自研 registry)
- 合规行业试点(金融/医疗/政务)与合规报告模板
- 成功指标:示例库 10+、外部贡献 PR ≥ 1(自 L4 持续)
| # | 决策 | 结论 |
|---|---|---|
| D1 | checker 是否迁移 Rust | 留 Go(D6),走 checkd 桥接;R3 可选自举 |
| D2 | 工具语言 | 用 Fly 写 fmt/doc/test(自举优先),Rust 壳调用 |
| D3 | 文档站 | GitHub Pages + docsify(零成本) |
| D4 | 自举编译器形态 | 编译为 .py 由 python3 跑(无引导问题) |
| D5 | sandbox 迁移 | 决策 B:保留 Go 实现,fly-sandboxd 二进制桥接(安全关键代码不重写) |
| D6 | 包管理 | 寄生 Python(pip/PyPI),无自研 registry、无 flyx 包 |
| 风险 | 等级 | 缓解 |
|---|---|---|
| 安全保证被"改写产物"绕过(THREAT-MODEL §9.1) | 高 | 文档诚实声明 + 编译期零残留关键字为不可篡改层 |
| S2/S3 拖延导致信任链缺口 | 高 | 插队规则:S2/S3 优先于 L1 功能 |
| win/mac 沙箱承诺与实现不符(W1) | 高 | ✅ 已解除(v0.6.5):macOS Seatbelt / Windows Job Object 真实实现,强度声明入 README |
| 发布 secret 未配 → update 断链 / 发布静默缺件(W2) | 高 | §1.1 W2:CI 显性告警 + PR 门禁 CI |
| 双实现(Go checker/Rust CLI)语义漂移 | 中 | golden 逐字节对比 + LSP full_session 集成 + fuzz(W3/W9) |
| Rust 迁移与工具链并行冲突 | 中 | ✅ 已解除:L1 已达成,L2 串行开始 |
| 自举版漂移 | 中 | golden diff + 双实现互证 |
| 改名撞车(fly 名称已被占用) | 中 | ✅ 已决(2026-08,W8):不改名——品牌完全即 PyFly,撞车风险接受(产物 fly/npm fly-lang 维持),用户安装走 fly update 官方渠道 |
| 单人维护精力 | 低 | 全自动 CI/发布 + RFC 流程 |
- ✅ v0.3.0(2026-08 达成,实际 v0.6.4):8 关键字全落地 + S1-S3 完成(签名 + fuzz 就位)
- ✅ v1.0.0(2026-08 达成):Rust CLI 全量零差异(golden 逐字节 + full_session 集成),update 签名验证上线
- 🔲 v1.1:
fly fmt自举(dogfooding 闭环)(W1-W4 已于 v0.6.5 收尾) - 🔲 v2.0:自举编译器
flyc闭环 - 🔲 v2.x+:示例库 10+、外部贡献 PR ≥ 1、合规试点 ≥ 1
✅ v0.3.0-v0.6.4 ──── L0 + S1-S3 + L1(Rust 全量,2026-08 达成)
🔲 v1.1 ──── L2(工具链自举)
🔲 v2.0 ──── L3(自举编译器 flyc)
🔲 v2.x ──── L4(开放协作)
🔲 v3.0 ──── L5(生态与治理)