本规范适用于无线麦SayAll.app 仓库中的所有新功能开发,包括仓库作者、维护者、外部贡献者、自动化 Agent 和受委托的开发者。任何人都不能因为是功能提出者、仓库所有者或维护者而跳过本规范。
本文件是新功能从立项到 PR 的统一流程入口。它只拥有新功能的查重、范围、实现和验证流程;分支、提交与合并以 BRANCH_MANAGEMENT.md 为准,仓库级硬门禁以 AGENTS.md 为准,具体产品行为以对应功能的 PRODUCT_SPEC.md 和适用的跨平台专项合同为准,提交 PR 时还必须完成 PR 提交模板 中的新功能检查项。发现互斥规则时不得简单叠加“更严格的一项”,必须按 AGENTS.md 的规范层级在独立治理 PR 中消除冲突。
- 执行
git fetch origin main,记录最新origin/main的完整 SHA。新功能必须从该 Commit 创建独立分支和持久化 worktree,不得基于旧功能分支、其他未合入 PR、release-main或本地过期的main直接开发。 - 扫描全部 Open PR(含 Draft)的标题和标签。按关键词、模块和路径筛选相关候选,再查看候选描述、文件和必要 Diff。不能只根据标题判定候选无重复;证据不足时扩大检查。
- 同时检查最新
origin/main的代码、测试和TODO.md,确认功能没有已经实现、已经被替代或已经明确不做。 - 如果发现重叠 PR,优先在已有 PR 上协作、补充或重新基于最新主线接续;未经维护者明确决定,不得再创建一个功能相同的 PR。PR 描述必须列出查重结果和相关 PR 链接。
- 明确本次功能的用户目标、范围、不做事项、受影响模块、兼容边界和验证方式。一个 PR 只承载一个可独立审查的功能,不得混入无关重构、清理或其他功能。
推荐使用以下命令完成基础查重:
git fetch origin main
git rev-parse origin/main
gh pr list --state open --limit 200G-MAIN.reference=BRANCH_MANAGEMENT.md
- 分支、worktree、提交、PR 目标和 Hotfix 例外必须遵守
BRANCH_MANAGEMENT.md。普通新功能 PR 的目标分支只能是main。 - 开发开始时必须基于最新
origin/main。创建 PR 前再次 fetch;如果主线前进,检查新增 diff、冲突及共享依赖影响。存在相关变化时同步主线并重新运行受影响验证;无关且无冲突时,记录最新 SHA 和判断依据即可。发布仍锁定精确主线。 - 不得用旧分支整体覆盖主线,也不得为了减少冲突绕过当前架构、测试或产品规范。
- PR 合入前必须确认变更仍然只包含本功能,并且没有夹带其他 worktree 或用户未提交的修改。
- 使用当前主线已有架构和模式,只增加完成该功能所必需的代码、测试、日志、文档和资源;不得进行投机性抽象或顺手重构。
- 不允许读取、解析、解密、复制或依赖任何第三方 App 的私有文件、数据库、沙盒容器、历史记录、私有运行库、私有协议或未公开数据格式。用户授权、签名包、Helper、测试环境和本机可访问都不能放宽此边界。
- 第三方 App 集成只能使用公开 API、公开协议、用户可见的辅助功能界面或用户明确选择的文件。无法通过公开边界实现时,应停止该方案并在 PR 中说明,而不是增加绕过路径。
- 新增或修改功能必须遵守
LOGGING.md,日志覆盖从请求入口到最终用户结果的完整链路,并保持脱敏、可关联、可去重和可归因。 - 检查
TODO.md是否有对应项目;只有功能实现并完成相应验证后,才能在同一 PR 中更新为完成。 - 面向用户的全新功能必须在
Testing/下新增或更新测试手册。涉及硬件时还必须遵守Testing/HardwareCompatibilityContract.md;涉及 Onboarding 时必须遵守feature/first-run-onboarding/PRODUCT_SPEC.md及其平台附件。 - 修改共享协议、持久化、音频、HID、按键或 Feature Flag 时,必须验证旧版本、默认关闭、异常恢复及稳定主路径,不得用开关默认关闭代替回归验证。
只要新功能新增或修改用户可见页面、面板、窗口、状态卡、导航、控件、文案布局或交互状态,PR 描述或评论中就必须附带实际运行截图。没有截图的 UI 新功能 PR 不得进入合入评审。
截图必须满足以下要求:
- 来自本次 Commit 构建的生产 UI 和真实运行页面,不得使用设计稿、重绘图、仅截代码、孤立的替代视图或“已经检查通过”的文字声明代替。
- 覆盖所有受影响页面和关键状态,至少包含中文浅色与中文深色;英文或其他语言会改变布局时,也必须覆盖对应语言。
- 在产品默认窗口尺寸和最小支持尺寸下验证;使用 screenshot harness 的压力截图必须与真实窗口运行截图分开标注。
- 在 PR 中标明截图对应的 Commit、App 版本或构建、窗口尺寸、外观和生成方式,并直接附为 GitHub 可访问的图片或持久化证据链接。只提供他人无法访问的本地路径不算完成。
- 截图、设计稿和界面录制的图片字节不进入版本控制;需要长期留档时,按
AGENTS.md的「截图与设计稿归档规范」在Screenshots/<batch>/manifest.json记录索引、尺寸、SHA-256 和外部 URL。向Screenshots/、Design/等非构建位置新增位图或视频会被Repository governance直接拒绝。 - 截图不得包含用户内容、个人信息、设备身份、路径、凭据或第三方 App 私有状态,应使用脱敏测试数据。
- 截图只能证明静态 UI。真实硬件、系统权限、音频、前后台状态和第三方 App 行为仍须按测试手册验证,并在 PR 中明确未覆盖边界。
- Onboarding 变更按
AGENTS.md的风险分类和生产清单执行专项回归;流程或共享布局变化仍要求完整页面截图,不能以局部截图替代。
- 自动化测试必须覆盖核心成功路径,以及受影响的失败、取消、超时、重试和恢复路径。构建通过不能替代功能验证。
- 涉及真实遥控器、蓝牙、音频、系统权限或第三方 App 的功能,必须分别说明自动化、本机代理和用户实测的结果;没有实机证据时只能标记为待验证或候选。
- macOS 本地运行
swift build、swift test或swift package resolve时必须传入--disable-keychain。 - 提交前至少执行与变更相称的测试、
git diff --check和 Markdown 链接检查。不得把测试未运行写成通过。
G-CI.reference=BRANCH_MANAGEMENT.md
新功能 PR 必须使用 PR 提交模板,并在描述中包含:
- 用户问题、功能目标、范围和明确不做事项。
- 开发起点的
origin/main完整 SHA,以及提交前再次检查主线的结果和同步决定。 - Open PR 查重结果、检索日期和所有相关 PR 链接。
- 修改的模块和每个文件存在的必要性。
- 自动化、构建、日志、截图、真实设备和第三方流程的验证结果与边界。
- 兼容性、隐私、数据迁移、回滚和已知风险。
- UI 变更对应的实际运行截图;没有 UI 变更时明确写明不适用。
适用的本地验证未完成、截图未补齐或必要真实环境仍在等待时,PR 必须保持 Draft。只有 CI 结果或等待被用户明确豁免时,按 BRANCH_MANAGEMENT.md 的“用户明确授权的 CI 例外”执行,其他门禁不变。CI 全部通过不代表满足本规范;维护者仍需核对查重、隐私边界、实际截图和真实环境证据。
- 功能从最新
origin/main开始,提交 PR 前已检查最新主线,并按影响决定同步和验证。 - 已扫描全部 Open PR 的标题和标签,并详细检查相关候选,记录筛选依据和相关链接。
- PR 只包含一个新功能和直接必要的修改。
- 未读取或依赖任何第三方 App 的私有文件、数据或协议。
- 已同步必要的日志、测试手册、
TODO.md和专项产品规范。 - UI 变更已在 PR 附件或持久链接中附实际运行截图,并覆盖必要语言、外观、尺寸和状态。
- 未向仓库提交截图、设计稿或界面录制的图片字节;需要留档时只新增
manifest.json索引。 - 已区分自动化结果、截图证据、代理实测和真实用户/硬件验收边界。
- PR 描述已完整填写,未完成项目保持 Draft,目标分支为
main。