chore: rename cameleer3 to cameleer
Rename Java packages from com.cameleer3 to com.cameleer, module directories from cameleer3-* to cameleer-*, and all references throughout workflows, Dockerfiles, docs, migrations, and pom.xml. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,14 +6,14 @@ wave: 2
|
||||
depends_on:
|
||||
- "02-01"
|
||||
files_modified:
|
||||
- cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java
|
||||
- cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java
|
||||
- cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java
|
||||
- cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java
|
||||
- cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java
|
||||
- cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java
|
||||
- cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java
|
||||
- cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java
|
||||
- cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java
|
||||
- cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java
|
||||
- cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java
|
||||
- cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java
|
||||
- cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java
|
||||
- cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java
|
||||
- cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java
|
||||
- cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java
|
||||
autonomous: true
|
||||
requirements:
|
||||
- SRCH-01
|
||||
@@ -35,16 +35,16 @@ must_haves:
|
||||
- "Detail response includes diagramContentHash for linking to diagram endpoint"
|
||||
- "Search results are paginated with total count, offset, and limit"
|
||||
artifacts:
|
||||
- path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java"
|
||||
- path: "cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java"
|
||||
provides: "ClickHouse implementation of SearchEngine with dynamic WHERE building"
|
||||
min_lines: 80
|
||||
- path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java"
|
||||
- path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java"
|
||||
provides: "GET + POST /api/v1/search/executions endpoints"
|
||||
exports: ["SearchController"]
|
||||
- path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java"
|
||||
- path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java"
|
||||
provides: "GET /api/v1/executions/{id} endpoint returning nested tree"
|
||||
exports: ["DetailController"]
|
||||
- path: "cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java"
|
||||
- path: "cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java"
|
||||
provides: "Integration tests for all search filter combinations"
|
||||
min_lines: 100
|
||||
key_links:
|
||||
@@ -92,13 +92,13 @@ Output: SearchController (GET + POST), DetailController, ClickHouseSearchEngine,
|
||||
|
||||
@clickhouse/init/01-schema.sql
|
||||
@clickhouse/init/02-search-columns.sql
|
||||
@cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java
|
||||
@cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java
|
||||
@cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java
|
||||
@cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java
|
||||
|
||||
<interfaces>
|
||||
<!-- Core types created by Plan 01 — executor reads these from plan 01 SUMMARY -->
|
||||
|
||||
From cameleer3-server-core/.../search/SearchEngine.java:
|
||||
From cameleer-server-core/.../search/SearchEngine.java:
|
||||
```java
|
||||
public interface SearchEngine {
|
||||
SearchResult<ExecutionSummary> search(SearchRequest request);
|
||||
@@ -106,7 +106,7 @@ public interface SearchEngine {
|
||||
}
|
||||
```
|
||||
|
||||
From cameleer3-server-core/.../search/SearchRequest.java:
|
||||
From cameleer-server-core/.../search/SearchRequest.java:
|
||||
```java
|
||||
public record SearchRequest(
|
||||
String status, // nullable, filter by ExecutionStatus name
|
||||
@@ -124,14 +124,14 @@ public record SearchRequest(
|
||||
) { /* compact constructor with validation */ }
|
||||
```
|
||||
|
||||
From cameleer3-server-core/.../search/SearchResult.java:
|
||||
From cameleer-server-core/.../search/SearchResult.java:
|
||||
```java
|
||||
public record SearchResult<T>(List<T> data, long total, int offset, int limit) {
|
||||
public static <T> SearchResult<T> empty(int offset, int limit);
|
||||
}
|
||||
```
|
||||
|
||||
From cameleer3-server-core/.../search/ExecutionSummary.java:
|
||||
From cameleer-server-core/.../search/ExecutionSummary.java:
|
||||
```java
|
||||
public record ExecutionSummary(
|
||||
String executionId, String routeId, String agentId, String status,
|
||||
@@ -140,7 +140,7 @@ public record ExecutionSummary(
|
||||
) {}
|
||||
```
|
||||
|
||||
From cameleer3-server-core/.../detail/DetailService.java:
|
||||
From cameleer-server-core/.../detail/DetailService.java:
|
||||
```java
|
||||
public class DetailService {
|
||||
// Constructor takes ExecutionRepository (or a query interface)
|
||||
@@ -149,7 +149,7 @@ public class DetailService {
|
||||
}
|
||||
```
|
||||
|
||||
From cameleer3-server-core/.../detail/ExecutionDetail.java:
|
||||
From cameleer-server-core/.../detail/ExecutionDetail.java:
|
||||
```java
|
||||
public record ExecutionDetail(
|
||||
String executionId, String routeId, String agentId, String status,
|
||||
@@ -160,7 +160,7 @@ public record ExecutionDetail(
|
||||
) {}
|
||||
```
|
||||
|
||||
From cameleer3-server-core/.../detail/ProcessorNode.java:
|
||||
From cameleer-server-core/.../detail/ProcessorNode.java:
|
||||
```java
|
||||
public record ProcessorNode(
|
||||
String processorId, String processorType, String status,
|
||||
@@ -201,10 +201,10 @@ Established controller pattern (from Phase 1):
|
||||
<task type="auto" tdd="true">
|
||||
<name>Task 1: ClickHouseSearchEngine, SearchController, and search integration tests</name>
|
||||
<files>
|
||||
cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java,
|
||||
cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java,
|
||||
cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java,
|
||||
cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java
|
||||
cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java,
|
||||
cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java,
|
||||
cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java,
|
||||
cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java
|
||||
</files>
|
||||
<behavior>
|
||||
- Test searchByStatus: Insert 3 executions (COMPLETED, FAILED, RUNNING). GET /api/v1/search/executions?status=FAILED returns only the FAILED execution. Response has envelope: {"data":[...],"total":1,"offset":0,"limit":50}
|
||||
@@ -221,7 +221,7 @@ Established controller pattern (from Phase 1):
|
||||
- Test emptyResults: Search with no matches returns {"data":[],"total":0,"offset":0,"limit":50}
|
||||
</behavior>
|
||||
<action>
|
||||
1. Create `ClickHouseSearchEngine` in `com.cameleer3.server.app.search`:
|
||||
1. Create `ClickHouseSearchEngine` in `com.cameleer.server.app.search`:
|
||||
- Implements SearchEngine interface from core module.
|
||||
- Constructor takes JdbcTemplate.
|
||||
- `search(SearchRequest)` method:
|
||||
@@ -244,13 +244,13 @@ Established controller pattern (from Phase 1):
|
||||
- `escapeLike(String)` utility: escape `%`, `_`, `\` characters in user input to prevent LIKE injection. Replace `\` with `\\`, `%` with `\%`, `_` with `\_`.
|
||||
- `count(SearchRequest)` method: same WHERE building, just count query.
|
||||
|
||||
2. Create `SearchBeanConfig` in `com.cameleer3.server.app.config`:
|
||||
2. Create `SearchBeanConfig` in `com.cameleer.server.app.config`:
|
||||
- @Configuration class that creates:
|
||||
- `ClickHouseSearchEngine` bean (takes JdbcTemplate)
|
||||
- `SearchService` bean (takes SearchEngine)
|
||||
- `DetailService` bean (takes the execution query interface from Plan 01)
|
||||
|
||||
3. Create `SearchController` in `com.cameleer3.server.app.controller`:
|
||||
3. Create `SearchController` in `com.cameleer.server.app.controller`:
|
||||
- Inject SearchService.
|
||||
- `GET /api/v1/search/executions` with @RequestParam for basic filters:
|
||||
- status (optional String)
|
||||
@@ -274,7 +274,7 @@ Established controller pattern (from Phase 1):
|
||||
- Assert response structure matches the envelope format.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT</automated>
|
||||
<automated>cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-app -Dtest=SearchControllerIT</automated>
|
||||
</verify>
|
||||
<done>All search filter types work independently and in combination, response envelope has correct format, pagination works correctly, full-text search finds matches in all text fields, LIKE patterns are properly escaped</done>
|
||||
</task>
|
||||
@@ -282,10 +282,10 @@ Established controller pattern (from Phase 1):
|
||||
<task type="auto" tdd="true">
|
||||
<name>Task 2: DetailController, tree reconstruction, exchange snapshot endpoint, and integration tests</name>
|
||||
<files>
|
||||
cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java,
|
||||
cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java,
|
||||
cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java,
|
||||
cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java
|
||||
cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java,
|
||||
cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java,
|
||||
cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java,
|
||||
cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java
|
||||
</files>
|
||||
<behavior>
|
||||
- Unit test: reconstructTree with [root, child, grandchild], depths=[0,1,2], parents=[-1,0,1] produces single root with one child that has one grandchild
|
||||
@@ -308,7 +308,7 @@ Established controller pattern (from Phase 1):
|
||||
- Add `findRawById(String executionId)` method that queries all columns from route_executions WHERE execution_id = ?. Return Optional<RawExecutionRow> (use the record created in Plan 01 or create it here if needed). The RawExecutionRow should contain ALL columns including the parallel arrays for processors.
|
||||
- Add `findProcessorSnapshot(String executionId, int processorIndex)` method: queries processor_input_bodies[index+1], processor_output_bodies[index+1], processor_input_headers[index+1], processor_output_headers[index+1] for the given execution. Returns a DTO with inputBody, outputBody, inputHeaders, outputHeaders. ClickHouse arrays are 1-indexed in SQL, so add 1 to the Java 0-based index.
|
||||
|
||||
3. Create `DetailController` in `com.cameleer3.server.app.controller`:
|
||||
3. Create `DetailController` in `com.cameleer.server.app.controller`:
|
||||
- Inject DetailService.
|
||||
- `GET /api/v1/executions/{executionId}`: call detailService.getDetail(executionId). If empty, return 404. Otherwise return 200 with ExecutionDetail JSON. The processors field is a nested tree of ProcessorNode objects.
|
||||
- `GET /api/v1/executions/{executionId}/processors/{index}/snapshot`: call repository's findProcessorSnapshot. If execution not found or index out of bounds, return 404. Return JSON with inputBody, outputBody, inputHeaders, outputHeaders. Per user decision: exchange snapshot data fetched separately per processor, not inlined in detail response.
|
||||
@@ -323,7 +323,7 @@ Established controller pattern (from Phase 1):
|
||||
- Test GET /api/v1/executions/{id}/processors/999/snapshot: returns 404 for out-of-bounds index.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-core -Dtest=TreeReconstructionTest && mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT</automated>
|
||||
<automated>cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-core -Dtest=TreeReconstructionTest && mvn test -pl cameleer-server-app -Dtest=DetailControllerIT</automated>
|
||||
</verify>
|
||||
<done>Tree reconstruction correctly rebuilds nested processor trees from flat arrays, detail endpoint returns nested tree with all fields, snapshot endpoint returns per-processor exchange data, diagram hash included in detail response, all tests pass</done>
|
||||
</task>
|
||||
@@ -331,9 +331,9 @@ Established controller pattern (from Phase 1):
|
||||
</tasks>
|
||||
|
||||
<verification>
|
||||
- `mvn test -pl cameleer3-server-core -Dtest=TreeReconstructionTest` passes (unit test for tree rebuild)
|
||||
- `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT` passes (all search filters)
|
||||
- `mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT` passes (detail + snapshot)
|
||||
- `mvn test -pl cameleer-server-core -Dtest=TreeReconstructionTest` passes (unit test for tree rebuild)
|
||||
- `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT` passes (all search filters)
|
||||
- `mvn test -pl cameleer-server-app -Dtest=DetailControllerIT` passes (detail + snapshot)
|
||||
- `mvn clean verify` passes (full suite green)
|
||||
</verification>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user