4.5 KiB
Enum Value Transport And SysEnum Sync 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: Unify long-lived structured text fields to use enum values for transport, and rebuild sys_enum from enum definitions through a delete-then-insert synchronization flow.
Architecture: Add a shared enum definition contract in the backend, let existing enums implement it, and refactor enum initialization to rebuild each catalog + type group from code. Update the RAG parse request and frontend page to submit enum values instead of enum names.
Tech Stack: Java 21, Spring Boot, MyBatis-Plus, JUnit 5, Vue 3, TypeScript, Vitest
Task 1: Lock Request Protocol With Failing Tests
Files:
-
Modify:
src/test/java/com/bruce/rag/RagDocumentParseServiceImplTests.java -
Modify:
frontend/src/pages/rag/__tests__/RagDocumentsPage.spec.ts -
Step 1: Write the failing test
-
Step 2: Run targeted backend and frontend tests to verify they fail because the old string protocol is still in place
-
Step 3: Update assertions to require integer enum values for
chunkStrategy -
Step 4: Re-run targeted tests and keep them red until implementation exists
Task 2: Implement Backend Enum Definition Contract
Files:
-
Create:
src/main/java/com/bruce/common/enums/PersistableSysEnumDefinition.java -
Modify:
src/main/java/com/bruce/common/enums/EnableStatusEnum.java -
Modify:
src/main/java/com/bruce/common/enums/CommonStatusEnum.java -
Modify:
src/main/java/com/bruce/rag/enums/RagParseStatusEnum.java -
Modify:
src/main/java/com/bruce/rag/enums/RagIndexStatusEnum.java -
Modify:
src/main/java/com/bruce/rag/enums/RagChunkStrategyEnum.java -
Modify:
src/test/java/com/bruce/common/enumconfig/EnumDefinitionTests.java -
Step 1: Write or extend failing tests for enum metadata access and stable value lookup
-
Step 2: Run backend enum tests to verify failure
-
Step 3: Implement the shared enum definition contract and make existing enums implement it
-
Step 4: Add
fromValue(Integer)support where needed and rerun tests to green
Task 3: Rebuild SysEnum Initialization Flow
Files:
-
Modify:
src/test/java/com/bruce/common/enumconfig/SysEnumDataInitTests.java -
Create or Modify:
src/test/java/com/bruce/common/enumconfig/...supporting tests as needed -
Modify:
src/main/java/com/bruce/common/service/ISysEnumService.java -
Modify:
src/main/java/com/bruce/common/service/impl/SysEnumServiceImpl.java -
Step 1: Write failing tests for duplicate
catalog + type, duplicate value detection, and delete-then-insert rebuild behavior -
Step 2: Run targeted backend tests to verify failure
-
Step 3: Add service support for removing and rebuilding a whole enum group
-
Step 4: Refactor enum init test to register enum groups, validate uniqueness, delete old rows, and batch insert the new rows
-
Step 5: Re-run targeted backend tests to green
Task 4: Switch RAG Parse Request To Integer Enum Values
Files:
-
Modify:
src/main/java/com/bruce/rag/dto/request/RagDocumentParseRequest.java -
Modify:
src/main/java/com/bruce/rag/parse/RagChunkCommand.java -
Modify:
src/main/java/com/bruce/rag/service/impl/RagDocumentParseServiceImpl.java -
Modify:
src/test/java/com/bruce/rag/RagDocumentParseServiceImplTests.java -
Step 1: Confirm failing backend parse tests expect integer values
-
Step 2: Change DTOs and validation logic to use enum values
-
Step 3: Re-run targeted backend parse tests to green
Task 5: Update Frontend To Use Enum Values
Files:
-
Modify:
frontend/src/api/ragDocuments.ts -
Modify:
frontend/src/pages/rag/RagDocumentsPage.vue -
Modify:
frontend/src/pages/rag/__tests__/RagDocumentsPage.spec.ts -
Step 1: Confirm frontend parse request test is red for numeric enum values
-
Step 2: Change API typing, page defaults, options, and comparisons to numeric enum values
-
Step 3: Re-run targeted frontend tests to green
Task 6: Record Project Convention
Files:
-
Modify:
AGENT.md -
Modify:
docs/ARCHITECTURE.md -
Step 1: Add the long-term convention that stable structured text uses enum values for transport
-
Step 2: Add the rule that enum changes must be synchronized into
sys_enumthrough the initialization test -
Step 3: Do a final focused verification run