#!/usr/bin/env node /** * patch-r1-batch-checkpoint-rule.js · 2026-04-26 * * R1: 批量任务切片 + 增量 checkpoint 规则注入 CLAUDE.md §上下文管理 * 触发场景: >5 个独立子项的 Write/Edit/Bash 批量操作 * 收益: context 增长从 O(N) 降到 O(N/3), 中断可从 .bookworm-progress.md 恢复 * * 幂等: sentinel "批量任务切片" */ 'use strict'; const fs = require('fs'); const path = require('path'); const TARGET = path.join(__dirname, '..', '..', 'CLAUDE.md'); const SENTINEL = '批量任务切片'; const OLD_LINE = '- Compact at 60% context usage, do not wait until critical'; const NEW_LINES = `- Compact at 60% context usage, do not wait until critical - **批量任务切片**(>5 个独立子项的 Write/Edit/Bash 操作):每 3 项为一批,每批结束后 (a) 追加进度到 \`/.bookworm-progress.md\` (格式 \`YYYY-MM-DDTHH:mm | batch N/M | desc\`);(b) 仅回复一行 \`[batch N/M ✓ desc]\`,不复述生成内容;中断后从 progress 文件恢复`; function main() { const src = fs.readFileSync(TARGET, 'utf8'); if (src.includes(SENTINEL)) { console.log('[r1] already applied, skip'); return; } if (!src.includes(OLD_LINE)) { console.error('[r1] anchor line not found, manual review needed'); process.exit(1); } const next = src.replace(OLD_LINE, NEW_LINES); const bak = TARGET + '.bak.r1.' + Date.now(); fs.copyFileSync(TARGET, bak); const tmp = TARGET + '.tmp.' + process.pid; fs.writeFileSync(tmp, next, 'utf8'); fs.renameSync(tmp, TARGET); console.log('[r1] OK, bak:', path.basename(bak)); } main();