AGENTS.md@game-client-to-server-reverse/templates · git:20260922.433a736 · 2026-09-22 · sha256 d9ed05b46e35353b

AGENTS.md@game-client-to-server-reverse/templates git:20260922.433a736A

Immutable. This exact content is served forever at /api/v1/blob/d9ed05b46e35353b.

# AGENTS.md —— 工作区 AI 协作契约(模板)

> **用法**:把这份文件放到**项目根目录**,按实际内容替换 `<>` 占位符。
> 它的作用是:**下一个 AI(或人)打开这个工作区时,不需要重新问一遍边界。**
>
> 三个已跑通的成品服务端都在仓库根放了等价文件 —— 这是它们「交接成本低」的关键原因。
> 建议在项目第 0 天就建立,并随项目演进更新。

---

## 项目范围

<一句话说清这是什么。>

- **工作区根目录**:包含 `<server/>`、`<tools/>`、`<docs/>`、`<tests/>` 的目录
- **目标**:<例:客户端 ↔ 自建服务端 互操作性研究与本地部署>
- **目标客户端**:`<包名 / 版本>`
- **本仓库包含**:<服务端源码、工具、文档>
- **本仓库不包含**:<原始安装包、游戏资源、账号数据、密钥 —— 由使用者自备>

---

## 重要边界与合规

- **不提交专有二进制**:原始安装包、美术/音频资源、`build/`、`dist/` 一律 ignore。
- **工具只操作用户提供的原始包**:输出到独立的 `dist/`,不覆盖输入。
- **热更/CDN 隔离**:`<CDN 域名>` 视为**上游**,热更流量与本地业务服务**分开**,不指向局域网。
- **脱敏**:不要硬编码真实用户名、本机绝对路径、私网 IP(用 `127.0.0.1` / `192.168.1.100`)、
  真实凭据或 token。抓包与日志进入文档前先脱敏。
- **非破坏性版本控制**:不要在公共分支上执行 `git reset --hard` 之类破坏性命令。

---

##  目录分区(读 / 写分离)

### 输入与分析目录(**只读**)

```
<input_dir>/        反编译产物 / 解包结果(分析输入,ignore)
<dump_dir>/         SDK dump / 元数据 dump(分析输入,ignore)
<runtime_dir>/      运行时缓存、设备抓取的数据(分析输入,ignore)
```

> **不要修改输入目录里的任何东西**。所有改动发生在输出目录或副本上。

### 产出目录

```
src/ 或 server/     服务端源码
tools/              辅助脚本与工具
docs/               结构化文档(见下方文档规范)
tests/              自动化测试
build/              构建中间产物(ignore)
dist/               最终导出的签名包与摘要(ignore)
data/               数据库、抓包、日志(ignore)
```

---

## 一键入口

```
<入口脚本 1>   启动
<入口脚本 2>   停止
<入口脚本 3>   打包/打补丁
<入口脚本 4>   管理 CLI
```

---

## 代码与编辑规范

- JSON / SQLite / protobuf wire / 包元数据 尽量用**结构化解析器**,不要正则硬切。
- 全仓库使用**相对路径**(代码、脚本、文档链接)。
- 代码标识符与文件路径用 ASCII;文档可写中文。
- **改动协议或状态模型时,必须同步更新 `tests/`**。

---

## 验证命令

```bash
# 从工作区根目录执行
<测试命令>
<编译检查命令>
<端到端冒烟客户端命令>
```

- 服务 A:`<协议/端口>`
- 服务 B:`<协议/端口>`
- 默认测试账号:`<user / password>`

> 注意: 环境权限失败(如回环端口不可用)**不能记作通过** —— 换环境重跑同一条命令。

---

## 证据档位(每个结论都要挂)

- **Confirmed by static analysis** —— 反编译代码 / 协议定义 / 服务端代码直接确认
- **Confirmed by packet capture or runtime observation** —— pcap、重组帧、logcat、运行时数据库确认
- **Inferred and still requiring validation** —— 由前两者推断,仍需实机验证

> 不确定的写 `Inferred`,**不要写「已实现」**。

---

## 文档规范

```
docs/analysis/      逆向与协议分析
docs/implementation/ 服务端实现说明
docs/decisions/     架构决策记录(ADR)
docs/evidence/      实机验收证据
docs/status/        支持矩阵 / 已知问题 / 验收进度
docs/todo/          兼容性清单与验收标准
```

写作纪律:

- **已修复的问题交给版本控制**,不要继续堆在「已知问题」里;
- 「已实现但未验收」必须单列,不能混进「已通过」;
- 每个模块文档末尾都要有「**本模块不包含**」。

---

## AI 工作时必须遵守的 8 条

1. **先规格后代码**:没有 `protocol.spec` / 项目档案 / 证据清单,不要写业务代码。
2. **不确定就标注**,不要猜字段、不要猜枚举语义;不支持的输入 **fail closed**。
3. **改动只在副本上做**,保留原始文件哈希与回滚命令。
4. **声明"通过"必须有产物**(日志、截图、trace、测试输出),不接受口头结论。
5. **一轮只改一个变量**,否则无法归因。
6. **改了配置要重启**(启动期冻结,运行中修改不生效)。
7. **不要为客户端不可能产生的状态**编假想业务流程 —— 标为 `server-boundary` 或待抓包。
8. **离开前更新**:`TRACKER`/支持矩阵、`docs/status/known-issues`、以及本文末尾的「当前环境状态」。

---

## 当前环境状态(每次收工前更新)

```
本地服务端: <未运行 / 运行中 + 端口>
客户端:     <未安装 / 已安装 + 包名 + 是否改包>
已生效的重定向:<无 / uid=N 的 DNAT 规则 / 地址文件>
最近一次验证:<日期 + 结论>
已知未完成:  <条目>
```