Skip to content

Commit 7bd8300

Browse files
committed
docs(standards): 钉死行数测量口径
口径唯一有效 = 全部行数,以 [System.IO.File]::ReadAllLines(path, UTF8).Count 为准(即 scripts/line-limits.mjs 的 countLines())。 明确禁用三种做法,各有实测依据: - Get-Content:本机 PowerShell 5.1 + 码页 gb2312 按 GBK 解码 UTF-8,吞换行,最多少算 45 行/文件 - Measure-Object -Line:只数非空行(既有豁免登记值出自它) - 字节 0x0A 计数:对末尾不带换行的文件会少算 1(本仓实测 8 个这样的源文件,含 NotesPage.tsx 602/601) 改动仅 3 处 hunk / 2 文件,原铁律语义未动。
1 parent a4aaead commit 7bd8300

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

‎AGENTS.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
生成/重构任何代码必须同时满足:
3939

4040
1. **模块化**:单文件 ≤300 行(>600 行必须硬拆;300-600 行登记豁免清单);纯逻辑与副作用物理分离;显式依赖注入。
41+
**行数口径(唯一有效)**:文件**全部行数**(含空行),以 `[System.IO.File]::ReadAllLines(path, UTF8).Count` 为准 —— 即 `scripts/line-limits.mjs` 的 `countLines()`。
42+
⚠️ **不要用**:`Get-Content`(本机 PowerShell 5.1 + 码页 `gb2312` 会按 GBK 解码、吞换行、**少算最多 45 行**)· `Measure-Object -Line`(**只数非空行**)· **字节 `0x0A` 计数**(对**末尾不带换行**的文件会少算 1;本仓实测有 8 个这样的源文件,含 `NotesPage.tsx`)。
43+
判定一律以 `node scripts/line-limits.mjs` 为准。
4144
2. **强类型契约**:业务术语贯穿全栈;禁止 `any`/无类型;入参出参必须定义类型(TS interface / Rust struct)。
4245
3. **上下文注释**:注释解释 Why 不解释 What;公共函数/模块必须含 `@ai-context` 业务背景注释;标注副作用与边界条件;Magic Number/Hack 必须说明原因。
4346
4. **防御性编程**:网络/DB/AI/系统调用必须有超时、重试、降级(Fallback);本地优先架构下所有云端能力必须有本地兜底路径。
@@ -118,6 +121,6 @@ npm run build # 前端构建
118121

119122
- 提交信息遵循 Conventional Commits;版本号由第一阶段起手动维护 SemVer
120123
- AI 功能必须支持离线降级(本地优先原则)
121-
- 单文件 ≤300 行;源码文件含 `@ai-context` 业务背景注释
124+
- 单文件 ≤300 行(口径同上,以 `node scripts/line-limits.mjs` 为准);源码文件含 `@ai-context` 业务背景注释
122125
- 重构/拆分遵循自底向上(原子→业务→系统),公共 API 保持兼容
123126
- 任何技术栈/架构级变更先写 ADR(`docs/adr/`)再动手

‎docs/standards/refactoring.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,6 @@
159159

160160
本文档的通用重构手法在本项目受以下硬性约束(详见 [ai-coding.md](./ai-coding.md) 第二部分):
161161

162-
- **§1 单文件 ≤300 行**:"过大类/文件"坏味道在本项目有明确阈值——>600 行必须硬拆;300-600 行登记豁免清单待专项重构
162+
- **§1 单文件 ≤300 行**:"过大类/文件"坏味道在本项目有明确阈值——>600 行必须硬拆;300-600 行登记豁免清单。行数口径见 AGENTS.md §3.1(全部行数,以 `node scripts/line-limits.mjs` 为准)
163163
- **§6 自底向上重构顺序**:拆分遵循 原子层(纯函数/类型)→ 业务层(hook/service)→ 系统层(页面/装配);公共 API 保持零改动(兼容 re-export)
164164
- **已验证拆分模式**:React 页面 → 纯展示组件 + 域 hook + 组合层;Python 巨型模块 → 包化 + Mixin + schemas 提取;Go 巨型 handler → 同包多文件职责拆分

0 commit comments

Comments
 (0)