-
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.
-
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.
-
- config-vars.yaml now holds全部 config incl. secrets (database/admin_init.password/secrets), committed - delete env-local-template; setup-test-db reads config-vars.yaml; gitignore no longer ignores .env.local - docs-07 single-store rule; db-init/db-design-gen read config-vars.yaml database: section - drop test_db_allowed_hosts whitelist + schema-looks-like-test guard (trust config-vars.yaml)
-
Visual clarity: the file tree now matches the README's phase model. - skills/plan/ — 8 skills (plan-start entry + A0~A6) - skills/coding/ — 1 skill (coding-start thin entry) Slugs unchanged. /erp-workflow:<name> still resolves identically because each SKILL.md declares its own `name:` frontmatter (verified for all 9). Plugin loader treats the default `./skills/` scan as flat, so the nested layout is opted into via an explicit path array in plugin.json — the only mechanism Claude Code provides for nested skill discovery. Changes: - mv skills/{plan-start,project-init,scope-lock,skeleton-gen, db-design-gen,db-init,downstream-gen,frontend-scope-lock} → skills/plan/<same>/ - mv skills/coding-start → skills/coding/coding-start/ - .claude-plugin/plugin.json: skills[] now lists all 9 explicit paths - README.md: directory tree + Skill 清单 heading updated to reflect grouping No code touches any skill path (only README did, and only in the tree diagram). lib tests still pass (62/62).