Files
edgeever/AGENTS.md
T

72 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md
本文件用于约束和指导参与本项目的 AI 代理与协作者。
## 文档约束
- **技术栈与背景**:优先参考 `README.md`。
- **移动端平台边界**:Android 客户端位于 `apps/mobile`,使用 Expo / React Native 实现;iOS 客户端位于 `apps/ios`,使用 Swift / SwiftUI 原生实现。
- **双语同步**:修改中文文档时必须同步更新对应的英文文档。修改根目录 README 时必须同步 `README.md`、`README.zh-CN.md`、`README.zh-TW.md`、`README.ja.md`、`README.pl-PL.md`。
## 变更风险评估
- **先评估后实现**:动手前说明功能价值、影响范围、最坏后果、回滚方案和未验证项;低价值但可能扰动成熟链路的需求,默认拒绝或提供低风险替代方案。
- **核心链路从严**:安装器、自动升级、数据存储、认证及迁移的机制或配置变化一律按高风险变更处理,必须验证真实的旧版本到新版本链路,不能只验证新版本自身。
- **禁止无依据保证**:未完成对应平台及跨版本验证时,必须明确标注风险,严禁声称“不影响现有用户”或“不影响自动升级”。
## Android 调测约束
- **USB 真机优先**:Android 功能调测必须使用通过 USB 连接的真实设备和 `adb`,不得启动或使用 QEMU、AVD 等 Android 模拟器;未连接可用真机时,明确标注真机验证未完成,不得以模拟器结果替代。
## GitHub 沟通语言
- 回复 Issue、PR 或提交 PR Review(含行内审查意见)时,使用对方正文或当前讨论的主要语言:英文用英文回复,中文用中文回复。
- 对方明确指定沟通语言时,遵循其要求;中英混合或无法判断时,默认使用英文。
- 不得因与仓库维护者的本地对话使用中文,就在英文 Issue 或 PR 中使用中文回复。
## GitHub Actions 与 Release 约束及流程
1. **Fork 工作流边界**:配置 GitHub Actions 时必须考虑大量用户会 Fork 仓库进行自部署;仅官方仓库需要的 Job 必须使用 `github.repository == 'tianma-if/edgeever'` 门禁,严禁在下游 Fork 中分配 Runner 或执行。
2. **版本号与基线**:`vX.Y.Z`(非 Draft/Prerelease)。发布须显式 `--bump patch|minor|major`(脚本不自动选级);按 SemVer 选择,**禁止因发版节奏把用户可感知的新能力或新平台压成 patch**。递增根目录 `package.json`;含移动端修改时同步 `apps/mobile/app.json` 的 `expo.version` 并递增 `android.versionCode`。上一个正式 Release 为审计基线。
3. **跨平台 Release 资产**:每个正式 Release 页面必须同时包含 macOS arm64 DMG、macOS x64 DMG、Windows x64 Preview 安装包、Linux x64 AppImage Preview 和 Android arm64 APK。Windows Preview 未使用 Authenticode 签名时必须同时提供经仓库外 Ed25519 私钥签名的更新清单;Linux Preview 必须包含 `latest-linux.yml` 更新元数据和独立 SHA-256 清单;两者均须在发布前通过独立下载与摘要审计。若本次未修改对应原生运行时代码、依赖、配置或构建工具,直接复用上一个正式 Release 中已验证的原始资产,保留原文件名与校验和,禁止仅为匹配新版本号而重命名。官方仓库正式 Release 中的 Android APK 必须使用固定的 Google Play 应用签名证书;本地上传证书签名的 APK 只能作为 Draft 临时资产,未经 Play 签名替换和发布前门禁核验不得公开。
4. **验证命令**:必须通过 `bun run typecheck`、`bun run typecheck:mobile` 和 `bun run build:web`。
5. **测试职责边界**:正式 Release 必须先在官方仓库及与下游一致的 Ubuntu 环境通过完整非 E2E 测试,严禁将上游自身的测试失败转嫁给下游 Fork 发现。只读部署 Fork 仅同步产品快照且不运行测试;只有显式保留定制改动的 Fork 才验证合并结果,失败时必须保持 `main` 与生产环境不变。
6. **原生资产构建与复用**:由 `scripts/plan-native-release.mjs` 决定重建或复用;桌面资产包含 `apps/web`。修改判定规则时同步更新测试。移动端重建使用 `bun run build:android:apk:local`,签名配置保存在仓库外。
7. **Draft 内准备资产**:通过带 `release_tag` 的 `workflow_dispatch` 在 Draft 中准备并验证资产;Android 重建时须在 Draft 阶段完成 Google Play 交付、用 Play 签名 APK 替换临时资产并通过独立签名门禁;`published` 事件只审计,禁止重新构建或上传,签名不符时恢复 Draft。
8. **桌面验证职责**:桌面 Release 工作流负责测试、包结构检查、签名与公证;代理不再重复下载 Draft 或执行本地首次启动验收,除非用户明确要求。
9. **发布后更新**:正式发布后,发布流程默认不得下载、覆盖安装或启动 `/Applications/EdgeEver.app`;已安装的 macOS、Windows 与 Linux 桌面端通过应用内自动更新机制获取新版,其中 Linux Preview 必须在 Draft 阶段通过真实 AppImage 跨版本更新门禁。仅在用户明确要求时使用 `--install-desktop` 执行原有安装验收,功能体验由用户在实际使用中验证。
10. **失败处理**:Release 阻塞工作流或资产审计失败时保持或恢复 Draft,修复后重跑;不得公开已知损坏的 Release。GHCR 镜像属于阻塞门禁;腾讯云 TCR 公共镜像由独立工作流在正式发布后异步同步和审计,其耗时或失败不得阻塞 GitHub Release 或将已发布版本恢复为 Draft。
11. **Release 说明结构**:使用中英文双语格式(正文禁止包含字面量 `\n`),只写用户可感知的变化、影响以及必要的升级或迁移提醒。类型检查、构建命令、签名、公证、资产复用等技术验证细节保留在 Actions 和关联 Issue 中,不写入公开 Release 正文。功能/修复关联对应 Issue 并标记 Label,发布后回链并关闭 Issue。正文结构:
```md
## 主要更新
- 面向用户说明本次变化及影响。
关联 Issue:#<issue-number>
## Key Changes
- User-facing summary of changes in English.
Related Issue: #<issue-number>
```
12. **外部贡献者署名**:维护者本人无需署名;外部贡献逐条注明账号与 PR,或集中致谢。正文名单不重复列名,保留 GitHub 原生 Contributors 头像区。参数用法见 `docs/release.zh-CN.md` / `docs/release.md`。
## 环境、部署与组件约束
- **Cloudflare 部署**:严格按 `docs/agent-deploy-cloudflare.md` 执行。
- **跨运行时架构**:项目未来将正式支持 Docker 自托管;实现新功能时必须保持业务逻辑与 Cloudflare 解耦,并为其他运行时预留扩展边界。Cloudflare 与 Docker 必须共用同一套业务代码,仅允许保留薄且稳定、不包含业务判断的运行入口和基础设施驱动适配器。
- **数据库 Migration**:数据库或种子变化时,在 `migrations/` 下新增递增编号 SQL,禁止修改已执行的旧 Migration。
- **本地启动**:默认 `bun run dev`(纯本地环境)。用户要求“启动/重启 Web 端”时,默认含 Web 与 API,必须使用 `bun run dev`;只有用户明确要求“纯前端”或明确指定 `dev:web` 时,才使用 `bun run dev:web`。指定远程实例用 `EDGE_EVER_INSTANCE=<实例名> bun run dev:remote`。
- **Demo 示例同步**:修改示例笔记后,在 `main` 分支干净状态下执行 `bun run demo:sync` 重置公开 Demo。
- **禁止重复造轮子**:严禁重复实现已有成熟方案;优先采用维护活跃、广泛验证的开源组件与依赖,并优先复用 `shadcn/ui`;复杂或重复模块封装为独立组件。
- UI和交互的原则是,产品始终表现得可靠、可预测、确定、被接住。
- **悬停提示**:所有悬停或聚焦提示严禁使用 HTML 原生 `title`;Web 端必须统一使用 shadcn/ui 的 Tooltip 组件,并确保键盘聚焦时同样可见。
## 品牌视觉规范 / Brand Identity
- **品牌色**:复用现有的 UI 黑灰配色,Logo 图形色 `#07130B`。
- 修改 Logo 后执行 `bun run prepare:brand:icons` 同步各平台资源。