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>
21 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | requirements | must_haves | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 02-transaction-search-diagrams | 03 | execute | 2 |
|
|
true |
|
|
Purpose: This is the core query capability of Phase 2 — users need to find transactions by any combination of filters and drill into execution details. The search engine abstraction allows future swap to OpenSearch.
Output: SearchController (GET + POST), DetailController, ClickHouseSearchEngine, TreeReconstructionTest, SearchControllerIT, DetailControllerIT.
<execution_context> @C:/Users/Hendrik/.claude/get-shit-done/workflows/execute-plan.md @C:/Users/Hendrik/.claude/get-shit-done/templates/summary.md </execution_context>
@.planning/PROJECT.md @.planning/ROADMAP.md @.planning/phases/02-transaction-search-diagrams/02-CONTEXT.md @.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md @.planning/phases/02-transaction-search-diagrams/02-01-SUMMARY.md@clickhouse/init/01-schema.sql @clickhouse/init/02-search-columns.sql @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
From cameleer-server-core/.../search/SearchEngine.java:
public interface SearchEngine {
SearchResult<ExecutionSummary> search(SearchRequest request);
long count(SearchRequest request);
}
From cameleer-server-core/.../search/SearchRequest.java:
public record SearchRequest(
String status, // nullable, filter by ExecutionStatus name
Instant timeFrom, // nullable, start_time >= this
Instant timeTo, // nullable, start_time <= this
Long durationMin, // nullable, duration_ms >= this
Long durationMax, // nullable, duration_ms <= this
String correlationId, // nullable, exact match
String text, // nullable, global full-text LIKE across all text fields
String textInBody, // nullable, LIKE on exchange_bodies only
String textInHeaders, // nullable, LIKE on exchange_headers only
String textInErrors, // nullable, LIKE on error_message + error_stacktrace
int offset,
int limit
) { /* compact constructor with validation */ }
From cameleer-server-core/.../search/SearchResult.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 cameleer-server-core/.../search/ExecutionSummary.java:
public record ExecutionSummary(
String executionId, String routeId, String agentId, String status,
Instant startTime, Instant endTime, long durationMs,
String correlationId, String errorMessage, String diagramContentHash
) {}
From cameleer-server-core/.../detail/DetailService.java:
public class DetailService {
// Constructor takes ExecutionRepository (or a query interface)
public Optional<ExecutionDetail> getDetail(String executionId);
// Internal: reconstructTree(parallel arrays) -> List<ProcessorNode>
}
From cameleer-server-core/.../detail/ExecutionDetail.java:
public record ExecutionDetail(
String executionId, String routeId, String agentId, String status,
Instant startTime, Instant endTime, long durationMs,
String correlationId, String exchangeId, String errorMessage,
String errorStackTrace, String diagramContentHash,
List<ProcessorNode> processors
) {}
From cameleer-server-core/.../detail/ProcessorNode.java:
public record ProcessorNode(
String processorId, String processorType, String status,
Instant startTime, Instant endTime, long durationMs,
String diagramNodeId, String errorMessage, String errorStackTrace,
List<ProcessorNode> children
) {}
Existing ClickHouse schema (after Plan 01 schema extension):
-- route_executions columns:
-- execution_id, route_id, agent_id, status, start_time, end_time,
-- duration_ms, correlation_id, exchange_id, error_message, error_stacktrace,
-- processor_ids, processor_types, processor_starts, processor_ends,
-- processor_durations, processor_statuses,
-- exchange_bodies, exchange_headers,
-- processor_depths, processor_parent_indexes,
-- processor_error_messages, processor_error_stacktraces,
-- processor_input_bodies, processor_output_bodies,
-- processor_input_headers, processor_output_headers,
-- processor_diagram_node_ids, diagram_content_hash,
-- server_received_at
-- ORDER BY (agent_id, status, start_time, execution_id)
Established controller pattern (from Phase 1):
// Controllers accept raw String body for single/array flexibility
// Return 202 for ingestion, standard REST responses for queries
// ProtocolVersionInterceptor validates X-Cameleer-Protocol-Version: 1 header