shun 0.2.13

Flow-driven payload delivery runtime — installers, flashers, and portable modes
Documentation
# AGENTS.md — Shun Repository Rules for AI Agents

> 本文件改编自 Celestia 工作区规则(沿 shun-integration / wowsp 仓库的
> AGENTS.md 版式),只保留适用于本仓库(celestia-island/shun)的规则,并
> 记录了针对性调整(见 §9)。所有在本仓库工作的 AI agent / subagent
> **必须**遵守本文件。工作区级文件中的真实凭据与内网信息**永远不会**被
> 复制进本仓库(红线见 §6)。

---

## 1. Commit Message Format

```
<gitmoji> <Capitalized English summary ending with period.>
```

- 必须以一个 gitmoji 开头。白名单 = gitmoji.dev 完整规范集 + 组织增补
  (🔗 sync/copilot、🔄 sync/refresh、📜 license、🛡️ shield)。常用:
  ✨ 🐛 🔧 ♻️ 🔥 📝 🎨 ✅ 🚀 🌐 ⬆️ 🎉 📦。
  **权威实现是共享的 celestia-devtools commit-msg-lint**(CI 里的
  Commit Message Lint 工作流调用它);白名单以该实现为准。
- 摘要为英文、首字母大写、以 `.` 结尾;**禁止 CJK 字符**。
- **禁止 Conventional Commits 前缀**(`feat:` / `fix:` 等)——emoji 本身
  就是类型标记;也**禁止冒号前缀句式**(`Topic: details`)。详细背景写进
  commit BODY(空行 + bullet),绝不写进摘要行。
- 禁止以裸版本号或填充短语开头(`v1.2.3` / `Bump version`)。
- **禁止 merge commit subject**(`Merge branch ...` / `Merge pull
  request ...`):本仓只使用 squash merge。
- 豁免:`Revert "..."`(git revert 产物);dependabot 等机器人的 subject。
- **PR 标题遵循完全相同的规则**(squash 后它就是 commit subject)。

## 2. CHANGELOG Policy(强制)

- **任何情况下不在仓库里维护 CHANGELOG / WHATSNEW / 修订历史文件。**
  合并的 PR 就是 changelog:squash commit(gitmoji + 一句话摘要)+ PR
  描述构成完整变更史,任意粒度用 `git log` 过滤即可。
- Release notes 写在 **git tag + GitHub Releases** 页面,绝不落在被跟踪
  的文件里。仓库里已不存在这类文件,不要新建;发现遗留的随触及它的 PR
  一并移除。

## 3. PR Workflow

每个阶段的工作必须遵循以下模式:

1. **从 master 切出 feature 分支**(`feat/<name>`,缺陷修复用
   `fix/<name>`)。有并行任务时用独立 `git worktree`。
2. **3 轮验证循环**:分析 → 改进 → 验证,重复三轮;**任何一轮失败,
   从零重新计数。**
3. 以 gitmoji 格式 **commit**。
4. **push** 分支。
5. 用 `gh pr create` **创建 PR**(标题遵循 §1;只在被要求或已批准的
   工作流步骤里开 PR,不要为琐碎变更单独开 PR——PR 号是有限资源,一个
   PR 打包一批可合并的功能)。
6. **squash merge**(满足 §5 门槛可自主合并):subject 变为
   `<gitmoji> Summary. (#PRID)`。
7. 合并后**删除** feature 分支。

## 4. Branch Naming & Git Push Rules

- `master` — 生产分支。**只接受 squash merge 的 PR**,禁止直推;紧急
  修复走 `fix/<name>` 分支 + PR。
- `feat/<name>` — 新功能;`fix/<name>` — 缺陷修复;`chore/<name>` —
  维护;`refactor/<name>` — 无行为变化的重构。
- **`dev` — 已废弃,不要使用**(不要创建,也不要往它推送)。
- **禁止裸 `git push --force`**;feature 分支上的 rebase/amend 恢复一律
  优先 `git push --force-with-lease`,被拒时先 fetch 审查双方提交,拿不准
  就问用户。**master 上任何形式的 force push 绝对禁止。**

## 5. Merge & Release Rules

- **满足以下全部条件即可自主合并 PR**(无需逐 PR 人工确认):
  1. 消息合规(§1);
  2. 检查门槛:**代码级失败**(编译 / 测试 / clippy / fmt)必须修复,
     绝不带病合并;**环境性失败**(runner 抖动等)记录到 PR 并经本地
     验证通过后可豁免;
  3. PR 节约(§3.5)。
- **版本号随主 PR 走**:改版本就在功能 PR 里一并 bump(根 `Cargo.toml`
  的 `[package]` version 与 `[workspace.package]` version 两处),**不要**
  单独开纯 bump PR(除非用户明确要求)。
- **发布**:master 上以 `🔖 Release vX.Y.Z.` 提交后打 `v*` 标签推送——
  `release.yml` 出平台产物、`publish.yml` 发 crates.io(tag 必须在
  master 上)。发布前确认本地 `just ci` 全绿。

## 6. 敏感信息红线(强制,违反视为事故)

1. **禁止把任何真实密码 / 密钥 / token / 内网 IP 写进 git 树**(任何
   分支、任何文件,包括注释、示例、默认值、测试数据、README、docs)。
2. 需要密码时用环境变量 / 不入库的配置文件,或占位符;示例 IP 一律用
   RFC 5737 文档地址,示例值用明显假值。
3. 提交前自查:涉及配置 / 脚本 / 示例数据的改动,grep 一遍
   `password|secret|token|api_key` 确认无真实值。
4. 泄漏处置:立即删除 → 评估泄漏面 → 报告用户;**无论是否重写,凭据
   视为已公开,必须轮换**。

## 7. Build & Test

- Rust:`cargo fmt` / `cargo clippy` / `cargo test`(仓库封装
  `just fmt` / `just clippy` / `just test`,一键 `just ci`)。
- Web 壳前端:`shell/web` 下 `pnpm build`(改动前端源码后必须重建
  `dist/` 并一并提交——运行时嵌入的是构建产物)。
- 主要开发在 Windows 上进行;CI 的完整检查也是 windows runner
  (linux 只跑 lib)。shell crate 只在 Windows 编译其注册后端,
  Linux/macOS 侧代码靠 CI 的 ubuntu 任务与共享纯函数测试覆盖。
- **文档八语言同步**:改了 `docs/en/` 下的指南 / README,同一改动要
  同步到 es / fr / ja / ko / ru / zh-Hans / zh-Hant 对应文件;设计笔记
  (design/)按惯例只维护 en + zh-Hans。
- **跨仓依赖**:hikari 走 npm 发布包 `@celestia-island/hikari`,不要
  引入指向本机目录的 path 依赖。

## 8. CI 使用策略

1. **CI 是参考不是门禁**:合并前看一眼有没有**代码级失败**;环境性失败
   记录到 PR 即可豁免(§5.2)。**不要长时间盯 CI**——排队或挂起超过
   ~15 分钟按环境性处理。
2. CI 结构(`.github/workflows/`):
   - `checks.yml` — fmt + clippy + test:windows 全量,ubuntu 仅 lib;
   - `commit-msg-lint.yml` / `pr-title-check.yml` — 共享
     celestia-devtools 校验(§1);
   - `release.yml` / `publish.yml` — `v*` 标签触发的产物构建与
     crates.io 发布(publish 要求 tag 在 master 上)。
3. 同 PR 反复 push 触发的旧 run 可 `gh run cancel <id>` 释放配额。

## 9. 与工作区 AGENTS.md 的差异记录

- 节点表 / NFS / worktree 软链 / 部署等基础设施章节不适用——shun 是
  本地 Windows 开发 + GitHub Actions 托管 CI。
- 大文件下载纪律(工作区 §9)在此不涉及(shun 无模型 / 大资源拉取),
  保留常识:>5GB 下载先报量确认。
- shun 特有:文档八语言同步义务(§7)、web dist 随源码提交(§7)、
  发布走 tag 触发双工作流(§5)。