-
实跑暴露:行为门子代理生成的一次性 run.mjs 把 status 初始化为 'red' 后再未 赋值,恒红且不带任何分类信号。本轮靠子代理自己察觉才没误判,但 r1~r3 同样 失真——任何依赖该字段做判定的地方都会恒判红,且会撞上 runBehaviorGate 的 「red 无分类原因」守卫,被判 HALT behavior-red-unclassified。 根因在插件侧:behaviorGatePrompt 只说 runner 要「透传结构化结果」,从未规定 status 怎么算,生成方式完全放任。 契约补四条: - status 必须由信号数组末尾一次性推导,判据与「输出」节逐字一致 - 变量初值用 null 或直接末尾 const,禁止 let status = 'red'/'green' 这类带 默认值的声明(恒红比恒绿更隐蔽,看起来像门在严格把关) - runner 输出前自检:red 必须有至少一条分类信号能解释;自检不过则非零退出, 不要输出无法解释的 red - 子代理返回的 status 必须等于 runner 自检后的值,不得手工改判;不一致是 runner 的 bug,修 runner 重跑 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
原本刻意不传、维持缺省关闭(待 Task 14 收益评估)。现开启:一个模块内的多个 REQ 不再严格串行走完整条流水线,文件集不相交且不改 schema 的 REQ 进同一批 并发跑 tdd→verify→review→fix(批宽缺省 2)。 准入是 JS 确定性计算(文件集两两不相交 ∧ schemaChange=false),不信 LLM 单方 判断;隔离靠 feature worktree + 准入排除 schema 改动 + feature 专属测试库; tdd/verify 不起栈不占固定端口,故无需 stackLock。 全链路 fail-open:facts 提取失败 / 准入不过 / lane 建失败一律退回串行链, 不新增 halt 点。逃生口 features: false。 coding.mjs 未改动——featureBatchRun 及其准入闸本就实现完整,此前只是没打开开关。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
Workflow 脚本自身无 fs / 无 shell(沙箱限制),git 只能经子代理跑——省不掉 "手",但可以省"次数"。本次只动两类**纯查询**调用点,不碰任何验收语义、 不改错误处理粒度。 1a tag 全量预取:开跑时(Router 之前)一次 `git tag -l "req-done/*" "fe-code-done/*" "milestone/*"` 拉回全表建 Set,之后 - featureLoop 入口 dedup(每 REQ / 每 FE 一次) - overlap phase1 dedup(每 FE 一次) - runMilestone tag 存在性(每模块一次) 全部变成内存查表。tag 是仓库级 ref、worktree 间共享,一份全局快照对主根 与所有 lane 同时成立。运行中新打的 tag 由 noteTag() 同步记账(脚本是唯一 写入方,单线程 await 串行,不会漏;显式判 success,防日后加 allowContinue 时把失败放行误记为已打)。 1b 默认分支 memo:refs/heads/main|master 是整程不变量且全仓共享,原本 runBranchSetup / runMilestone / runCrossModule / prepareParallelWave / fe-overlap 五个调用点各起一次子代理探测,每模块至少查 3 次。改为首次探测 后整程复用;探测失败不缓存,下次重试,保持原有 agentR 的 halt 语义。 以 5 模块 x 4 REQ + 8 FE 估算,两项合计省约 45 次子代理会话。 fail-safe:预取失败(子代理 null / 结果不合形)→ tagSnapshot 保持 null, tagKnown() 返回 null,全部调用点自动回退到"每次一个子代理查"的现行路径, 语义一字不差,不新增任何 halt 点。 验证:lib/check-workflow-syntax.mjs 语法门通过;调用点配平经 grep 自检; 多 pattern `git tag -l` 语法在本机 git 上实测有效。coding.mjs 无行为测试, 真实验证需下一轮实跑。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
步骤 5 原本只处理 changed 单元("new 单元无 tag,跳过"),但新单元挂靠的 模块可能已 done: routerPrompt 判 done = 里程碑字段匹配 且 tag 存在 → 模块已 done 时 reqs 为 空数组 → coding.mjs 的 todo = routed.modules.filter(m => !m.done) 把该模块 整个剔出待跑列表 于是新 REQ 挂进已有模块时不报错、不 halt,就是永远不跑。新 FE 行挂进已打 milestone/frontend-phase 的前端阶段同理。 步骤 5 改为六个显式分支:changed 处理功能级 tag + 里程碑,new 只处理里程碑; kind=proto(new) 显式声明为基线建立、不作废任何 tag(原先只在步骤 3 旁注里)。 kind=proto(changed) 另收窄重跑范围:__prototype__ 是聚合单元,只能说明"原型变了", 原先据此删全部 req-done/FE-*,改一个原型文件就重跑整个前端阶段。改为先用 git log -1 -- .req-ledger.json 取上次台账 commit 作基线、git diff --name-only 还原到文件级,再经 AskUserQuestion 确认映射到受影响 FE,只删这些 tag;取不到 基线/diff 为空/用户选"说不准"一律回退整体重跑,语义同改动前。 coding.mjs 无需改动——runPrototypePreview / featureLoop / runBehaviorGate 本就按 feItems 伸缩,粗粒度完全来自 add-req 删 tag 的范围。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
缺陷:新建分支以默认分支为起点(createBranchFromPromptM),但复用已存在分支的 两条路径——主根 checkout(coding.mjs:2167 分支)与 lane worktree add(分支 2)—— 都不带任何同步动作。上一轮跑完遗留的功能分支遂停在原位,其后进入默认分支的 REQ 卡片 / migration / docs 增量对本轮全部不可见。 实测后果(xlyClaude15DDD 2026-07-20):module-CFG 停在旧点,spec 子代理报 「全仓 grep <req> 零命中」后照自身理解另实现了一套设计,直到 milestone merge 才以三文件内容冲突暴露,整轮返工。子代理并未跑偏——它被喂了残缺的世界。 修法:HEAD 确认后统一跑 syncBranchWithDefaultPromptM(lane / 主根共用)。 新建分支走到这里恒为 up-to-date,故可无条件执行、幂等。冲突时保留现场返回失败, 经 runAction 仲裁 halt 交人工——陈旧分支与默认分支真冲突意味着两边都动了同一处, 只有人能判断取舍;自动 abort 会抹掉这个信号,让下一轮再撞同一个坑。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
AGT test-gate 三连 halt 根因:闸子代理把 test.mjs 派到后台后装 Monitor 结束回合等通知, Workflow agent 语义里结束回合即完成,判「未调 StructuredOutput」halt;通知永远到不了. 在 featureStageContract 授权条目后追加硬约束,前后端闸/verify/tdd 等全部阶段同享. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
存量项目(模板修复 56c4d891 之前生成)的 scripts/setup-test-db.mjs 在 env 缺省时 回退到 config-vars.yaml 的源库名并 DROP+CREATE——xlyClaude13 的源库 xlyweberp_vibe_erp_async 因此被清空重灌(2026-07-10 事故)。laneDbSupport 探测 只查 env 支持、且仅并行波次才跑,串行门裸跑脚本无任何拦截。 现 preflight 启动即 grep 目标项目 setup-test-db.mjs 是否含 COPY_SCHEMA (新复制副本模型标识),不含即 halt 并给出用 skeleton-gen 模板升级的指引。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
与 quick-field 成对:纯前端直改 frontend/(lint/类型检查 + grep 自检, 不起栈、不跑行为门/e2e),可见布局变化同步 prototype/、按需更新 docs/08 §三 FE 行文字,台账重基线但绝不作废 req-done/milestone tag——前端阶段 不重跑。硬边界:只消费 docs/05 既有端点、不新增页面/路由/FE 行,超界 回落 /add-req。 同步:docs/08 §四 标题泛化为「微改待验清单(quick-field / quick-ui)」 两通道共用(quick-ui 含旧标题迁移指令);quick-field/add-req 分流提示 互指;plugin.json 注册(10→11 skill);README 目录树/入口表(4→5)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
保 schema SSoT 不缩水(V_n ALTER + docs/03 同步 + validate-ddl fail-closed), 代码主会话直改 + grep 清单/轻量编译自检;台账 req-ledger 重基线但绝不作废 req-done/milestone tag——Router 视一切已完成,不冷起栈、不跑测试门/行为门。 未过行为验收的字段登记 docs/08 §四 待验清单,攒批人工勾销。 硬护栏:仅追加式 ADD COLUMN(可空/带 DEFAULT)+ 既有链路多带一个字段, 超界回落 /add-req;步骤 0 要求台账干净(防全量重基线吞掉其他待处理增量); 禁手动灌库(源库 Flyway 托管,绕 history 会重复 apply 报错)。 同步:plugin.json 注册(9→10 skill)、README 目录树/入口表、add-req 顶部分流提示。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
编码期测试的 DB 时序从「DROP+CREATE 空库 → Flyway 从零重建 → seed」 改为「mysqldump 复制源库→一次性副本 → Flyway 只 apply 本轮新迁移 → 跑测试 → 绿后晋升新迁移到源库 → 无论红绿删副本」。 - 新模板 scripts/drop-test-db.mjs(删副本,硬拒删源库)、 scripts/promote-to-source.mjs(移植 flyway 历史行+重放迁移到源库; 跨 lane 串行由编排层 testGate 起栈互斥保证,文件锁兜底同树重跑) - setup-test-db:DROP 空库 → 复制源库到副本;test.mjs:try/finally 删副本 + 绿后晋升 + 串行缺省显式导出副本名 <schema>__test - 命名约定(5 脚本共享):COPY = env > marker > <source>__test, 每脚本 COPY===SOURCE 即拒绝;application*.yml 占位缺省改为副本名 - 新 lib/bootstrap-source-flyway.mjs:db-init 建源库+apply V1+写 checksum 与 Flyway 一致的历史行(Plan 期无 app 可起,手算 CRC32); db-init B 段三步换一次 bootstrap 调用 - coding.mjs 各闸时序对齐;globalTeardown 只 kill 不删副本(teardown 删副本会让其后的 promote 查不到副本历史而静默跳过晋升);行为门/ seed 契约允许清单补 drop-test-db;前端 testGate 补收尾删副本 - 模板测试重写 + 新增 drop/promote/bootstrap 测试(133 全绿,全离线) 已知残留:bootstrap 手算 Flyway checksum 未真机验证(若不一致首次 起后端报 checksum mismatch,改 flywayChecksum 一处即可);演示种子 固定主键区间 1000–9999 与源库真实自增数据增长存在长期碰撞风险。
-
与 setup-test-db 模板建库字符集保持一致。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
前端段开头一次性 Playwright headless 渲染 prototype/**/*.html 本身: 截图归档为可视化基线 + 跑原型自带交互点击冒烟 + 捕获 JS/console 错误。 与行为门正交(Preview 测静态原型、Behavior 测实现)。硬门:渲染失败 / 脚本未捕获异常(jsErrors)→仲裁(只许 retry/halt),halt 即停下等人工回 plan/add-req 修原型后重跑(coding 不改原型源码);console.error advisory; 环境未就绪(Playwright/浏览器缺失)才 retry→仲裁降级;无 prototype/ 跳过。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
add-req 的变更检测只哈希 docs/01 REQ 卡片与 docs/08 §三 FE 行文字,从不读 prototype/,而原型才是前端布局/页面/交互的权威。改原型但 FE 行文字不变时 台账无变化 → Router 跳过前端 → 原型改动永不重编。 - req-ledger.mjs:collectProtoUnit 把全部 prototype/**/*.html 聚成单一 __prototype__ 单元(kind=proto),relpath 归一+排序保证跨平台哈希稳定; 无 .html 不产生该单元。接入 computeUnits。 - add-req SKILL:步骤 1 说明 kind=proto + 老项目升级建基线语义;步骤 5 新增 proto 作废分支(删全部 req-done/FE-* + milestone/frontend-phase + 复位 §三里程碑,整体重跑前端阶段);横幅与 frontmatter 同步。 - README:lib 说明加 prototype。 - 测试:新增两用例证明改/删原型内容能被 diff 识别(FE 行文字不变也检测到)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
让前端不依赖后端的工作与后端波次并发,所有真后端测试延后。5 类改动: - tddPrompt/verifyPrompt 加 feStage:jsdom 模式只处理 jsdom 任务、只跑 vitest、 硬禁 e2e 命令;e2e 模式只补延后的 e2e 任务。新增 fe-code-done/<FE> 中间 tag。 - featureLoop 加 feStage 分流:jsdom 跳 review 打 fe-code-done;e2e/all 走 review→req-done。新增 runFrontendPhase1(前端 worktree,不调 phase()、不 merge/milestone、永不 throw)。 - 主循环:frontendOverlap 开时把 frontend-phase 从波次图剔除、起 phase1 与后端 波次并发;屏障后 reconcile(merge default→frontend-phase)+ 标准 runModule(feStage=e2e) 主根全栈跑 phase2。后端未全 done / phase1 halt → phase2 延后、产物保留 resume,绝不新增 halt 点。 - coding-start SKILL.md + README:开关说明,缺省不传(同 features 闸纪律)。 重叠期前端无栈/无固定端口/无 DB,补 8/9/10 不变量与端口/lane 安全全保住。 缺省关时 feStage 恒 all、新分支不激活、新编排整段跳过,现行行为零变化。 语法门通过。设计真值见 docs/superpowers/plans/2026-06-15-frontend-overlap-jsdom.md。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
前后端并行唯一安全形态:前端不依赖后端的部分(骨架+spec/plan+tdd 的 jsdom 任务+vitest verify)与后端波次并发跑、打 fe-code-done,所有真后端测试(e2e 任务+行为门+测试闸)延到后端全 done 后的 phase2。含三前提对比、流程、改动 清单、不变量保住性(补 8/9/10)、风险与验证。开关 parallel.frontendOverlap 缺省关。后续 coding.mjs 实现注释引用本稿为设计真值。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
下文"派 Agent 子会话跑测试 / 主会话绝不直接跑测试"护栏的真实意图 = 测试执行与主推理流隔离、只回收结构化结果。本运行环境若无 Agent/Task 派发 工具,则以 Bash run_in_background 隔离后台子进程作为该子会话的物理实现 (输出重定向到 .tmp/ 日志,只读回 {command,exit_code,passed/failed} 摘要), 已满足护栏意图,故绝不因"缺派发工具"halt(非硬事实缺失、retry 不改变工具面)。 仍禁止在主推理流内联同步跑测试并把全文 stdout 读进上下文。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> -
rule 1 翻转:docs/02 § 二 列出顺序只是排版次序、不构成依赖;order 边 仅在 docs/06(或 REQ 卡)显式声明"X 必先于 Y"时才加。明确堵死本次实测的 误读——对已完成模块的 fk/api 证据绝不构成两个待跑模块间的 order 理由 (scheduler 曾拿 PUR→BAC[fk] 当借口给 PUR←SAL 加链式 order 边)。两个待跑 模块间无 fk/api/seed/共享表/docs 显式约束 → 不加边、落同一波并行(默认而非例外)。 保守偏置同步收窄:"不确定"仅指怀疑真实依赖却证据不全,绝不把"docs/02 里 靠后"当不确定理由——否则该"最高优先级"段会盖过 rule 1。 实测背景(xlyClaude13):待跑 PUR/SAL/USR 表归属不相交、彼此无真实依赖, 旧提示却链式 order 串成 USR→SAL→PUR,每波仅 1 ready,maxWidth=3 形同虚设。 修复后三者应进同一波 3 路并行。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
…es 闸刻意不传(留 Task 14 验收开启),逃生口 modules:false 完全回退串行
-
- 调度:scheduler 子代理只输出依赖边+证据(宁串勿并),JS 做完整性校验 + Kahn 拓扑波次;frontend-phase 由 JS 硬规则依赖全部后端 - 隔离:lane worktree(独立 index)+ lane 测试库(ERP_TEST_DB_SCHEMA)+ migration 版本段(maxV 全局并集)+ 起栈互斥锁(Seed/testGate) - 执行:波次 parallel + milestone/RESUME 主根互斥 + halt 波次边界收敛 + 图状 pending(blockedBy);runModule 永不 throw - feature 级:spec 预生成(写盘不 commit、末端统一提交)+ 后端 REQ 批并行(准入闸=文件集两两不相交∧不改 schema,冲突即弃分支串行重跑) - 穿线:模块作用域 prompt/runner 经 ctx(c) 取根,ROOT 仅主根专属操作;decisions 记账 per-module sink 取代全局水位线 - 降级原则:任何并行机制失败一律 fail-open 回串行,零新增 halt 点;parallel 缺省/modules:false 与原行为一行不差
-
…yml 占位约定 + Flyway out-of-order;env/marker 双缺省行为一字不变
-
…层 return),包裹后检查;.tmp/ 入 gitignore
-
- bestEffortAction(prompt, {label, phase, okMsg, failTag, errTag}):收敛 recordResume / ensureLedgerBaseline 逐行同构的 try/catch 包裹(失败/异常只 log 绝不阻断主流程; ≠ runAction:不经 adjudicate、绝不 halt)。日志文案与重构前逐字一致(errTag 区分 失败/异常两条前缀),返回布尔供水位线判断。 - decisionDigestMd helper 消除决策摘要模板的字节级双份拷贝;flushedCount 水位线 (仅 per-module flush 成功才推进)使 loop-end 条目只补「未被逐模块条目覆盖的增量」 ——N 模块全绿不再每条决策在 RESUME.md 写两遍;flush 失败时 loop-end 兜底补记保留。 - add-req 步骤 0/1 合并为单次 scan(scan 输出本就同时含 ledgerExists 与 new/changed/removed,重复扫描纯冗余);删步骤 6 无操作性说明尾句。 -
- mergeAlterStatements 对 MODIFY/CHANGE/RENAME/ALTER/DROP(除 DROP FOREIGN KEY, 外键维度已移除故对称放行)登记 unsupportedAlters;CLI 非空即 exit 1 并列出子句。 此前静默跳过导致「migration 改了列但 docs/03 未同步」绿灯假阳性——恰是闸门最该抓 的场景。未 CREATE 的表同样登记(检测先于 if(!t) 跳过)。parseDDL(text, opts) 不传 收集器时行为不变(向后兼容)。 - parseDDL 三遍扫描统一单一抹除底稿(剥注释+抹字面量一次完成,REGEX-3 全覆盖; blankStringLiterals 长度不变故偏移可复用);顺带修掉第一遍在未抹除底稿上扫描、 字面量内 "CREATE TABLE ghost(...)" 产出幽灵表的缺口。 - 测试 52→58:全部拒绝臂参数化覆盖(RENAME/ALTER COLUMN/DROP INDEX/DROP PRIMARY KEY)、混合 ADD+MODIFY(ADD 仍并入且登记)、CLI exit-1 冒烟(spawnSync)、幽灵表 回归、DROP FOREIGN KEY 容忍。 - add-req SKILL.md 闸门说明同步硬拒语义,消掉悬空的「见 P2」引用。
-
- auto-continue.sh:sentinel 检测只认 transcript 的 assistant 行(修自匹配 bug—— block reason 自带 [ERP-HALT] 字面量、下次 Stop 命中自己,钩子实际只能续跑一次); 窗口 60→200 行,兜住「横幅在前、诊断在后」的回合;删 4000B 字节增长启发式 (与 PostToolUse 清零重复且方向性错误——纯文字空转一轮也超 4000B,上限永远到不了); reason 文案去掉对已删 skill 链的指挥与 [ERP-HALT] 字面量。 - [ERP-HALT] 补全到全部刻意停下点(合计 12 处打印点):add-req 4 处(前置拦截/ 基线停下/空增量/完成横幅)、coding-start 步骤 1/2、plan 阶段 5 处(plan-start 终结闸 / downstream-gen A5 / db-design-gen 审阅 / scope-lock 骨架 / project-init 安装失败);coding-start :130 说明文字去字面量防误触发。 - StopFailure:官方语义为「输出与退出码被忽略、无 decision 控制」(无法在钩子层 自动续跑;核实于 2026-06-11 code.claude.com/docs/en/hooks.md)。接线 log-stop-failure.sh:记录中断时间与 error_type 到 $TMPDIR/erp-stopfailure.log, 供人工/外部 watcher 据此续跑。 - coding.mjs preflight:起跑线按 docs/04 § 零探测 node/JDK/DB 客户端/测试入口, 工具链缺失带安装/配置命令的诊断 halt——不再拖到 test-gate 才爆、白跑几十分钟编码。
-
任何 halt 的原因必须直达终端,而不是埋在 Workflow 返回值/RESUME.md/TypeError 里: - haltError():HALT 抛出前先 log(/workflows 进度叙述行可见)。启动期 4 处 (invalid-projectRoot / assertSafeId / router-violation×2)换用;模块循环 catch 补 「⛔ HALT — 模块 <id>:<原因>」;loop-end 补最终状态 log(halt 模块/原因/待跑清单)。 - agent() null 防御:断网/机器休眠时子代理返回 null,不再以 TypeError 形态 halt—— adjudicate null→确定性默认 retry;runStage/runAction null→经仲裁重试(上限 ADJUDICATE_MAX);其余 32 处直调点换 agentR()(null→带 label 的诊断 halt); flipDocs08Checkbox 保持裸 agent + null 容忍,守住其「绝不 halt」契约。 - coding-start 步骤 6:Workflow 通知返回后第一段输出必须是 halt/完成横幅 (halt 原因全文不许截断或转述 + 已完成/pending 清单 + [ERP-HALT] 终止标记)。
-
cb9da34e 转 coding.mjs Workflow 时把 auto-continue Stop 钩子连同 17 个旧 coding 子技能一起删了,导致逐 REQ 手动编码会话每个 REQ 完就停下问 continue。 本提交恢复该机制: - hooks/scripts/auto-continue.sh(Stop):回合中途结束默认 block 并喂「继续 推进」,使各 REQ 子任务连跑、用户无需手敲 continue;仅当 transcript 出现 [ERP-HALT] 或连续空转达上限(8)/无 >4000B 增长时放行停下。 - hooks/scripts/reset-stall-counter.sh(PostToolUse):有工具调用即清零空转 计数,真推进时无限续跑。 - hooks/hooks.json:接线 Stop + PostToolUse(不含已删的 log-cross-module.sh)。 - coding-start 步骤5「Workflow 已启动」横幅补 [ERP-HALT]:Workflow 转后台后 主循环干净停下等通知,不被钩子误推去重启 coding-start。 - .gitattributes:强制 *.sh / hooks.json 用 LF,避免 autocrlf 把 CRLF 注入 shebang 与钩子输出的 JSON。 钩子在会话启动时加载,需重启已运行会话才生效(开发仓即运行源,无需 commit 即生效,commit 仅为持久化)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
P1#2 — validate-ddl 支持增量 migration: - parseDDL 新增第三遍 mergeAlterStatements:ALTER TABLE ADD COLUMN / ADD [UNIQUE] INDEX|KEY / ADD PRIMARY KEY 并入对应表(仅追加式, MODIFY/CHANGE/DROP/RENAME 不处理;并集与文件顺序无关)。 - CLI 接受多个 DDL 文件:node validate-ddl docs/03 sql/migrations/V*.sql, CREATE + 各 V_n 的 ALTER ADD 并集 ↔ docs/03 累积 SSoT 做 4 维比对。 - add-req SKILL 新增「增量 DDL 校验(fail-closed)」闸门,替换原「多 migration 不适用」说明。 - 7 个新测试(含 DEFAULT 字面量里的 ALTER 文本不被误吃);52/52 通过。 P1#3 — coding 首跑自动建需求台账基线: - coding-start 透传 pluginRoot;coding.mjs ensureLedgerBaseline() 首跑若 .req-ledger.json 缺失则 commit 基线(幂等、best-effort、缺 pluginRoot 静默跳过), 使日后 /add-req 能识别增量、免空跑。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
P0 — add-req 从不 git-commit 自己的产物,导致工作树脏、coding-start 起 coding.mjs 时撞「工作树必须干净」前置(HALT 或被误并进功能分支): - 步骤 0 基线:写 .req-ledger.json 后 git add+commit - 步骤 6:把本次全部增量产物(docs/01/02/03/05/08 + sql/migrations/V_n + .req-ledger.json) 在当前(默认)分支统一 git commit,并用 status --porcelain 复核工作树干净 P1#1 — RESUME.md 原先只在主循环末尾写,硬中断(进程被杀)到不了写入点 → 本次运行零 handoff: - 每个模块 runMilestone 落定后即 best-effort 追加一条「✅ 模块完成」(含本模块自主决策摘要), 按 decStart 水位线切出本模块决策;使硬中断也能复盘已完成到哪、各模块做过哪些假设 - loop-end 的 halt / 全完成汇总条目保留(halt 原因是 per-milestone 无法捕获的) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
中断/halt 后重跑能复盘上次状态,不只恢复进度。编码阶段保持全自动静默不变。 - coding.mjs:新增 resumeJournalPromptM + recordResume(best-effort,写失败绝不阻断/ 掩盖主流程)。主循环结束(halt 或全完成)时向 docs/superpowers/RESUME.md 追加一条: halt 原因 + 本次自主默认假设(decisions 摘要) + 待跑模块 + 下一步 - coding-start:新增步骤 3.5,重跑时读 RESUME.md 末尾条目向用户复盘上次 halt/完成状态 - 进度真值仍是 git tag(milestone/req-done)+ committed 工件——硬中断后 Router 据此续跑; RESUME.md 补的是跨会话会丢失的「为何停/做过哪些假设」定向信息(GSD continue-here.md 类比) - 硬中断(进程被杀)到不了写入点:那种情况无 halt 原因可记,且 tag+工件已够续跑,无信息损失 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
初始 Plan 完结后追加/修改需求时,只跑增量、不必整仓重跑。 - lib/req-ledger.mjs(+单测):对 docs/01 REQ 卡 + docs/08 §三 FE 行算 sha256 内容哈希, 对比 .req-ledger.json,scan/commit 出 new/changed/removed/unchanged - skills/plan/add-req:新增 user-invocable 增量入口。基线→检测→校验真实数据→ A3-delta(写 V_n migration + 同步 docs/03,永不改 V1)→A5-delta(docs/05/02/08)→ 作废 changed 单元的 req-done/milestone tag→提交台账。Router 无需改动,缺 tag 即重跑 - 变更识别靠内容哈希(非仅 tag 缺失):改过的老 REQ 也能认出并作废其 req-done, 否则 Router 会跳过它——OpenSpec delta 思路的零依赖落地 - 首跑无台账则先建基线,避免把存量误当新增重跑整仓 - plugin.json 注册第 9 个 skill + 版本 0.2.0→0.3.0;CLAUDE 模板 Schema 演化补增量 V_n 规约 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-
- bInvalid(是否作废)/sFormId(界面ID) 由主表专属审核列移入基础标准列,所有表(含从表)均含;主表专属审核列减为 bCheck/tCheckDate/sCheckPerson/sStatus(4列) - 主表渲染 15 列顺序与基线一致(4 审核列插在 bInvalid 与 sFormId 之间);从表 10→12;bInvalid 仍钉死裸 bit - db-design 步骤B 要求1 新增: 金额/数量小数列统一 decimal(18,6)(REQ 明确要求可偏离) - 同步 header/table 模板 + db-design C.1/C.2 + db-init A.1 + README A3 - 审计(多代理)+validate-ddl 实测均通过(decimal(18,6)/bit 4维一致;bit(1)负例正确 fail)
-
- 基础标准列(所有表)新增 sMakePerson(varchar50,制单人,app-assigned) / tUpdateDate(datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) - 主表(表清单第一张)无条件 +6 审核列: bInvalid/bCheck(bit) tCheckDate(datetime) sCheckPerson(审核人)/sStatus/sFormId(varchar50); 全 NOT NULL 无 SQL 默认 app-assigned - 从表 sParentId 不变(紧随 sId); 匈牙利前缀图例加 b=bit - 同步 header/table 模板 + db-design C.1/C.2 + db-init A.1 DDL 译法 + README A3 - db-init 钉死 bInvalid/bCheck 裸写 bit(禁 bit(1)) 对齐 validate-ddl 不归一化 BIT 长度(audit D5-1)
-
标准列:每表 7 列(新增 iOrder/sMemo;sId/sBrandsId/sSubsidiaryId 改 varchar(50) NOT NULL),从表额外 +sParentId 共 8 列。docs-03 模板 + A3 渲染规则 + A4 DDL 默认值翻译(CURRENT_TIMESTAMP / DEFAULT '1111111111' / iOrder app-assigned)。 去外键:A3 不再推导 FK 约束(改语义引用关系,无 ON DELETE/ON UPDATE,应用层维护一致性);A4 DDL 不生成 ALTER ADD FOREIGN KEY;validate-ddl 移除外键维度 5→4 维(表/列/类型/索引),单测 45 pass/0 fail;coding.mjs 种子/sentinel「FK 有序」→「按语义引用有序」(保留先被引用方后引用方/不可悬空)。 注:db-design-gen 的 docs/06 读取清单/步骤B 两条 bullet 与本区域改动同处一个 diff hunk,随本提交落入(实属 docs/06 feature 的 A3 接入)。
-
- coding-start / plan-start:去掉已失效的「git 就绪由本入口预检/校验」表述(git 闸已移入 coding.mjs 运行时) - skeleton-gen:删除「A2 不再单独出 docs/06/07/09」「原 docs/09 并入」等历史演进注释 - downstream-gen:描述去掉「A6 已并入此处」历史包袱 - CLAUDE-template:补全被截断的 migration 规约残句(旧 V_n.sql 保持原样、永不回改) - README:修正悬空的「🧭 通用工作准则」引用、删「4 条通用准则」、模板计数 26→19、coding-start git 就绪描述
-
- A2 skeleton-gen 末尾新增 step F:创建空白 docs/06-实现策略.md,QA 闸循环至用户确认填完才进 A3(原 F 进入 A3 顺延为 G) - A3 db-design-gen 读取清单 + 步骤B + 参考接入 docs/06 - A5 downstream-gen docs/02 构建顺序 / docs/05 端点 + 参考接入 docs/06 - coding.mjs deriveSpecPrompt(前端+后端)把 docs/06 作为 spec 收集上下文
-
- 子模块代码:大写短码(USR/ROLE) → 大驼峰英文名、不限长度(UserInfo/Role) - 功能名:英文大写 [A-Z0-9_]/下划线(PWD_RESET) → 大驼峰 [A-Za-z0-9]/直接拼接(PwdReset) - 模块代码不变(大写短码 USR);结构仍 <模块代码>-<子模块代码>-<功能名> 恒 3 段 - 规范示例统一 USR-USR-LOGIN → USR-UserInfo-Login;docs-01 五列示例行同步 - 同步 7 文件:README/coding.mjs/scope-lock/docs-01/CLAUDE/plan-start/docs-04