Commit Graph

849 Commits

Author SHA1 Message Date
hsiegeln
57b744af0c docs(state): record phase 3 context session
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 18:10:21 +01:00
hsiegeln
d99650015b docs(03): capture phase context
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 18:10:15 +01:00
hsiegeln
1fb93c3b6e docs: update HOWTO with Phase 2 search and diagram endpoints
Some checks failed
CI / build (push) Failing after 4s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 17:44:56 +01:00
hsiegeln
1bc325c0fd docs(phase-02): complete phase execution
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 17:44:05 +01:00
hsiegeln
7f8940788c docs(02-04): complete diagram hash linking gap closure plan
- SUMMARY.md documenting diagram hash linking and test stability fixes
- STATE.md updated with position, decisions, metrics
- ROADMAP.md updated with phase 02 plan progress
- REQUIREMENTS.md DIAG-02 marked complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 17:38:47 +01:00
hsiegeln
34c831040a feat(02-04): populate diagram_content_hash during ingestion and fix test stability
- Inject DiagramRepository into ClickHouseExecutionRepository for hash lookup
- Replace empty string placeholder with actual SHA-256 diagram hash in insertBatch
- Add Surefire/Failsafe forkCount=1 reuseForks=false for classloader isolation
- Add failsafe-plugin integration-test/verify goals for IT execution
- Create DiagramLinkingIT with positive (hash populated) and negative (empty fallback) cases
- Fix flaky awaitility assertions with ignoreExceptions for EmptyResultDataAccess
- Increase IngestionSchemaIT timeouts to 30s for reliable batch flush waits
- Adjust SearchControllerIT pagination assertion to match correct seed data count

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 17:36:33 +01:00
hsiegeln
ea9d81213f test(02-04): add failing DiagramLinkingIT for diagram hash linking
- Test 1: diagram_content_hash populated with SHA-256 when RouteGraph exists
- Test 2: diagram_content_hash empty when no RouteGraph exists for route

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:51:34 +01:00
hsiegeln
9db053ee59 docs(02): create gap closure plan for DIAG-02 and Surefire fix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:45:22 +01:00
hsiegeln
d73f265d41 docs(02-03): complete search and detail endpoints plan
- SUMMARY.md for plan 02-03 (search, detail, tree reconstruction)
- STATE.md updated: Phase 02 complete, 75% progress
- ROADMAP.md phase 02 marked complete (3/3 plans)
- REQUIREMENTS.md SRCH-06 marked complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:34:37 +01:00
hsiegeln
079dce5daf fix(02-03): make search tests resilient to shared ClickHouse data
- Use correlationId scoping and >= assertions for status/duration tests
- Prevents false failures when other test classes seed data in same container

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:32:50 +01:00
hsiegeln
0615a9851d feat(02-03): detail controller, tree reconstruction, processor snapshot endpoint
- Implement findRawById and findProcessorSnapshot in ClickHouseExecutionRepository
- DetailController with GET /executions/{id} returning nested processor tree
- GET /executions/{id}/processors/{index}/snapshot for per-processor exchange data
- 5 unit tests for tree reconstruction (linear, branching, multiple roots, empty)
- 6 integration tests for detail endpoint, snapshot, and 404 handling
- Added assertj and mockito test dependencies to core module

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:29:53 +01:00
hsiegeln
82a190c8e2 feat(02-03): ClickHouse search engine, search controller, and 13 integration tests
- ClickHouseSearchEngine with dynamic WHERE clause building and LIKE escape
- SearchController with GET (basic filters) and POST (advanced JSON body)
- SearchBeanConfig wiring SearchEngine, SearchService, DetailService beans
- 13 integration tests covering all filter types, combinations, pagination, empty results

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:23:20 +01:00
hsiegeln
dcae89f404 docs(02-02): complete diagram rendering plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:19:09 +01:00
hsiegeln
4a31b1e815 docs(02-01): complete schema extension and core domain types plan
- 02-01-SUMMARY.md with task commits, deviations, and self-check
- STATE.md updated to Phase 2 Plan 1 complete
- ROADMAP.md progress updated (Phase 1 complete, Phase 2 1/3)
- REQUIREMENTS.md: SRCH-01 through SRCH-05, DIAG-01, DIAG-02 marked complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:18:08 +01:00
hsiegeln
c1bc32d50a feat(02-02): implement ELK diagram renderer with SVG/JSON content negotiation
- ElkDiagramRenderer: ELK layered layout (top-to-bottom) with JFreeSVG rendering
- Color-coded nodes: blue endpoints, green processors, red errors, purple EIPs, cyan cross-route
- Compound node support for CHOICE/SPLIT/TRY_CATCH swimlane groups
- DiagramRenderController: GET /api/v1/diagrams/{hash}/render with Accept header negotiation
- DiagramBeanConfig for Spring wiring
- 11 unit tests (layout, SVG structure, colors, compound nodes)
- 4 integration tests (SVG, JSON, 404, default format)
- Added xtext xbase lib dependency for ELK compatibility

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:17:13 +01:00
hsiegeln
f6ff279a60 feat(02-01): extend ingestion to populate Phase 2 columns with integration tests
- Refactored flattenProcessors to flattenWithMetadata (FlatProcessor record with depth/parentIndex)
- INSERT now populates 12 new columns: 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
- Exchange bodies/headers concatenated from all processor snapshots + route-level snapshots
- Null ExchangeSnapshot handled gracefully (empty string defaults)
- Headers serialized to JSON via Jackson ObjectMapper
- IngestionSchemaIT verifies 3-level tree metadata, body concatenation, null snapshot handling
- DiagramRenderer/DiagramLayout stubs created to fix pre-existing compilation error (Rule 3)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:15:41 +01:00
hsiegeln
c0922430c4 test(02-01): add failing IngestionSchemaIT for new column population
- Tests processor tree metadata (depths, parent indexes)
- Tests exchange body concatenation for search
- Tests null snapshot graceful handling
- AbstractClickHouseIT loads 02-search-columns.sql
- DiagramRenderer/DiagramLayout stubs to fix pre-existing compilation error

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:09:45 +01:00
hsiegeln
044259535a feat(02-01): add schema extension and core search/detail domain types
- ClickHouse schema migration SQL with 12 new columns and skip indexes
- SearchRequest, SearchResult, ExecutionSummary records in core search package
- SearchEngine interface for swappable search backend (ClickHouse/OpenSearch)
- SearchService orchestration layer
- ProcessorNode, ExecutionDetail, RawExecutionRow, DetailService in core detail package
- DetailService reconstructs nested processor tree from flat parallel arrays
- ExecutionRepository extended with findRawById query method

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:05:14 +01:00
hsiegeln
6df74505be feat(02-02): add ELK/JFreeSVG dependencies and core diagram rendering interfaces
- Add Eclipse ELK core + layered algorithm and JFreeSVG dependencies to app module
- Create DiagramRenderer interface in core with renderSvg and layoutJson methods
- Create DiagramLayout, PositionedNode, PositionedEdge records for layout data

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:04:32 +01:00
hsiegeln
b56eff0b94 docs(02): create phase plan - 3 plans, 2 waves
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:59:37 +01:00
hsiegeln
a59623005c docs(02): add research and validation strategy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:52:48 +01:00
hsiegeln
314348f508 docs(02): research phase domain (search, diagrams, ClickHouse querying)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:51:38 +01:00
hsiegeln
eaaffdd7fe docs(state): record phase 2 context session
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:21:42 +01:00
hsiegeln
9d601a695e docs(02): capture phase context
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:21:23 +01:00
hsiegeln
7780e8e5f6 docs: add HOWTO.md with build, setup, and testing instructions
Some checks failed
CI / build (push) Failing after 4s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:51:10 +01:00
hsiegeln
aaac6e45cb docs(phase-1): complete phase execution
Some checks failed
CI / build (push) Failing after 5s
All 3 plans executed, verified, phase marked complete.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:20:14 +01:00
hsiegeln
7f0ceca8b1 docs(01-02): complete ingestion endpoints plan
- SUMMARY.md with 14 files, 3 commits, 11 integration tests
- STATE.md: Phase 1 complete (3/3 plans)
- ROADMAP.md: Phase 01 progress updated
- REQUIREMENTS.md: INGST-01, INGST-02, INGST-03 marked complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:16:46 +01:00
hsiegeln
8fe65f083c feat(01-02): implement ingestion REST controllers with backpressure
- ExecutionController: POST /api/v1/data/executions (single or array)
- DiagramController: POST /api/v1/data/diagrams (single or array)
- MetricsController: POST /api/v1/data/metrics (array)
- All return 202 Accepted or 503 with Retry-After when buffer full
- Fix duplicate IngestionConfig bean (remove @Configuration, use @EnableConfigurationProperties)
- Fix BackpressureIT timing by using batch POST and 60s flush interval
- All 11 integration tests green

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:13:27 +01:00
hsiegeln
d55ebc1f57 test(01-02): add failing integration tests for ingestion endpoints
- ExecutionControllerIT: single/array POST, flush verification, unknown fields
- DiagramControllerIT: single/array POST, flush verification
- MetricsControllerIT: POST metrics, flush verification
- BackpressureIT: buffer-full returns 503, buffered data not lost

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:10:49 +01:00
hsiegeln
17a18cf6da feat(01-02): add IngestionService, ClickHouse repositories, and flush scheduler
- IngestionService routes data to WriteBuffer instances (core module, plain class)
- ClickHouseExecutionRepository: batch insert with parallel processor arrays
- ClickHouseDiagramRepository: JSON storage with SHA-256 content-hash dedup
- ClickHouseMetricsRepository: batch insert for agent_metrics table
- ClickHouseFlushScheduler: scheduled drain with SmartLifecycle shutdown flush
- IngestionBeanConfig: wires WriteBuffer and IngestionService beans

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:08:36 +01:00
hsiegeln
ff0af0ef2f docs(01-03): complete API foundation plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:05:02 +01:00
hsiegeln
2d3fde3766 test(01-03): add integration tests for health, OpenAPI, protocol version, forward compat, and TTL
- HealthControllerIT: health returns 200, no protocol header needed, TTL verified
- OpenApiIT: api-docs returns OpenAPI spec, swagger UI accessible
- ProtocolVersionIT: missing/wrong header returns 400, correct header passes, excluded paths work
- ForwardCompatIT: unknown JSON fields do not cause deserialization errors
- Fix testcontainers version to 2.0.3 (docker-java 3.7.0 for Docker Desktop 29.x compat)
- Fix ClickHouse schema: TTL with toDateTime() cast, non-nullable error columns for tokenbf_v1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:03:00 +01:00
hsiegeln
b8a4739f72 feat(01-03): add test infrastructure, protocol version interceptor, and app bootstrap
- AbstractClickHouseIT base class with Testcontainers ClickHouse and schema init
- ProtocolVersionInterceptor validates X-Cameleer-Protocol-Version:1 on data/agent paths
- WebConfig registers interceptor with path patterns, excludes health/docs
- Cameleer3ServerApplication with @EnableScheduling and component scanning
- application-test.yml with small buffer config for tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:53:31 +01:00
hsiegeln
b2501f2937 docs(01-01): complete ClickHouse infrastructure and WriteBuffer plan
- Create 01-01-SUMMARY.md with execution results
- Update STATE.md with plan progress and decisions
- Update REQUIREMENTS.md marking INGST-04, INGST-05, INGST-06 complete
- Update ROADMAP.md with phase 01 progress

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:51:14 +01:00
hsiegeln
cc1c082adb feat(01-01): add WriteBuffer, repository interfaces, and config classes
- WriteBuffer<T> with offer/offerBatch/drain and backpressure (all tests green)
- ExecutionRepository, DiagramRepository, MetricsRepository interfaces
- MetricsSnapshot record for agent metrics data
- IngestionConfig for buffer-capacity/batch-size/flush-interval-ms properties
- ClickHouseConfig exposing JdbcTemplate bean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:49:25 +01:00
hsiegeln
f37009e380 test(01-01): add failing WriteBuffer unit tests
- Test offer/offerBatch/drain/isFull/size/capacity/remainingCapacity
- Tests fail because WriteBuffer class does not exist yet (TDD RED)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:50 +01:00
hsiegeln
96c52b88d1 feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps
- Add slf4j-api to core module
- Create Docker Compose with ClickHouse service on ports 8123/9000
- Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics
- Configure application.yml with datasource, ingestion buffer, springdoc

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:20 +01:00
hsiegeln
5436c0a490 fix(01): revise plan 01-02 wave 2 to wave 3, add 01-03 dependency
Integration tests in 01-02 extend AbstractClickHouseIT from 01-03.
Both were wave 2 (parallel), causing potential compilation failure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:43:57 +01:00
hsiegeln
da09e5fda7 fix(01): revise plans based on checker feedback
- Remove AbstractClickHouseIT and application-test.yml from Plan 01-01,
  move to Plan 01-03 Task 1 (reduces 01-01 from 15 to 13 files)
- Change Plan 01-02 Task 1 tdd="true" to tdd="false" (compile-only verify)
- Add DiagramRepository and MetricsRepository flush key_links to Plan 01-02
- Update VALIDATION.md: INGST-06 TTL maps to HealthControllerIT#ttlConfigured*
  instead of non-existent ClickHouseTtlIT

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:40:20 +01:00
hsiegeln
e808b567cd docs(01): create phase plan (3 plans, 2 waves)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:33:32 +01:00
hsiegeln
9ba1b839df docs(01): add phase 1 research and validation strategy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:29:01 +01:00
hsiegeln
ef934743fb docs(phase-1): research ingestion pipeline and API foundation domain
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:27:59 +01:00
hsiegeln
7294f4be68 docs: create roadmap (4 phases, 32 requirements mapped)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:19:53 +01:00
hsiegeln
e11496242f docs: define v1 requirements (32 requirements, 6 categories)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:15:04 +01:00
hsiegeln
6f39e29707 docs: add domain research (stack, features, architecture, pitfalls)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:05:37 +01:00
hsiegeln
06a0fddc73 chore: add project config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:57:28 +01:00
hsiegeln
e1a5d994a6 docs: initialize project
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:54:37 +01:00
hsiegeln
223e1fd279 Update Maven registry and repo references to cameleer org
Some checks failed
CI / build (push) Failing after 3s
Both repos transferred from claude user to cameleer organization.
Updated all Maven registry URLs and CLAUDE.md references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:34:53 +01:00
hsiegeln
db17f02fcc Scaffold cameleer3-server project structure
Some checks failed
CI / build (push) Failing after 3s
Multi-module Maven project (server-core + server-app) with Spring Boot 3.4.3,
Gitea CI workflow, and dependency on cameleer3-common from Gitea Maven registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:06:17 +01:00