Code Generation
/camel-execute — Phase 3: Orchestrated execution with two-stage review
Overview
/camel-execute is the Phase 3 orchestrator that transforms the approved Implementation Plan into working code. Through wave-based execution, internal skill loading, and two-stage review, the AI generates Camel routes, tests, and configuration files.
The output is a complete Maven project with YAML routes, Citrus tests, application properties, Docker Compose environment, and validation reports.
When to Use
Invoke /camel-execute when you:
- Have an approved Implementation Plan from
/camel-plan - Want to generate code based on the task breakdown
- Need to implement the entire integration in one orchestrated run
Auto-invocation: After you approve the Implementation Plan in /camel-plan, the AI automatically invokes /camel-execute. You rarely need to invoke it manually.
Input: Implementation Plan
/camel-execute reads the Implementation Plan from .camel-kit/implementation-plan.md (created by /camel-plan).
The executor analyzes:
- Task list - What to implement
- Acceptance criteria - How to validate each task
- Wave analysis - Parallel vs. sequential execution order
- Component requirements - Which Camel components per task
- Review specifications - Two-stage validation per task
The Execution Process
The AI transforms the Implementation Plan into working code through wave-based execution with continuous validation.
Implementation Per Task
For each task (respecting wave order), the executor invokes the camel-implement skill with:
- Task description
- Acceptance criteria
- Component list (from the plan)
- Design Specification (context)
Example: Task 1 (REST Endpoint)
Step 1: Wave Analysis Parsing
The executor parses the wave analysis to determine execution order.
Example Plan:
## Wave Analysis
Wave 1 (Parallel):
- Task 1: REST Endpoint
- Task 8: Error Handler
Wave 2 (Sequential, depends on Wave 1):
- Task 2: Validation
Wave 3 (Sequential, depends on Wave 2):
- Task 3: Credit Lookup
Wave 4 (Sequential, depends on Wave 3):
- Task 4: Routing Decision
Wave 5 (Parallel, depends on Wave 4):
- Task 5: Kafka Warehouse Publisher
- Task 6: Kafka Pending Publisher
- Task 7: Kafka Invalid Publisher
Execution Strategy:
Execute Wave 1 (Tasks 1 + 8 in parallel)
→ Wait for both to complete
Execute Wave 2 (Task 2)
→ Wait for completion
Execute Wave 3 (Task 3)
→ Wait for completion
Execute Wave 4 (Task 4)
→ Wait for completion
Execute Wave 5 (Tasks 5 + 6 + 7 in parallel)
→ Wait for all to complete
Step 2: Internal Skills Loading
Before starting task execution, the executor loads three internal skills:
camel-implement.md - Route generation skill
- Generates Camel YAML routes from task specifications
- Uses route templates and follows the Constitution
- Handles route structure, naming, observability
camel-test.md - Test generation skill
- Creates Citrus integration tests
- Generates test scenarios from acceptance criteria
- Handles mocking and assertions
camel-validate.md - Validation skill
- Validates component names against MCP catalog
- Checks YAML syntax
- Verifies route structure
These skills are not user-invocable. They exist only for /camel-execute to call.
Generated Route Example
The camel-implement skill generates a YAML route following the Constitution:
Output: order-reception.camel.yaml
- route:
id: order-reception-rest
from:
uri: "platform-http:/api/orders"
parameters:
httpMethodRestrict: POST
parameters:
port: "{{rest.port}}"
steps:
- log:
message: "Order received: ${body.orderId}"
- unmarshal:
json:
library: Jackson
unmarshalType: com.example.Order
- to: "seda:orders.processing?waitForTaskToComplete=Never"
- setBody:
constant: "Order accepted"
- setHeader:
name: Content-Type
constant: application/json
- setHeader:
name: CamelHttpResponseCode
constant: 202
- to: "micrometer:counter:orders.received.total"
Key Features:
- External configuration (
{{rest.port}}) - Fire-and-forget pattern (SEDA queue)
- Observability (metrics, logging)
- No business logic (separation of concerns)
Stage 1: Spec Compliance Review
The executor validates the generated route against the task’s acceptance criteria.
Validation Checklist:
Task 1 Acceptance Criteria:
✓ REST endpoint listens on port ${rest.port} (externalized config)
✓ Accepts POST requests at /api/orders
✓ Expects JSON payload with orderId, customerId, items, totalAmount
✓ Returns HTTP 202 Accepted immediately (fire-and-forget)
✓ Passes order to internal SEDA queue for async processing
✓ No business logic in this route (separation of concerns)
Spec Compliance: PASS
If any criterion fails:
✗ Returns HTTP 202 Accepted immediately
Found: HTTP 200 OK
Spec Compliance: FAIL
Regenerating route...
The executor invokes camel-implement again with feedback. It retries up to 3 times per task.
Stage 2: Code Quality Review
After spec compliance passes, the executor validates against the Constitution.
Constitution Checklist:
Constitution Rule 1 (Route Structure): ✓ PASS
- Route follows from → process → to structure
Constitution Rule 2 (Single Responsibility): ✓ PASS
- Route has one responsibility: receive and queue orders
Constitution Rule 3 (Separation of Concerns): ✓ PASS
- No business logic in REST endpoint route
Constitution Rule 4 (Naming Conventions): ✓ PASS
- Route ID: order-reception-rest (kebab-case)
Constitution Rule 5 (Observability): ✓ PASS
- Micrometer counter: orders.received.total
- Log statement on reception
Constitution Rule 6 (External Configuration): ✓ PASS
- REST port from {{rest.port}} property
Constitution Rule 7 (Supported Components): ✓ PASS
- camel-rest: supported by Apache Camel
- camel-jackson: supported by Apache Camel
- camel-seda: supported by Apache Camel
Code Quality: PASS
If any rule fails:
Constitution Rule 6 (External Configuration): ✗ FAIL
- Found hardcoded port 8080 in REST URI
- Expected: {{rest.port}} property reference
Code Quality: FAIL
Regenerating route...
The executor provides specific feedback to camel-implement and retries.
Complete Project Artifacts
After all tasks complete, the executor collects generated artifacts:
Camel YAML Routes:
Application Configuration:
src/main/resources/application.properties
Docker Compose Environment:
docker-compose.yaml
Citrus Integration Tests:
Validation Report:
.camel-kit/validation-report.md
Maven Project Structure
The executor ensures the Maven project structure exists:
Generated POM:
<project>
<groupId>com.example</groupId>
<artifactId>order-processing</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-bom</artifactId>
<version>4.14.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Camel Core
Detailed Artifact Examples
Camel YAML Routes
Each task produces one .camel.yaml file following the Constitution.
Example: customer-credit-lookup.camel.yaml
- route:
id: customer-credit-lookup
from:
uri: seda:orders.enrichment
steps:
- to:
uri: sql:SELECT credit_status, warehouse_location FROM customers WHERE id = :#${body.customerId}
parameters:
dataSource: "#bean:dataSource"
- setHeader:
name: creditStatus
simple: "${body[0]['credit_status']}"
- setHeader:
name: warehouseLocation
simple: "${body[0]['warehouse_location']}"
- log:
message: "Customer ${body.customerId}: creditStatus=${header.creditStatus}"
- to: "micrometer:timer:database.lookup.time"
- onException:
- exception: java.sql.SQLException
redeliveryPolicy:
maximumRedeliveries: 3
redeliveryDelay: 2000
backOffMultiplier: 2
maximumRedeliveryDelay: 8000
handled:
constant: true
steps:
- log:
message: "Database error after retries: ${exception.message}"
loggingLevel: ERROR
- to: seda:orders.error
- to: "micrometer:counter:errors.database.total"
Key Features:
- Route structure: from → process → to (Rule 1)
- Single responsibility: Only credit lookup, no routing decisions (Rule 2)
- External config: dataSource bean reference (Rule 6)
- Observability: Timer and counter metrics, log statements (Rule 5)
- Error handling: Retry with exponential backoff per Design Spec (Section 5)
Application Properties
All externalized configuration in one file:
application.properties:
# REST Endpoint
rest.port=8080
# Database Configuration
spring.datasource.url=jdbc:postgresql://localhost:5432/orders
spring.datasource.username=orderuser
spring.datasource.password=change-me-in-production
# Kafka Configuration
kafka.brokers=localhost:9092
kafka.topic.warehouse=warehouse.orders
kafka.topic.pending=orders.pending
kafka.topic.invalid=orders.invalid
# SMTP Configuration (Error Alerts)
smtp.host=smtp.company.com
smtp.port=587
smtp.username=alerts@company.com
smtp.password=change-me-in-production
ops.email=ops@company.com
# Camel Configuration
camel.component.kafka.brokers=${kafka.brokers}
camel.component.sql.data-source=#bean:dataSource
# Observability
management.endpoints.web.exposure.include=health,metrics,prometheus
management.metrics.export.prometheus.enabled=true
Docker Compose Environment
Development environment for testing:
docker-compose.yaml:
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: orders
POSTGRES_USER: orderuser
POSTGRES_PASSWORD: change-me-in-production
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
- ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
kafka:
image: confluentinc/cp-kafka:7.5.0
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
ports:
- "9092:9092"
depends_on:
- zookeeper
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ports:
- "2181:2181"
volumes:
postgres-data:
Citrus Integration Tests
Behavioral tests from acceptance criteria:
OrderProcessingIT.java:
@Test
public void testValidOrderProcessing() {
// Given: Valid order JSON
String validOrder = """
{
"orderId": "ORD-12345",
"customerId": "CUST-67890",
"items": [{"sku": "WIDGET-A", "quantity": 2, "price": 19.99}],
"totalAmount": 39.98
}
""";
// When: POST to /api/orders
http()
.client("restClient")
.send()
.post("/api/orders")
.contentType("application/json")
.payload(validOrder);
// Then: Receive HTTP 202 Accepted
http()
.client("restClient")
.receive()
.response(HttpStatus.ACCEPTED);
// And: Message appears on Kafka topic warehouse.orders
kafka()
.endpoint("kafkaEndpoint")
.receive()
.topic("warehouse.orders")
.messageKey("ORD-12345")
.payload(containsString("\"creditStatus\":\"ACTIVE\""));
}
@Test
public void testInvalidOrderHandling() {
// Given: Invalid order (totalAmount = 0)
String invalidOrder = """
{
"orderId": "ORD-99999",
"customerId": "CUST-11111",
"items": [],
"totalAmount": 0
}
""";
// When: POST to /api/orders
http()
.client("restClient")
.send()
.post("/api/orders")
.contentType("application/json")
.payload(invalidOrder);
// Then: Receive HTTP 202 Accepted (fire-and-forget)
http()
.client("restClient")
.receive()
.response(HttpStatus.ACCEPTED);
// And: Message appears on Kafka topic orders.invalid
kafka()
.endpoint("kafkaEndpoint")
.receive()
.topic("orders.invalid")
.messageKey("ORD-99999")
.payload(containsString("\"error\":\"totalAmount must be > 0\""));
}
Validation Report
Summary of MCP catalog verification:
.camel-kit/validation-report.md:
# Validation Report: Order Processing Integration
## Component Verification
| Component | Status | Version |
|-----------|--------|---------|
| camel-rest | ✓ Supported | 4.14.0 |
| camel-jackson | ✓ Supported | 4.14.0 |
| camel-seda | ✓ Supported | 4.14.0 |
| camel-kafka | ✓ Supported | 4.14.0 |
| camel-sql | ✓ Supported | 4.14.0 |
| camel-mail | ✓ Supported | 4.14.0 |
## YAML Syntax Check
All 8 route files: ✓ Valid YAML
## Route Structure Check
All 8 routes follow Constitution Rule 1 (from → process → to)
## Summary
- Total routes: 8
- Components verified: 6
- Constitution compliance: 100%
- MCP verification: 100%
No issues found.
Two-Stage Review in Action
Example: Task Fails Spec Compliance
Implementing Task 2: Order Validation Flow
Generated route: order-validation.camel.yaml
Stage 1: Spec Compliance Review
Checking acceptance criteria...
✓ Consumes from SEDA queue "orders.processing"
✓ Validates: orderId not null
✓ Validates: totalAmount > 0
✗ Validates: customerId not null
→ Not found in route
Spec Compliance: FAIL
Regenerating route with feedback:
"Add validation for customerId not null"
Generated route: order-validation.camel.yaml (attempt 2)
Stage 1: Spec Compliance Review
Checking acceptance criteria...
✓ All criteria met
Spec Compliance: PASS
Stage 2: Code Quality Review
Checking Constitution...
✓ Rule 1: Route structure
✓ Rule 2: Single responsibility
✓ Rule 3: Separation of concerns
✓ Rule 4: Naming conventions
✓ Rule 5: Observability
✓ Rule 6: External configuration
✓ Rule 7: Supported components
Code Quality: PASS
Task 2 complete.
Example: Task Fails Code Quality
Stage 1: Spec Compliance Review
✓ PASS
Stage 2: Code Quality Review
Checking Constitution...
✓ Rule 1: Route structure
✓ Rule 2: Single responsibility
✓ Rule 3: Separation of concerns
✓ Rule 4: Naming conventions
✗ Rule 5: Observability
→ No metrics found in route
✓ Rule 6: External configuration
✓ Rule 7: Supported components
Code Quality: FAIL
Regenerating route with feedback:
"Add micrometer counter for validation failures"
(Retry...)
Stage 2: Code Quality Review
✓ All rules passed
Code Quality: PASS
Task 2 complete.
Parallel Execution
Tasks in the same wave execute in parallel using AI agent concurrency:
Wave 5 (3 parallel tasks):
Starting Wave 5 (parallel execution)...
[Task 5 thread] Implementing Kafka Warehouse Publisher...
[Task 6 thread] Implementing Kafka Pending Publisher...
[Task 7 thread] Implementing Kafka Invalid Publisher...
[Task 5 thread] Spec compliance: PASS
[Task 7 thread] Spec compliance: PASS
[Task 6 thread] Spec compliance: PASS
[Task 5 thread] Code quality: PASS
[Task 6 thread] Code quality: PASS
[Task 7 thread] Code quality: PASS
Wave 5 complete (elapsed: 2m 15s)
Parallel execution reduces total execution time from ~24 minutes (8 tasks × 3 min) to ~12 minutes (5 waves, some parallel).
Resume From Task
If execution fails mid-way, you can resume:
/camel-execute --resume-from=task-5
The executor skips completed tasks and starts from Task 5.
DataMapper Integration
If the Design Specification includes DataMapper transformations, /camel-execute invokes the DataMapper implementation skill.
Task Example:
## Task 2: Order Transformation (DataMapper)
**Description:**
Transform incoming order JSON to canonical format using XSLT DataMapper.
**Acceptance Criteria:**
- Input: Mule-style order JSON
- Output: Camel canonical order JSON
- Transformation: XSLT via DataMapper
- Field mappings: orderId → id, customer.email → customerEmail, etc.
The camel-implement skill generates:
- XSLT stylesheet:
src/main/resources/xslt/order-transform.xslt - Route with XSLT processor:
- route:
id: order-transformation
from:
uri: seda:orders.raw
steps:
- to: xslt:xslt/order-transform.xslt?saxon=true
- to: seda:orders.canonical
Summary
/camel-execute transforms Implementation Plans into working code through:
- Wave Analysis - Parallel and sequential task execution
- Internal Skills - camel-implement, camel-test, camel-validate
- Per-Task Loop - Implement → Spec Compliance → Code Quality
- Two-Stage Review - Acceptance criteria validation, Constitution validation
- Artifact Generation - YAML routes, tests, config, Docker Compose
- Auto-Verification - Invokes
/camel-verifyafter completion
The result is a Maven project with verified routes.
Next: /camel-verify to learn how runtime verification works.