Govern task context and advance execution pointer
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-20 06:02:43 -04:00
parent 380cbed4ff
commit 10640aeb3c
984 changed files with 543475 additions and 327 deletions

121
docs/CONTEXT_GOVERNANCE.md Normal file
View File

@@ -0,0 +1,121 @@
# 上下文治理契约
更新时间2026-08-19America/New_York
本契约解决两个问题:执行者不需要读完整路线图就能继续工作;任何任务卡、交接状态或机器索引
变大、漂移或重复指针时,自动门禁会在领取前失败。它是执行规则,不是项目进度表。
## 一、事实分层
每个问题只由一个层级回答,层级之间不互相复制内容:
| 层级 | 唯一职责 | 默认是否读取 |
| --- | --- | --- |
| `EXECUTION_QUEUE.md` | 当前 task、parent manifest、专项命令、全局硬规则 | 是 |
| `tasks/<task>.md` | 一个行为或一个证据变化的输入、边界、验收和回滚 | 是 |
| `tests/golden/<parent>/manifest.json` | parent 状态、artifact hash、运行时、`nextTask` | 是 |
| `docs/status/<parent>.md` | 上一项最小证据摘要和已知风险 | 是 |
| 协议/生产/测试文件 | 任务卡点名的实现事实 | 按需 |
| 长期计划、全量 ledger、历史 status | 背景、审计、归档 | 禁止默认读取 |
冲突优先级固定为:真实命令输出 > manifest/evidence > 任务卡 > 队列文字 > 长期规划和历史日志。
Markdown checkbox 不能覆盖失败命令或 hash 漂移。
## 二、硬预算
预算按 UTF-8 bytes 检查token 用 `ceil(bytes / 4)` 作保守估算。超过任一单项或总预算都不能领取。
| 输入 | 上限 | 约束 |
| --- | ---: | --- |
| 队列 | 4 KiB | 只保留一个当前指针,不保留历史任务表 |
| 任务卡 | 8 KiB | 最多 12 个输入路径、8 条命令;不复制日志 |
| parent manifest | 24 KiB | 只记录必要 artifact最多 32 项 |
| parent status | 6 KiB | 只保留命令、退出码、关键结果、风险和回滚 |
| 四份输入合计 | 3,500 tokens | 由 `contextSizeReport` 和治理门同时检查 |
| catalog 单行 | 2 KiB | 机器随机读取;执行者不得通读 catalog |
生成阶段的证据读取清单另外受 `maxFiles=12``evidenceBytes=8 KiB` 和基础文档扣除后的剩余上下文空间约束。
每个未选路径必须有 `inputSelection.excluded[].reason`,因此校验器不会成为首次发现超大上下文的地方。
全量 `next-task-plan.json`、parity map 和 gap audit 是生成器输入,不是执行上下文。索引保存源
hash 和 catalog offset源 hash、catalog hash 或 offset 损坏时必须重新生成,不能回退读取大计划。
## 三、原子任务粒度
默认“一项任务 = 一个可观察行为或一项独立证据”。以下任一情况出现就拆任务:
- 同时改变 schema、生产消费、浏览器接线和发布证据
- 需要两个互不依赖的 fixture 或两个不同 owner family
- 正例、取消/重复/超限负例无法在同一 focused command 中清楚断言;
- 任务卡需要列出超过 12 个输入或超过 8 条命令;
- 任何一项失败会让另一项仍可安全交付。
复杂能力按适用门拆分,门之间通过 parent manifest 串联:
| 门 | 只交付一件事 | 失败状态 |
| --- | --- | --- |
| C 契约 | schema、稳定 ID、预算、错误边界和 revision 规则 | `in_progress` |
| P 生产 | Main/Worker/App/viewport 的真实消费路径 | `in_progress` |
| N 负例 | 非法、重复、取消、迟到、超限不改变已提交状态 | `in_progress` |
| B 浏览器 | Chromium 真实用户路径和可见结果 | `blocked``in_progress` |
| R 资源 | dispose、重启、save/reopen、OPFS/GPU/内存归零 | `in_progress` |
| E 证据 | focused command、报告、hash manifest、status、回滚 | 通过后才允许下一个 task |
M16 及后续 gap 固定为一 gap 一个 task最小 fixture、desktop/WASM 对比、save/reopen、负例和
manifest 证据必须属于该 gap不要把“完成整个 family”写成一张卡。
## 四、执行生命周期
### 领取
```bash
npm --prefix web run test:context-governance
node tools/web/print-task-context.mjs
node tools/web/check-task-context.mjs
```
只读取打印结果列出的四份文件和任务卡点名的最小实现入口。当前 task 必须等于 parent
manifest 的 `nextTask`;不能从旧 Markdown 编号、完整 plan 或 status 列表推导任务。
### 实施
先确认最小 fixture 和生产入口,再写 focused test/checker。每条验收命令都必须真实运行并记录
退出码协议或测试文件存在不等于生产能力完成。浏览器、CI、验收和发布证据永久仅限 Chromium。
### 成功交接
```bash
node tools/web/check-task-context.mjs --task <task-id> --write
node tools/web/check-context-governance.mjs
```
只提交本任务的实现/测试、fixture、报告、manifest、status 和 `task-context.json`。manifest 必须
绑定所有产物的 SHA-256并且 `nextTask` 是唯一的下一指针;长日志留在构件目录,不复制进 status。
### 失败、阻断和恢复
命令失败、环境缺失、取消、超限、重复、迟到结果或 hash 漂移时保持 `in_progress``blocked`
不得写成功报告、修改 Main revision 或推进 `nextTask`。修复后从同一 parent 重新运行;不要覆盖
parent 证据。任务卡、索引或队列指针不一致时先修复生成证据,再继续实现。
## 五、提交前门禁
提交前至少运行:
```bash
npm --prefix web run test:context-governance
node tools/web/check-task-index.mjs
node tools/web/check-task-context.mjs
git diff --check
```
`check-context-governance` 会检查四份文档预算、任务卡必备章节和失败边界、禁止的长文档引用、
manifest 路径/构件数量、catalog 行边界以及唯一活动 task。门禁失败即停止不通过手工删除输出
或修改 `nextTask` 绕过。
## 六、维护规则
- 新增任务:先更新机器源并运行 `generate-task-index.mjs`,再用 `generate-task-card.mjs --task` 生成短卡;禁止手写 catalog offset。
- 完成任务:先写 manifest/status再用 `check-task-context --write` 生成交接上下文;队列只跟随新 manifest。
- 规则变化:只修改本契约、`CONTEXT_BUDGET.md`、模板和治理测试;长期规划只增加链接,不复制规则。
- 发现重复或过大的历史文档:标记为背景/归档并从默认入口移除,不在任务卡中粘贴摘要。