|
| 1 | +# FlyPython 仓库 0.1.0 规划:社区贡献课程 |
| 2 | + |
| 3 | +版本:0.1.0(规划,第 1 稿) |
| 4 | +更新日期:2026-09-13 |
| 5 | +状态:**规划,0.1.0 之前不实施。** |
| 6 | +关联:网站仓库 `docs/product-and-growth-plan-0.0.9.md`(附录 B 记录了移出决定)· |
| 7 | +网站仓库 `docs/courses/README.md`(课程标准)· 本仓库 `CONTRIBUTING.md`、 |
| 8 | +`docs/CURATION_POLICY.md`、`LICENSE` |
| 9 | + |
| 10 | +## 决定 |
| 11 | + |
| 12 | +- 所有者 2026-09-13:支持网友通过本仓库提交课程;**社区贡献课程永久免费**。 |
| 13 | +- 同日决定:**0.1.0 之前不考虑社区课程**,先把规划写在本仓库,届时再立项、分配 |
| 14 | + 工作项编号。 |
| 15 | +- 官方示范(视频、终端回放、文字稿)是 Pro 专属;社区课是否配官方示范、如何开放, |
| 16 | + 届时按网站当时的 Pro 规则另行决定。本规划不承诺社区课有示范。 |
| 17 | + |
| 18 | +## 现状(2026-09-13 核对) |
| 19 | + |
| 20 | +- `LICENSE` 已是双许可:代码(starter、solution、`verify.py`、工具)MIT;课文等书面 |
| 21 | + 内容 CC BY 4.0,署名「FlyPython (flypython.com)」。 |
| 22 | +- `CONTRIBUTING.md` 有资源、项目、课程反馈、失效链接、安全报告等流程,**没有「贡献 |
| 23 | + 一门课程」的流程**。 |
| 24 | +- 课程标准已存在:一门课一个文件夹(`COURSE.md` / `TASK.md` 与中文对、五课、starter / |
| 25 | + solution / tests、`verify.py`、`REVIEW.md`),`tools/verify_courses.py` 校验; |
| 26 | + 0.0.8 起课程文件夹单独取出也能运行 `python verify.py`。 |
| 27 | +- 网站的课程数据与认领契约目前是手工镜像本仓库,每加一门课都要改网站代码—— |
| 28 | + 社区课一多就成为瓶颈(见第 6 项)。 |
| 29 | + |
| 30 | +## 待办(0.1.0 立项时细化) |
| 31 | + |
| 32 | +## 1. 贡献流程与课程模板 [高] |
| 33 | + |
| 34 | +- [ ] 仓库新增「Course proposal」issue 表单:先提目标学员、要解决的真实任务、使用 |
| 35 | + 的工具、判定方式,维护者同意后再写 |
| 36 | +- [ ] `CONTRIBUTING.md` 增加「贡献一门课程」一节,指向课程标准(网站仓库 `docs/courses/README.md` §2) |
| 37 | +- [ ] 课程脚手架(`templates/course/` 或 `tools/new_course.py`):生成 `COURSE.md` / |
| 38 | + `_cn`、`TASK.md` / `_cn`、`lessons/L01–L05` 与 `_cn`、starter / solution / tests、 |
| 39 | + `verify.py`、`REVIEW.md` 骨架 |
| 40 | +- [ ] 提交清单:中英同步、确切工具与版本、贡献者自己的实跑记录(REVIEW.md) |
| 41 | + |
| 42 | +## 2. 自动校验(CI) [高] |
| 43 | + |
| 44 | +- [ ] PR 上自动运行:`tools/verify_courses.py`、双语对齐、content-manifest、 |
| 45 | + `verify.py starter --expect-failure` 与 `verify.py solution` |
| 46 | +- [ ] 在**无网络**的 CI 环境里运行;课程目录体积与文件数上限;依赖只允许锁定版本 |
| 47 | + 且在允许清单内 |
| 48 | +- [ ] 若加入工具课共享核心组,逐字节一致性检查自动生效 |
| 49 | + |
| 50 | +## 3. 安全审查 [高] |
| 51 | + |
| 52 | +社区课的 `verify.py`、测试与 starter 会**在学员电脑上由 Agent 执行**,恶意或粗心的 |
| 53 | +代码直接伤害学员。 |
| 54 | + |
| 55 | +- [ ] 维护者审查清单:不访问网络、不在课程目录之外读写、除测试运行器外不起子进程、 |
| 56 | + 无混淆代码、无遥测;依赖在允许清单内 |
| 57 | +- [ ] `courses/` 设 CODEOWNERS,合并必须经维护者批准 |
| 58 | +- [ ] 合并后才会进入网站固定的内容版本;未合并的 PR 不会出现在站点与 Skill 里 |
| 59 | + |
| 60 | +## 4. 编辑审查与标注 [中] |
| 61 | + |
| 62 | +- [ ] 按 `CURATION_POLICY.md` 人工审查课文事实与定位;描述由人执笔 |
| 63 | +- [ ] 课程页与课程列表标注「Community course · 贡献者 · FlyPython 审核于 <日期>」, |
| 64 | + 与官方课程区分 |
| 65 | +- [ ] 维护者至少实跑一次(Agent 可解性),记录进 REVIEW.md |
| 66 | + |
| 67 | +## 5. 署名与许可 [中] |
| 68 | + |
| 69 | +- [ ] `COURSE.md` frontmatter 增加 `authors`(贡献者 GitHub 账号),课程页与课程文档 |
| 70 | + 显示署名 |
| 71 | +- [ ] `LICENSE` / `CONTRIBUTING.md` 补充:内容署名在「FlyPython (flypython.com)」之外 |
| 72 | + 同时列出贡献者;提交即声明有权提交(DCO / sign-off) |
| 73 | +- [ ] 与网站 0.0.9 FP-903(署名方式)一并决定展示格式 |
| 74 | + |
| 75 | +## 6. 网站自动接入,去掉手工镜像 [高,网站仓库] |
| 76 | + |
| 77 | +本项工作在网站仓库完成,本仓库需要保证课程契约字段完整、机器可读。 |
| 78 | + |
| 79 | +- [ ] 构建期从固定的仓库版本读取课程契约(元数据、检查点、判定方式、`course_id`、 |
| 80 | + salt、难度、时长、工具),**生成**网站课程数据与认领契约,替代手写 |
| 81 | + `courses.ts` 与 `COURSE_CONTRACTS` |
| 82 | +- [ ] 社区课合并后,网站只需更新内容 pin 即可上线(中英课程页、题目页、文件接口、 |
| 83 | + 选题页自动出现) |
| 84 | +- [ ] 网站课程文档 `docs/courses/<slug>.md` 由脚本生成骨架,维护者补「迭代方向」 |
| 85 | +- [ ] 测试:生成数据与现有 15 门课逐字段一致后再切换 |
| 86 | + |
| 87 | +## 7. 永久免费的保证 [高] |
| 88 | + |
| 89 | +- [ ] 课程契约增加 `source: official | community`;社区课**不能**带 `pro` 标记—— |
| 90 | + 生成脚本与站点测试双重拒绝 |
| 91 | +- [ ] 社区课可认领、计积分、得课程徽章(与官方免费课一致);是否计入官方路线由维护者 |
| 92 | + 单独决定(默认不计入,待决) |
| 93 | +- [ ] 网站定价页 Free 卡写明「社区课程永久免费」 |
| 94 | + |
| 95 | +## 8. 维护与下线 [中] |
| 96 | + |
| 97 | +- [ ] 工具大版本发布后,社区课标注「需要复审」,通知贡献者;30 天(待决)内无人 |
| 98 | + 处理则转为「存档」:页面保留、仍可做题,但从课程列表默认隐藏 |
| 99 | +- [ ] 已有认领与积分永远保留 |
| 100 | + |
| 101 | +## 不做 |
| 102 | + |
| 103 | +- 不接受社区贡献 Pro 课程;社区课不能被标为 Pro。 |
| 104 | +- 不做收入分成或付费悬赏承诺。 |
| 105 | +- 未经维护者审查合并的 PR 不进入网站固定的内容版本,也不出现在 Skill 与简报里。 |
| 106 | + |
| 107 | +## 立项前需要决定 |
| 108 | + |
| 109 | +1. 社区课是否可计入官方路线(默认不计入)。 |
| 110 | +2. 「需要复审」转为「存档」的期限(建议 30 天)。 |
| 111 | +3. 贡献者署名在课程页的展示格式(与网站署名方式一并决定)。 |
| 112 | +4. 每月审核社区课的容量上限(维护者时间与官方 Pro 上新共用)。 |
0 commit comments