VIBECODINGENGLISH/PROJECT_CONSTITUTION.md

8.7 KiB
Raw Permalink Blame History

Project Constitution — VibeCoding English

项目宪章 · 不可轻易修改 · 所有决策的最高准则 版本v1.0 | 生效日期2026-05-26


一、项目身份

项目名称 VibeCoding English
一句话定位 让中国程序员在 Vibe Coding 中无感学英语
目标用户 使用 AI 编程工具Claude Code / OpenCode / Cursor 等)的中国程序员
核心场景 编码过程中遇到生词 → 选中即翻译 → 自动积累 → 间隔复习

二、不可妥协的原则

原则 1Offline First离线优先

基础翻译功能必须在完全无网络的环境下可用。 LLM 等在线功能是锦上添花,而非生存必需。

判断标准:断网后,选中一个常用英文单词按快捷键,翻译正常显示。

原则 2Zero Friction零摩擦

用户从"看到生词"到"获得翻译"的操作步骤 ≤ 2 步。 理想路径:选中 → 快捷键1步。 可接受路径:选中 → 右键 → 点击2步

判断标准:从看到生词到看到翻译 ≤ 3 秒。

原则 3Data Sovereignty数据主权

用户的单词本数据完全本地存储,永不上传任何服务器。 用户可随时导出全部数据,可随时删除全部数据。

判断标准:抓包工具检测,插件不向任何外部服务器发送单词本数据。

原则 4Context Matters语境为王

翻译不能脱离上下文。同一个词在不同语境下给出不同释义。 技术术语给出技术含义,普通用语给出通用含义。

判断标准:同一个词(如 resolve)在代码上下文和普通文本上下文中,给出不同释义。

原则 5Progressive Enhancement渐进增强

功能分层:基础功能 100% 可用 → 网络功能尽力可用 → AI 功能可选可用。 每个增强层失败时,优雅降级到下一层。

判断标准LLM API 挂了,离线词典仍然能正常工作。


三、技术原则

原则 6Core Once, Adapter Everywhere

核心业务逻辑编写一次(@vibecoding-english/core),各平台仅编写适配层。 Core Library 不依赖任何平台特定 API。

原则 7Test Before Code测试驱动

任何新功能的开发顺序:写测试 → 测试失败 → 写实现 → 测试通过 → 重构。 核心模块单元测试覆盖率 ≥ 80%。

原则 8Fail Gracefully优雅失败

任何错误不能导致插件崩溃或 VS Code 无响应。 每个 try-catch 必须有降级策略。

原则 9Type Safety类型安全

整个项目使用 TypeScript strict 模式。 禁止 any(除非有充分理由并注释说明)。

原则 10Small Modules小模块

每个文件 ≤ 300 行,每个函数 ≤ 50 行,每个类 ≤ 10 个公共方法。 超过则拆分为子模块。


四、设计原则

原则 11Native Feel原生感

UI 遵循 VS Code 设计语言,使用 VS Code 主题变量。 不引入自定义 UI 框架的视觉风格。

原则 12Keyboard First键盘优先

所有核心功能有快捷键,鼠标操作是辅助。 快捷键设计避免与 VS Code 内置快捷键冲突。

原则 13Minimal Configuration最小配置

开箱即用,零配置可完成核心翻译流程。 高级功能LLM 翻译)需要配置 API Key。


五、协作原则

原则 14AI-First DevelopmentAI 优先开发)

本项目本身就是 Vibe Coding 的产物 —— 使用 AI 工具辅助开发本工具。 每个阶段的开发任务优先使用 AI Agent 完成,人工负责审核和决策。

原则 15Documentation Lives with Code文档即代码

所有文档与代码放在同一仓库。 架构变更必须同步更新文档。 CHANGELOG 按 Keep a Changelog 规范维护。

原则 16Continuous Knowledge持续知识积累

每次解决问题后,将经验写入 knowledge/ 目录。 每个 AI 对话中的重要发现写入 MEMORY.md。 Skills 随项目成长而积累。

原则 17Comment for Understanding注释即理解

本项目核心开发者具有 Java 背景,对 TypeScript/VS Code 插件生态需要学习。 代码注释不仅是文档,更是知识传递的桥梁。

注释强度要求

注释类型 要求 示例
文件头注释 每个文件顶部说明模块用途、对应 Java 中的类似概念 // 翻译调度器 —— 类似 Java 的 Chain of Responsibility 模式
公共 API (JSDoc) 所有 export 的函数/类/接口必须有完整 JSDoc @param, @returns, @throws, @example
接口注释 说明接口的角色,对比 Java 中的 interface/abstract class // ITranslateEngine —— 类似 Java 的 Function<T, R> 接口
复杂逻辑 超过 5 行的逻辑块需要"先注释思路,再写代码" 先写 // 步骤1: ... 步骤2: ... 再写实现
TypeScript 特性 使用 TS 独有特性时必须注释解释(对 Java 开发者) // Pick<T, K> 类似 Java 中手动提取字段创建新 DTO
VS Code API 使用 VS Code API 时注释其作用和生命周期 // vscode.window.createOutputChannel —— 类似 Java 的 Logger
魔鬼数字/正则 任何魔法值必须注释来源和含义 // BNC 词频 ≥ 10000 视为高频词(经验阈值)

注释语言

  • JSDoc / 公共 API 注释:英文(国际化规范)
  • 模块级架构说明、复杂逻辑解释:中文(帮助 Java 开发者理解)
  • TypeScript 对比 Java 的类比注释:中文

原则 18Honest Fallback诚实兜底

Fallback兜底/降级)的本质是"Plan B",不是"假装 Plan A 成功"。 当主方案不可用时,兜底方案必须满足以下标准,否则宁可留空。

Fallback 合法性三条件(必须同时满足):

条件 含义 反例
1. 可验证 兜底结果的正确性可被独立验证 硬编码 50 个词的音标,无法覆盖新词
2. 准确性 ≥ 95% 兜底结果在实际使用中的准确率足够高 用规则猜测音标,准确率低
3. 透明标注 用户明确知道这是兜底结果,非主方案产出 悄悄用本地词表替换 LLM 音标

不满足条件时的处理优先级

1. 联网检索最佳实践 → 汇报结果,让用户决策
2. 在结果中明确标注"[缺少兜底策略]" → 用户自行判断
3. 留空 / 不显示 → 诚实比错误好

Fallback 偏离检查

如果 Fallback 结果与原有 Prompt/需求有偏差可能(如缺少字段、准确度下降), 必须在输出中强制标注 ⚠️[Fallback] 标识,说明:

  • 原始方案是什么
  • 为什么走了 Fallback
  • Fallback 的局限是什么

判断标准:用户看到结果时,能一眼区分"这是正常结果"还是"这是降级结果"。


六、禁止事项

# 禁止 原因
1 将用户单词本数据发送到任何服务器 原则 3数据主权
2 在未经用户确认的情况下自动发送代码到外部 API 安全 + 隐私
3 使用 eval() 或类似动态执行代码的方式 安全
4 硬编码 API Key 或密钥 安全
5 在主线程执行超过 50ms 的同步操作 原则 2零摩擦
6 吞掉异常不处理(空的 catch 块) 原则 8优雅失败
7 跳过测试直接合并到 main 原则 7测试驱动
8 修改本宪章的原则而不经过讨论和版本更新 原则稳定性
9 Phase 完成后不更新迭代记录和 memory.md 原则 16持续知识积累
10 使用不可验证/不准确的 Fallback硬编码猜测、规则推断 原则 18诚实兜底

七、决策框架

当面临技术/产品决策时,按以下优先级判定:

1. 是否违反宪章不可妥协原则?
   → 是:否决
   → 否:继续

2. 是否有利于"零摩擦"用户体验?
   → 打分 1-5

3. 实现成本和维护成本是否可接受?
   → 打分 1-5

4. 综合评分 = 体验分 × 2 + 成本分
   → ≥ 10 分:执行
   → 7-9 分:讨论
   → < 7 分:否决

八、版本历史

版本 日期 变更
v1.0 2026-05-26 初始版本,定义 16 条原则
v1.1 2026-05-26 新增原则 17Comment for Understanding注释规范
v1.2 2026-05-27 新增原则 18Honest FallbackFallback 合法性三条件 + 禁止事项 #10

本宪章是项目的"宪法"。所有代码、文档、决策都必须符合以上原则。 修改宪章需要:创建 PR → 团队讨论 → 至少 2 人同意 → 更新版本号。