3.2 KiB
Rule DSL Extract Preservation Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Prevent the rule editor from deleting extract declarations when backend rule summaries are present.
Architecture: Parse the full YAML into the frontend pack first, then overlay backend rule summaries only for the rule list. Add a save-time guard so a lossy editor model cannot overwrite existing YAML sections with empty generated sections.
Tech Stack: Next.js frontend utilities, TypeScript, Node test runner, yaml package.
Task 1: Preserve parsed YAML fields when summary rules are returned
Files:
-
Modify:
legal-platform-frontend/lib/utils/rules-config-packs.server.ts -
Test:
legal-platform-frontend/tests/govdoc-audit/rule-config-pack-summary-preserve.test.mts -
Step 1: Write failing test
Create a test that calls mapApiPackToRuleYamlPack with both yamlText and rules, then asserts that fields still contains 委托方.
- Step 2: Run failing test
Run: cd legal-platform-frontend && node --import tsx --test tests/govdoc-audit/rule-config-pack-summary-preserve.test.mts
Expected: FAIL because current summary branch returns fields: [].
- Step 3: Implement minimal mapping fix
Change mapApiPackToRuleYamlPack to always build basePack = buildRuleYamlPack(...), then return { ...basePack, rules: normalizedRules, stats: { ...basePack.stats, ruleCount: normalizedRules.length } }.
- Step 4: Run passing test
Run: cd legal-platform-frontend && node --import tsx --test tests/govdoc-audit/rule-config-pack-summary-preserve.test.mts
Expected: PASS.
Task 2: Add save-time lossy section guard
Files:
-
Modify:
legal-platform-frontend/lib/utils/rules-config-editor.ts -
Test:
legal-platform-frontend/tests/govdoc-audit/rule-config-editor-preserve.test.mts -
Step 1: Write failing test
Create a test that serializes a config with original yamlSource.extract but empty fields, and assert it throws a clear error instead of returning YAML with extract: [].
- Step 2: Run failing test
Run: cd legal-platform-frontend && node --import tsx --test tests/govdoc-audit/rule-config-editor-preserve.test.mts
Expected: FAIL because current serializer silently overwrites extract.
- Step 3: Implement guard
Before assigning root.extract, check whether the original YAML section exists and the editor model is empty. Throw 字段抽取配置未加载完成,已阻止保存,避免覆盖原 YAML extract。.
- Step 4: Run passing test
Run: cd legal-platform-frontend && node --import tsx --test tests/govdoc-audit/rule-config-editor-preserve.test.mts
Expected: PASS.
Task 3: Verify current JY rule remains valid after frontend serialization
Files:
-
No production code changes expected.
-
Step 1: Run focused frontend tests
Run both new tests plus existing rule YAML parser tests.
- Step 2: Run backend validator smoke test
Use RuleValidator on a representative YAML to confirm extract and rule field references are coherent.