Files
DevFlow/docs/02-架构设计/专项设计/并行化与异步唤醒-设计-2026-10-04.md
T

337 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 并行化与异步唤醒 — 能力设计
> 创建: 2026-10-04 | 定位: 能力建设批(非缺陷修复)。两条已实证的能力边界:①写并行缺位+同文件写竞态隐患 ②无异步唤醒原语(挂起即等人)
> 关联: 跨进程任务接力-设计(M1 接力棒/wake 对接)/无人值守长任务-设计(continuum/租约)/飞书直连通道(外部唤醒源)
## 一、能力 1:写并行化(risk × 路径租约二维分组)
### 1.1 现状与缺口
工具批执行按 risk 单维分组:Low 并行(join_all),Medium 逐个审批/串行,boundary 会话 Medium 旁路后并入并行向量。三个缺口:
1. **潜在竞态(顺带修复)**:boundary/auto 会话同轮两个 patch 同一文件→旁路后并行执行→写竞态(实证可能:LLM 同轮多次编辑同文件常见);
2. **非 boundary 会话写类纯串行**:多文件重构任务(今日主场景)单轮写吞吐受限;
3. **分组器无资源维度**:risk 之外,「是否同一路径」这一冲突维度未建模。
### 1.2 设计:二维分组器
- 分组三档:**纯读类**→并行(上限沿用 8);**写类按规范路径分片**→异路径并行、同路径按 LLM 发出顺序串行(路径经 canonicalize 归一,与 boundary 白名单同款归一口径);**High**→逐个审批不变。
- boundary/auto 旁路逻辑不变,旁路后的写类再按路径分片;非 boundary 会话维持逐个审批(用户逐个拍板语义不倒退)。
- 顺带消解 1.1-1 竞态:同路径强制串行即修复。
- 实现:单点在 audit 的 process_tool_calls 批分组器;写类路径冲突判定抽纯函数+单测(双 patch 同文件/异文件/读写混合三态)。
### 1.3 五项自评
兼容(零 schema)/破坏(同路径保序显式化=消竞态,是修复非破坏)/安全(写面与审批面均不扩)/资源(进程内并发写不同文件安全)/回退(分组器单点开关,默认随 auto/boundary 开)。
## 二、能力 2:wake 异步唤醒原语
### 2.1 模型
挂起任务登记唤醒条件,条件满足自动唤醒注入续跑——「挂起」与「等人」解耦。
- **WakeRegistry**(首期进程内存,随 app 存亡;宁少勿预留不落库):条目={conv_id, condition, payload, created_at, expires_at, once=true}
- **条件三型(首期)**:delay(延时到)/file-appear(文件出现,接力棒 result.json 场景)/process-exit(进程退出,自换装场景)
- **唤醒动作**:向目标会话注入一条 user 角色消息(复用 a5 换向注入路径+force_send 语义,过 generating guard/epoch 守卫),内容=唤醒上下文人话;注入即从当前会话状态续跑
- **防重**:once 语义+expires 过期清理(默认 24h);注册表上限 64
### 2.2 三源对接(唤醒源不新增机制)
| 唤醒源 | 对接方式 |
|---|---|
| 接力棒脚本(M1) | 脚本完成写 result.json → file-appear 唤醒 |
| 飞书直连通道 | 用户消息到达 → 直接注入(不经 registry,即时唤醒) |
| app 内调度器 | delay 型 tick 检查(复用既有定时模式) |
### 2.3 五项自评
兼容(零 schema,首期内存)/破坏(无既有语义变更)/安全(注入走既有 guard;外部源经飞书白名单;registry 本地条件无远程面)/资源(64 上限+24h 过期)/回退(随接力棒 M1 开关,未开关时 registry 不启用)。
## 三、分期
- W-a: 写并行二维分组器(独立交付,含同文件竞态修复)
- W-b: wake 原语核心(三条件+注入续跑)
- W-c: 与 M1/飞书通道对接(依赖各方落地)
## 四、拍板点
1. 写并行默认开(仅 auto/boundary 会话)还是全局?建议:仅 auto/boundary,普通会话维持逐个审批,观测一版再放宽。
2. wake 注入消息形态:user 角色(对齐 a5,落库可见)还是 system(静默)?建议 user,审计可见。
3. registry 首期内存态(重启即失)可接受?建议可接受——唤醒条件本就依附 app 存续,接力棒场景由进程外脚本兜底。
## 五、明确不做
- 不做跨设备唤醒分发;不做条件表达式引擎(三型够用,复杂条件=任务书职责);不做并行度动态调优(常量起步,实测再调)。
## 六、续接与主动性(下一阶能力,2026-10-04 深夜分析)
### 6.1 续接能力现状与根修
| 场景 | 现状 | 根修 |
|---|---|---|
| 同 loop 断流/失败 | ✅ 跨轮重入退避(P1 已修) | — |
| 停靠后续接 | ✅ 人工(点继续/重发);a5 落地后先自动换向×2 | — |
| 进程重启后 | ❌ 任务静默失踪(落库稀疏:225 轮存 2 条) | **continuum 任务连续体**(M2/W4 批,V46 轮级持久化) |
| 换装/进程死亡 | ❌ 无恢复入口 | **M1 接力棒**(result.json+file-appear 唤醒=6.2) |
| 长会话上下文 | ✅ 视图压缩续接(今日已修 memo/豁免) | — |
缺口本质=「执行续点」不持久+「进程级恢复」缺位。根修两件均设计已备(W4 批与 M1),不新增立项。
### 6.2 主动性能力分层与根修
主动性四层:反应性(✅ 响应指令)→自愈性(a5 ✅ 在飞)→**前瞻性(缺)**→**目标驱动持续性(缺)**。
根修=wake 原语的首个应用场景「**空闲自领**」(不新立大设计):
- 空闲检测(无活跃 loop+无 pending)→ delay 型 wake 唤醒 → 查 todo 板按优先级领任务 → 领单纪律(已注入的纪律段覆盖「修复必销账」)→ 完成回写
- **边界约束(要害)**:自领任务默认限 Low 风险档+白名单目录,Medium 以上仍需人工——主动性≠放权,是边界内自主(对齐无人值守 TaskBoundary 信任分级)
- 治理环联动:自领行为全量进监控 history.jsonl,自领质量纳入 S 阶升级判据
- 拍板点(新增 4):①自领默认开还是白名单会话(建议后者起步)②自领频率(建议空闲后 30 分钟延迟触发)③自领范围(todo 板确定性条目 only,设计先行类不领)④自领产出是否推送飞书(建议是,对齐治理环)
### 6.3 挂机模式(2026-10-04 深夜用户拍板:自领/自推进/自拆解/自设计)
W-d 空闲自领的完全体:agent 在边界内持续自主运转,人只做拍板与验收。
**核心循环**: 空闲检测(delay wake)→ 领单(todo 板按优先级)→ 分类(确定性条目直推/设计先行类先自设计)→ 自拆解(大任务切子批,文件零交集矩阵)→ 自推进(边界内执行,熔断走 a5 自愈)→ 自验证(门禁三件套)→ 自销账(板回写+核验语)→ 间隔 → 循环。
**约束框架(防失控四闸)**:
1. 边界闸: 挂机会话=boundary 会话(auto_exec+risk_ceiling+白名单目录),High 风险(部署/push/删除)一律挂起等拍板
2. 预算闸: 复用 TaskBudget 三值(挂机时长/单任务轮次/总 token),耗尽→停靠+飞书通知(不无限空转)
3. 自愈闸: 执行中熔断走 a5 换向×2;挂机内换向耗尽→跳过该任务领下一个(不死磕单点),同一任务两次挂机失败进「待人工」清单
4. 治理闸: 全程进 history.jsonl;每日挂机报告(领了几单/完成几单/返工率/消耗)→飞书
**与既建机制的组合**(零新基建,全是既有件循环化): wake(循环驱动)/a5(执行自愈)/continuum(续点)/boundary(边界)/TaskBudget(预算)/监控 history(治理)/飞书(通知与远程指令)。
**分期**:
- W-d1 挂机循环骨架(领单→执行→销账,确定性条目 only)
- W-d2 自拆解+自设计(设计先行类:先出设计稿落 docs→登记→作为后续实施批自领;编码类大任务切子批)
- W-d3 治理强化(预算闸/挂机报告/待人工清单)
**拍板点(挂机版,覆盖 6.2 的 4 项)**:
1. 挂机开关形态: 托盘一键+设置页(建议双入口)
2. 挂机时段: 全天 or 夜间档(初衷图既有「夜间额度高宜批量推进」设想,建议可配,默认全天)
3. 任务范围: 确定性条目 W-d1 起步;设计类 W-d2 起(自设计产出稿仍挂「待拍板」不直接实施,人工审后自动领实施)
4. 失败升级路径: 两次挂机失败→待人工清单+飞书(建议是)
### 6.3.1 续接能力并入挂机(2026-10-04 深夜 [补1] 用户令)
挂机跑长时段(尤其过夜),进程重启/崩溃/换装必须能续——**续接是挂机的命门,不是附加项**:
- **挂机状态持久化**: 挂机会话登记为 continuum 条目(挂机上下文=当前任务/子批进度/预算消耗/待人工清单);W-d1 首版用轻量挂机状态文件(挂机目录 JSON,对齐接力棒 result.json 模式),M2 continuum 落地后升级
- **重启自动续**: 启动扫描发现「挂机中」状态→自动恢复循环(挂机=显式完全信任档,重启自动续符合语义;区别于普通任务的「重启不自动续」,开关=挂机开关本身)
- **断点任务续跑**: 单任务中断从 continuum 续点恢复(不重放已落库轮次);W-d1 首版退化为「重启后该任务重领,已完成部分靠销账标记去重」——销账纪律(已注入)在此兜底
- **换装特殊流**: 挂机中自带换装(接力棒场景)→换装后 file-appear 唤醒自动续,全程无人
- 依赖序: W-d1 轻量续接(状态文件)→ M2 continuum(精确续点)→ W-d3 治理强化;续接不阻塞挂机骨架先行
## 七、多任务×子代理×真异步编排(2026-10-04 深夜用户定标)
### 7.1 三级并行模型
```
会话层: 多会话并行(F-09 per-conv 已有,并行度可配化)
└ 任务层: 每会话一活跃任务,多任务跨会话并行
└ 子代理层: 每任务 N 个子代理(spawn 并发已验证),W-a 后工具批内写类亦并行
```
### 7.2 真异步 spawn(核心新增)
现状:spawn_agent 同步语义(报告=工具返回值,父阻塞等全部子代理)。真异步变体:
- `spawn_agent(async=true)`: 派发后**立即返回**「已派发+agent_id」,父 loop 继续其它工具/下一轮
- 子代理完成 → 经 **wake 原语**(file-appear/process 条件,§二)唤醒父会话,注入「[子代理报告] agent-N: <摘要>」user 消息 → 父下一轮消化
- 父任务若已收敛: 报告落审计+完成卡,不强行唤醒(任务边界尊重)
- **轮界注入**: 父正在流式生成时报告到达→排队至本轮结束(对齐 a5 轮界注入模式),不打断流
### 7.3 并发治理(防爆炸)
- 全局子代理并发池上限(建议 4-6,实测调):防 API 限流+token 成本失控+CPU 争抢
- per-task TaskBudget 预算已备,async 子代理计入所属任务预算
- 超限行为: async spawn 排队(WakeRegistry 挂 pending 条件=有空槽),非拒绝
### 7.4 失败面
子代理失败/截断 → wake 注入失败报告(带 stop_kind,对齐停靠词表),父可重派;父会话已删 → 报告落审计即止。
### 7.5 依赖与分期
- 前置: W-a(写并行)/W-b(wake 原语)——本节是二者的组合应用层
- W-e1: async spawn 变体+报告回填注入(轮界排队)
- W-e2: 全局并发池+预算联动
- W-e3: 与 continuum 组合(父会话被压缩/切换后报告仍可达)
### 7.6 拍板点
1. async 子代理失败是否自动重派一次?(建议:是,带失败摘要,重派计入任务预算)
2. 报告回填消息是否也走 [自动换向] 类前缀族(建议:新增 [子代理报告] 前缀,前端完成卡旁路消费)
## 八、编排能力分析与规划(2026-10-04 深夜 [补1])
### 8.1 存量资产盘点(反转发现:编排面零使用≠零资产)
| 资产 | 状态 | 编排价值 |
|---|---|---|
| tasks 表(parent_id 层级+8 态状态机) | 在用 | 任务分解与推进的原语 |
| task_links 依赖图(DAG 关联+循环检测) | 建成零使用 | 依赖满足自动推进的底座 |
| df-workflow(DAG 引擎+workflow_executions 持久化) | 建成零使用(9 张编排表 0 行) | 编排轨迹与节点化执行面 |
| TaskAdvanceNode(DAG 节点已注册) | 建成未联动 | DAG×agent 融合的现成插销 |
| spawn_agent+registry/boundary/budget | 在用 | 子代理编配原语 |
| todo 协作板+挂机自领(W-d 设计) | 设计中 | 任务源与自驱入口 |
结论:**编排缺口不在资产,在「连接与驱动」**——依赖图没人推进、DAG 引擎不知道 agent、任务源没有调度器。
### 8.2 缺口清单
1. 依赖图静态:task_links 声明了 A→B,但 A 完成不会解锁 B(无依赖满足→自动推进)
2. 两套孤岛:df-workflow 与 agent loop 互不感知
3. 多任务调度器缺位:挂机领单只查板,无依赖/优先级/资源三维调度
4. 事件驱动编排缺位:「X 完成→触发 Y」无机制(wake 是雏形)
### 8.3 编排能力三层路线(渐进,复用率极高)
- **编排 1.0**(挂机模式内含,W-d):板驱动+任务状态机推进,无依赖图——已设计
- **编排 2.0 依赖图自动推进**:task_links 依赖满足(前置任务 completed)→wake 唤醒解锁下游任务(advance+可选自动派发);执行轨迹落 workflow_executions——把「死的依赖图」变成「活的流水线」;改动面=advance 成功回调+wake 注册,复用 df-nodes 状态机与 task_links
- **编排 3.0 DAG×agent 融合**:工作流节点=agent 动作(spawn/advance/notify 已有 TaskAdvanceNode 插销),DAG 即多任务编排面;初衷图 Code-Working 会话「dynamic workflow 编排推进」的落地形态;前置=2.0+async spawn(W-e)
### 8.4 拍板点
1. 编排 2.0 的依赖解锁是否自动派发执行(建议:解锁仅标记 ready,派发由挂机领单消费——调度权仍在挂机,编排只管条件)
2. 编排 3.0 的 DAG 定义形态(YAML 模板 vs 板驱动自动生成,建议后者起步)
## 九、状态即时同步与通知能力(2026-10-04 深夜 [补2])
可控支柱的推送面:agent 状态变化即时可达所有端。现状=事件总线单一事实源已立(AiChatEvent 族),缺的是**出口扇出与分级**。
### 9.1 出口扇出(一对多,零新事实源)
AiChatEvent 族(进度/停靠/完成/失败/审批)→ 出口适配器:桌面 UI(既有)/托盘 NeedAction(既有)/飞书通道(设计已立,关键路径)/relay-miniapp(隧道既有)/监控 history(已建)。
### 9.2 即时性分级(防刷屏)
| 级 | 事件 | 策略 |
|---|---|---|
| 即时 | 停靠/审批挂起/任务完成/失败熔断 | 即推(同类 5s 节流,notify 既有范式) |
| 摘要 | TaskProgress 每 N 轮 | 可选推(挂机模式开时推) |
| 批量 | 小时监控摘要/每日挂机报告 | cron 推(治理环既有设想) |
### 9.3 状态查询面(补「跑到哪了」)
远控查询命令族(飞书/miniapp 同构):查活跃任务/预算消耗/最近停靠原因——复用 remote_bridge 命令族扩展,只读零风险。
### 9.4 依赖与分期
W-g1 出口适配器框架+即时级(依赖飞书通道实施)/W-g2 摘要级+查询命令族/W-g3 每日报告(挂机 W-d3 联动)。
## 十、会话间/代理间感知能力(2026-10-04 深夜 [补3])
今天的全部互踩(双头编排/子代理同文件/主客两线)同根:**无人知道「谁正占着什么」**。感知能力=lease 原语的读写两面落地。
### 10.1 FileLeaseRegistry(文件面占用感知,要害)
- 写类工具(patch/write/edit)执行前登记 path→(conv, agent, ttl) 到进程级注册表,完成释放;同路径第二写者前置校验命中→拒绝+指路「该文件正被会话 B 编辑,等它完成或换文件」
- 与 W-a 二维分组器互补:分组器管**同轮内**保序,registry 管**跨轮跨会话**互斥——合起来=完整 lease
- 直接根治:双头编排互踩/子代理同文件竞态/主客两线叠改
### 10.2 拓扑与状态感知
- 父↔子: 父见子代理实时状态(ai_sub_agent_list 已备,S3 轨迹已建),子见兄弟在做什么(query_leases 天然覆盖)
- 会话↔会话: 一行状态查询「会话 B 在干什么」(per_conv 状态投影,只读)
- 发现共享: agent 的排障发现(如「X 是软删地雷」)写 knowledges→其他会话 knowledge_search 可见(盘活 1033 条只写不读的存量)
### 10.3 分期
W-h1 FileLeaseRegistry+写前置校验(小改,价值立现)/W-h2 query_leases 工具+兄弟感知/W-h3 跨会话状态+知识联动。前置: 无(纯增量);与 W-a 同批相邻落地最佳。
## 十一、伪命题甄别(2026-10-04 深夜 [补4],对抗自查,实施清单以此为准)
五测试:今天有无真实被卡/有无更轻替代/是否预建/与既有重复/收益成本比。
| 件 | 判定 | 理由与处置 |
|---|---|---|
| W-h 感知/租约 | **真命题,P0** | 今日三连实锤(双头/子代理同文件/主客两线);小改大收益,提到最前 |
| W-d1 挂机最小闭环 | **真命题** | 用户亲定场景;先跑一周看真实产出率再议深化 |
| W-e2 全局并发池 | **真命题(小)** | 3 子代理连发已近约束,防 token 爆炸真约束 |
| W-a 写并行吞吐 | **半伪,降级** | 墙钟大头是构建(38%)非写(秒级);**只修同文件竞态保序**(一行分组逻辑),吞吐优化等写耗时占比>20% 实测再做 |
| W-d2 自拆解/自设计 | **降级** | 板上条目登板时已拆好;设计稿产出不需要专门机制——作顺手能力,不立子系统 |
| W-b wake 原语 | **条件性,随场景建** | 现有消费者(挂机/接力棒)均未落地;单独建=预建。与 W-d1 绑定实施 |
| W-e1 async spawn | **条件性,缓** | 今日子报告全是下一步输入(依赖决定同步是对的);先建并发池,出现「父有事可做」场景再建 async |
| W-f 编排 2.0/3.0 | **冻结(高伪风险)** | task_links/df-workflow 至今零真实使用——「编排面零使用」的正确读法是**还没到需要编排的阶段**;启动信号=用户开始建依赖链或挂机领单遇前置任务 |
| W-g 状态推送 | 真命题但被阻塞 | 随飞书通道走,不单独排 |
| W-c 对接层 | 合并 | 非独立件,并入 W-d/M1 实施阶段标记 |
**实施序修正**: W-h 感知租约(最先)→ W-e2 并发池 → W-d1 挂机最小闭环(含 W-b wake 按需)→ 其余冻结等信号。
**自查教训**: 本文档 §1-§9 是「能力全景」(留给未来对照),§十一才是「现在做什么」——全景图与施工图必须分开,否则全景会冒充计划。
## 十一·修正(2026-10-04 深夜 [补2] 用户纠正)
**方法错误更正**:「零真实使用→冻结等信号」是鸡生蛋逻辑错误——task_links/df-workflow 零使用的主因是**能力未暴露**(无 agent 工具面入口/无调用门),不是需求不存在。**正确方法=投最小探针**:暴露最小可用入口让真实使用发生,用使用率(而非等待)决定深化。
修正后处置:
- W-f 2.0: 降级为**最小探针**——agent 工具面暴露「声明依赖」+依赖满足时提示一行(不做自动推进);探针使用率决定是否建自动推进
- W-e1 async spawn: 同理暴露 async 参数(小改),有机会用才有需求验证;并发池(W-e2)不受影响仍立做
- 其余维持: W-a 写并行降级有**实测数据支撑**(构建 38% vs 写秒级),不依赖使用信号,结论不变;W-d2 维持「顺手能力不立子系统」但自设计保留为挂机探索项
- 通用教训(入方法论): 能力甄别双判据——**有量化实测数据的按数据判;无数据的投最小探针判**;禁止把「未被使用」直接读成「不需要」(尤其当入口未提供时)
## 十二、自进化能力(2026-10-04 深夜 [补1]:自造工具+重复寻优)
初衷图「进化系统(自举)」的落地形态,两层:
### 12.1 重复→寻优(重复是重构信号,不只是停滞信号)
- 数据源已备: audit 表全量工具调用序列——**同一序列模式出现 N 次**(如「grep X→read Y→patch Z」×5)即抽象候选
- 两种触发: ①在线(G2 熔断前的中途检测:重复达阈值时先问「是否有更优解/可抽象为脚本」,从「数次数」升级为「问原因」)②离线(挂机空闲扫 audit 出模式报告——进化任务成为挂机的自领任务类型)
- 输出: 优化建议(换工具/写脚本/建技能),不自动改=零风险
### 12.2 工具/技能自造管线
- 现状: agent 会写脚本(run_command)但**无「晋升为注册技能」的管线**;devflow 技能库与 read_skill 已存在(read_skill cm/advance 今日实证)
- 设计: 脚本落 scripts/ → 注册进技能库(最小元数据: 名称/用途/入参/风险档) → 后续任务 read_skill 复用;风险档默认 Low(只读类)/写类需审批;资产可审计可回收
- 沉淀物分流: 重复的**排障发现**→knowledges;重复的**操作序列**→skills(两种进化物各归其位)
### 12.3 分期与拍板
- E-m1 模式扫描报告(只读,零风险,挂机自领一类)→ E-m2 在线启发(熔断对话化)→ E-m3 技能注册管线(风险档+审批)
- 拍板点: 技能注册是否需人工审(建议 E-m3 首次注册必审,之后同类自动)
## 十三、失败学习环(2026-10-04 深夜:所有失败作为学习教材,不反复在相同处失败)
「不重复失败」的量化判据分两层:同签名不重放(已管:loop 内窗口+纪律注入)+ **同类失败不跨会话重演**(缺,本节补)。
### 13.1 失败归类与学习
- audit 已是全量失败事实源(status+error+参数);缺「**归类**」:按错误模式聚类(状态机拒绝/路径未授权/精确匹配未中/网络/参数非法),类粒度才是学习单元
- 高频失败类 → 提炼**教训文本**(因果+规避法一句话),存 knowledges(失败分册,复用既有知识链与召回闭环设计,零新存储)
### 13.2 教训的三个消费点
1. **同类任务前置注入**: 派发/自领任务时,若目标域有高频失败类教训→提示词附「历史高频坑」(与 a5 换向注入同路)
2. **失败现场即时附学**: 新失败发生时,若该类已有教训→失败提示附「同类失败已 N 次,已学经验:...」(治盲试的直接抓手)
3. **挂机进化任务**: F-m1 失败归类统计=自领任务一类(只读零风险),产出高频失败 Top 与教训草案
### 13.3 分期与自评
F-m1 归类统计(只读)/F-m2 教训提炼+注入/F-m3 失败现场附学。自评: 兼容(复用 audit+knowledge 链零新存储)/安全(教训文本进提示词,无注入面——教训由 LLM 提炼经审核入板)/资源(统计查询按需)/回退(注入开关)。拍板点: 教训提炼由谁审(LLM 出稿+用户/主代理审,建议后者)。
### 12.4 工具进化环([补]:自写工具的自迭代)
自造(E-m3)之后是自进化——工具不是写完即终态:
- **使用遥测**: 自造工具每次调用记 次数/失败率/「调用后紧跟修正」率(补丁紧跟=不顺手信号),数据源=既有 audit,零新埋点
- **进化触发**: 失败率高 或 修正跟随率超阈值 → 该工具进进化候选
- **进化动作**: 读工具源码+遥测 → LLM 产改进版(**参数向后兼容**)→ 版本号递增 → 旧调用方不受影响 → 旧版退役
- **安全闸**: 进化=代码变更,走既有门禁(check+相关测试);行为变化审计留痕;风险档升级需审批(对齐技能注册同款纪律)
- 依赖序: E-m3 注册管线之后(先有自造才有自进化),真工具的真实使用积累(E-m3 落地后自然产生)——**本阶是最远期件,前面三阶不落地它不启动**
### 12.5 脚本生命周期纪律([补1]:不瞎写瞎用瞎删)
今日实证三类乱象:仓库根目录散落探查脚本(.fix_audit.py 类)/feishu_smoke.rs 写删横跳/docs 目录混入 .research 脚本堆。纪律四条:
1. **落位**: 一次性探查脚本→scripts/ 专用目录+命名 `scratch-<主题>.<ext>`,头部两行注释(用途/一次性或可复用);持久工具→走 E-m3 注册管线晋技能;**禁止落仓库根目录与文档目录**
2. **声明**: 头部即声明生命周期(用完即删/长期保留),删前核对「目的已达成且无引用」
3. **写前想清**: 结构性脚本(超过 30 行/含依赖引入)先定形态再写——对齐纪律段「一次成形」;写删回环超过一轮=停下换思路(与 G3 熔断同一触发语义,但纪律在前熔断在后)
4. **资产化优先**: 同类脚本写第二次→触发 E-m 重复寻优(抽象为注册技能),脚本资产不流失
落地: ①E-m3 管线含落位与声明规范 ②纪律段增补第 7 条(脚本落位,下一批注入修订顺带,不单独改) ③既有 memory「工作空间根目录整洁规范/AI临时文件写入规范」与此同源,agent 侧规则注入后即为同一纪律的对端执行
5. **临时文件同规**: 临时文件(中间产物/探针输出/快照)与脚本同一套生命周期——落专用目录(temp/ 或 .scratch/,禁根目录/文档目录/源码树)+命名带主题与日期+声明保留策略(用完即删/任务末清理)+**永不进 git**(gitignore 已挡,提交前三问第 1 问复核)。今天实证的应然态:探查脚本堆落 docs/.research/ 即违规,应落 temp/agent-monitor/ 同级专用目录。
6. **文档同规**: AI 产文档三分各归其位——①会话报告/分析结论:默认对话内直交,需跨会话保留落 temp/(命名主题-日期);②设计文档:docs/02-架构设计/专项设计/ +INDEX 登记;③项目文档:对应 docs/ 子目录+中文命名+INDEX 更新。禁:文档落根目录/未进 INDEX/设计稿与正式文档混放。今天正反例:四篇设计落专项设计目录(正)vs .research 勘察堆落 docs 目录(反,应落 temp/)。