• - 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 无操作性说明尾句。
    zichun authored
     
    Browse Code »
  • - 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」引用。
    zichun authored
     
    Browse Code »
  • - 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 才爆、白跑几十分钟编码。
    zichun authored
     
    Browse Code »
  • 任何 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] 终止标记)。
    zichun authored
     
    Browse Dir »
  • 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>
    yanghl authored
     
    Browse Dir »
  • 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>
    yanghl authored
     
    Browse Dir »
  • 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>
    yanghl authored
     
    Browse Code »
  • 中断/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>
    yanghl authored
     
    Browse Dir »
  • 初始 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>
    yanghl authored
     
    Browse File »

  • zichun authored
     
    Browse Dir »
  • - 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)
    zichun authored
     
    Browse Dir »
  • - 基础标准列(所有表)新增 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)
    zichun authored
     
    Browse Dir »
  • 标准列:每表 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 接入)。
    zichun authored
     
    Browse Dir »
  • - 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 就绪描述
    zichun authored
     
    Browse Dir »
  • - 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 收集上下文
    zichun authored
     
    Browse Dir »

  • - 子模块代码:大写短码(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
    zichun authored
     
    Browse Code »


  • - index 模板:三列 → 五列(模块代码/模块名称/子模块代码/子模块名称/核心功能点),一行一个子模块
    - 卡片文件名:REQ-XXX-NNN.md → <req_id>.md,req_id 恒 3 段(如 USR-USR-LOGIN),功能名由 CC 据核心功能点推断(英文大写、[A-Z0-9_]、多词下划线、子模块内唯一),保持文件名==req_id 不变量
    - scope-lock:五列解析 + 按模块代码聚合建目录 + req_id 生成规则;E.1 glob 改 */*.md 跳过 _module.md
    - db-design-gen/downstream-gen:REQ-*.md glob 同步;docs/05 结构检查锚点 ### REQ- → 三级标题端点段
    - CLAUDE/docs-04 模板 commit 后缀、plan-start 示例、coding.mjs 提示词文案(238/1322)、README 同步
    - docs-08 checkbox 文本与 scope-lock Edit 锚点逐字节同步;流程/闸门/tag 机制零改动
    zichun authored
     
    Browse Code »
  • 行为门 v3(docs/design/2026-06-05-frontend-behavior-stage-gate.md):
    - 行为验收从 per-FE review approve 子门迁回阶段末尾一次(phase Behavior,
      featureLoop 后、testGate 前),保留 fix 循环(BEHAVIOR_STAGE_MAX=3 轮,
      fix 后全量前端单测复验再重跑门)
    - req-done/<FE> 语义降为「仅静态 review 过」;行为绿改由 reportPrompt 校验
      阶段级证据(module-reports/frontend-phase-behavior-r*-a*.md 最后一份非 RED)
    - build-failed 取消「兄弟未实现」短路(阶段末尾全 FE 已实现);断言作用域 =
      全部 FE spec「行为验收作用域」小节并集,缺小节记 scope-missing 阻断 green
    - 新增样式层 styleIssues(颜色 token 比对 + layout sanity 共 6 kind),
      降维并入 behaviorHard 与交互硬问题同口径 fix;环境仲裁透传 riders 计数
    
    前端测试目录隔离(对齐后端 src/main↔src/test 物理分离):
    - 锁定约定:单测 frontend/tests/** 镜像 src/(smoke 归 tests/__smoke__/ 且
      以 .test.* 结尾),e2e 在 frontend/e2e/,frontend/src/ 禁任何测试产物;
      vitest include 统一限定 tests/**/*.test.*
    - 五层防线:docs-04 模板 §2.1 锁定约定 / planPrompt+tddPrompt 硬护栏 /
      fe-skeleton 单测基线 / code-reviewer 新增第 8 维「测试文件隔离」
    - legacy 守卫:frontend/src/ 内已存在 colocated 测试时绝不收窄 include
      (防旧单测静默停跑),骨架幂等检测同步豁免,留人工迁移
    
    经两轮多代理对抗审计(34 agents),确认项均已修复。
    zichun authored
     
    Browse Code »


  • zichun authored
     
    Browse File »
  • …rd, coverage reconciliation, testdb halt)
    
    Post-implementation multi-agent review (6 dims + per-finding adversarial verify) found the control-flow sound and the goal mostly-achieved; this lands the three deterministic, low-risk fixes among the confirmed findings.
    
    - build-failed short-circuit (must-fix): behaviorSubGate now validates the LLM's classification before green-by-skip — requires non-empty rootCausePath AND no interaction/sentinel hard issues riding along; a "dirty" build-failed goes through adjudicate(allowContinue:false) retry/halt instead of silently approving. The skeleton (lazy router + FeStub) makes legit sibling-unimpl build breaks rare, so a build-failed is more likely a real in-FE shared-code regression — the boundary comment §107-108 claimed load-bearing but had zero JS enforcement.
    
    - coverage reconciliation backstop (§3.6): empty-coverage only guarded ==0; now 0<routesReached<routesPlanned with the shortfall unexplained by route-level coverageGaps -> adjudicate(allowContinue:false). Closes the partial-coverage false-green. Counts route-level reasons only; over-counting can only suppress the gate, never false-halt.
    
    - test-DB guard direct-halt now implemented: TESTDB_GUARD_MARK in envError.detail + behaviorTestDbGuardTripped -> immediate HALT on the first result, honoring step2's "no retry, no adjudication" promise (previously prompt-only; a guard trip wrongly entered the generic stack-not-ready retry path, ~5 redundant setup-test-db.mjs runs).
    
    Left as accepted design trade-offs (documented in design §12): self-attested whitelist/route scope, soft-by-source non-data text, disabled-control should-work recovery limited to submit buttons.
    
    Verified: SYNTAX_OK (wrapped check), 87/87 lib tests pass, no time/random builtins. v2 design doc updated (§3/5/6.2/6.3 + new §12).
    zichun authored
     
    Browse Code »
  • Replaces the phase-level read-only behavior-gate with a per-FE acceptance dimension: each FE is approved only when the code-reviewer approves AND runtime behavior verification is green. Behavior defects (dead control / sentinel text mismatch) become fixable must-fix that drive verify->fix->re-verify, not halts.
    
    - reviewWithFixLoop (frontend only, via if(fe)): at the approve gate, behaviorSubGate boots this FE's full stack + seeds sentinels, enumerates this FE's routes, two-tier asserts. Hard issues with a locator -> fixPrompt -> functional reverify -> next behaviorRound; soft text (i18n/literal/semantic) -> adjudicate(continue); behaviorRound bounded by BEHAVIOR_FE_MAX=3, env race by BEHAVIOR_ATTEMPT_MAX=2. Backend featureLoop branch unchanged.
    
    - New runFrontendSkeleton stage (before featureLoop(frontend)): App shell + full lazy router + FeStub placeholders + shared nav, so the app is buildable at every mid-phase point; tdd swaps FeStub->real component per FE. Idempotent via fe-skeleton-done tag.
    
    - BEHAVIOR_GATE_SCHEMA gains build-failed envError kind (sibling-FE-unimpl short-circuit, not a bug) + locator-not-resolvable coverage reason; deriveSpec emits a per-FE route-scope section, reviewer validates it.
    
    - Removed phase-level runBehaviorGate + 'Behavior' phase; kept phase-level testGate (regression). REVIEW_HARD_ROUNDS 8->10.
    
    - Safety: test-DB naming guard pushed into scripts-setup-test-db.mjs template (fail-closed unless name contains test/_dev/_local or ALLOW_NONTEST_DROP=1) + 3 tests.
    
    - agentType stays erp-workflow:code-reviewer. v1 design doc marked SUPERSEDED; v2 design at docs/design/2026-06-02-frontend-behavior-in-review-loop.md.
    
    Verified: wrapped syntax check SYNTAX_OK, 87/87 lib tests pass, no orphan refs, no time/random builtins, top-level return intact. Not yet run end-to-end against a real ERP project.
    zichun authored
     
    Browse File »
  • New 'Behavior' stage between Gate and Milestone, frontend-phase only, after testGate green and before report/milestone. Verifies every interactive control actually works and every text region shows the right content, independent of the tests the tdd agent wrote.
    
    - BEHAVIOR_GATE_SCHEMA / behaviorGateContract() / behaviorGatePrompt() / runBehaviorGate(); reportPrompt now gates the milestone on behavior-gate evidence (frontend-phase-behavior-gate-r*.md, last attempt must be non-RED).
    
    - Two-tier failure: interaction defects (incl. binding-garbage) flake-retry once then hard-halt via adjudicate(allowContinue:false); text issues split by source (sentinel=objective -> no continue; i18n/literal/semantic=adjudicable). Convergence loop re-runs the env + interaction hard gates after any text-layer retry so a refreshed result can't slip a green past the hard gates.
    
    - Full-stack seeded run: test-DB name guard (deterministic halt, not adjudicated), strict 4-phase ordering (empty DB -> boot backend so Flyway builds schema -> seed -> boot frontend), auth bootstrap via storageState, router-config-driven route discovery, ephemeral .tmp/behavior-gate runner with finally teardown, type-legal per-field-unique sentinels.
    
    - agentType uses the plugin-namespaced 'erp-workflow:code-reviewer' (a bare 'code-reviewer' is ambiguous with feature-dev:code-reviewer); README + agents/code-reviewer.md aligned (frontmatter name: stays bare).
    
    - Design: docs/design/2026-06-02-frontend-behavior-gate.md. README + coding-start banner updated.
    zichun authored
     
    Browse File »

  • …n-check + projectRoot
    
    git 就绪(默认分支/工作树干净/功能分支创建与合并)改由 coding.mjs runBranchSetup 运行时把守;
    入口只校验 Plan 完成态(docs/08 §一 全勾)并取 projectRoot 绝对路径传入 Workflow。
    相应收窄 allowed-tools(去掉 git status/branch/checkout 授权)。
    zichun authored
     
    Browse Dir »
  • 缺值类(A)改为 stage 自主决策继续并登记 decisions[];结构违约/重试耗尽(B/C)经新增 adjudicate() 仲裁
    retry/continue/halt(runStage/runAction 包装,ADJUDICATE_MAX=3);dirty 工作树自主恢复(带分支护栏,
    非功能分支/越界改动仍 halt)。review 软5/硬8 轮;docs/08 checkbox 降级为纯可视化(req-done tag 为真值)。
    
    硬边界保持: merge 冲突 / invalid-projectRoot / assertSafeId 注入护栏 / 红色测试绝不 continue 跳过
    (verify/reverify/tdd/report allowContinue:false)。JS HALT throw 37->26。
    zichun authored
     
    Browse Code »

  • zichun authored
     
    Browse Dir »
  • validate-ddl now recognizes the db-init A.1 DDL form (CREATE TABLE →
    CREATE INDEX → ALTER TABLE ADD FK), so schemas with out-of-body indexes/
    FKs no longer report false-positive index/FK diffs. Adds a second parse
    pass (mergeStandaloneIndexes / mergeStandaloneForeignKeys), string-literal
    blanking so DEFAULT/COMMENT text isn't mistaken for real DDL, backtick
    non-ASCII identifier support across all matchers (H3), and shared index-
    column normalization (strip backtick / prefix-length / ASC|DESC) on both
    docs and DDL sides. Chinese 主键/唯一 index labels map to PRIMARY/UNIQUE.
    
    apply-ddl resolves mysql2 from the target project dir (not the plugin),
    rejects 【人工填写】 credential placeholders before connecting, and exits 2
    on missing config/DDL paths. setup-test-db template validates schema as an
    ASCII identifier before interpolating it into DROP/CREATE. db-init gains a
    B.1 toolchain precheck (mysql2 module + mysql client) before any DROP.
    zichun authored
     
    Browse Code »
  • - db-design-gen: drop unused `AskUserQuestion` grant (the A0 convention-
      confirm step was removed; conventions are now fixed in step B). Update the
      stale README A3 row that still described the dropped AskUserQuestion flow.
    - downstream-gen: drop unused `Skill` grant (terminal A step — it stops for
      /plan-start, never dispatches).
    - skeleton-gen: QA banner 产出清单 referenced docs/07, which was removed
      (the skill itself states A2 no longer emits docs/06/07/09) → drop it.
    - project-init: align description with body + README — dependency check is
      auto-install-then-stop, not give-instructions-and-stop.
    zichun authored
     
    Browse Dir »
  • - check 1 grep set: remove `待补` — it is used nowhere as a placeholder
      convention (real tokens are 【人工填写:…】 / TBD(...) / {{...}}), so it
      matched nothing.
    - replace the inaccurate "(与 scope-lock E.1 同集合)" note: this terminal gate
      greps a superset (`{{` + `TBD` + `【人工填写`) precisely because the
      TBD(A3/A5 自动补) placeholders legitimately deferred at A1 must be resolved
      by now — explaining the value-add over E.1 instead of claiming false parity.
    zichun authored
     
    Browse Dir »
  • - docs/10 was generated once at A5 and never read back by any skill,
      workflow, or gate (the `acceptance` hits elsewhere are the per-REQ card
      field, unrelated). Removing it costs the pipeline nothing.
    - delete docs-10-header-template.md; drop step E + its checkbox, banner
      entry, description mention, and reference-list entry from the skill;
      renumber old step F → E.
    - drop the docs/10 checkbox from docs-08-initial-template.md.
    - update README (A5 flow line, A5 table row, template-table row).
    zichun authored
     
    Browse Dir »
  • - docs-05 header: collapse the `## 全局约定` block (response-format JSON +
      auth/pagination placeholders) into a single pointer to docs/04 (the
      conventions SSoT). Also fixes a broken ref — it cited "docs/04 § 1.4
      错误码段位", but § 1.4 is 统一响应格式 and no such section exists.
    - docs-02: remove the free-form `## 三、关键说明 {{notes}}` filler section
      (the skill defines no source for it).
    zichun authored
     
    Browse Dir »
  • - resolveDbConfig only ever received the 5 DB_* keys dbEnvFromConfig emits;
      the MYSQL_*/DB_PASS/DB_NAME fallbacks had no producer (dead speculative
      generality, a dotenv-era leftover). Remove them.
    - collapse the config → DB_* env-shape → connection two-hop: resolveDbConfig
      now reads config.database.{host,port,user,password,schema} directly, and
      dbEnvFromConfig is removed.
    - CLI contract (node apply-ddl.mjs <configPath> <ddlPath>), the only caller
      via db-init, is unchanged.
    - rewrite tests to the parsed-config shape; drop the alias-only tests. 53 pass.
    zichun authored
     
    Browse Dir »