Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 10 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,10 @@ jump straight to implementation after reading the issue description and the curr
3. **Search for related issues**: Search JIRA for related tickets (same component, similar keywords)
to find prior discussions, rejected approaches, or intentional design decisions.
4. **Look for design documents**: Check the `proposals/` directory for design docs (`.adoc` files)
that may explain architectural decisions in the affected area.
that may explain architectural decisions in the affected area. Key proposals by area:
- **Security** (secrets, SSL/TLS, serialization, policy enforcement): [`proposals/security.adoc`](proposals/security.adoc)
- **Tracing / Telemetry** (OpenTelemetry, spans, context propagation): [`proposals/tracing.adoc`](proposals/tracing.adoc)
- **MDC / Logging** (MDC propagation, logging context): [`proposals/mdc.adoc`](proposals/mdc.adoc)
5. **Understand the broader context**: If the issue involves a module that replaced or deprecated
another (e.g., `camel-opentelemetry2` replacing `camel-opentelemetry`), understand *why* the
replacement was made and what was intentionally changed vs. accidentally omitted.
Expand Down Expand Up @@ -123,7 +126,8 @@ When reviewing PRs, apply the same investigative rigor:
- Check `git log` and `git blame` on modified files to see if the change conflicts with prior
intentional decisions.
- Verify that "fixes" don't revert deliberate behavior without justification.
- Check for design proposals (`proposals/*.adoc`) related to the affected area.
- Check for design proposals (`proposals/*.adoc`) related to the affected area
(see the area-to-proposal mapping in "Issue Investigation" above).
- Search for related JIRA tickets that provide context on why the code was written that way.

### Documentation Conventions
Expand Down Expand Up @@ -218,6 +222,10 @@ Annotations:
- `@UriPath` for path params
- `@UriParam` for query params
- Always add `description` for docs
- Mark sensitive parameters with `secret = true` on `@UriParam` or `@Metadata` (passwords, tokens, API keys)
- For insecure configuration flags (e.g., `trustAllCertificates`, `allowJavaSerializedObject`),
add `security = "insecure:ssl"` / `"insecure:serialization"` / `"insecure:dev"` on `@UriParam`.
See [`proposals/security.adoc`](proposals/security.adoc) for categories and rationale.

## Adding Components

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"groupId": "org.apache.camel",
"artifactId": "camel-caffeine",
"version": "4.19.0-SNAPSHOT",
"properties": { "useRecovery": { "index": 0, "kind": "property", "displayName": "Use Recovery", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not recovery is enabled" }, "deadLetterUri": { "index": 1, "kind": "property", "displayName": "Dead Letter Uri", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an optional dead letter channel which exhausted recovered Exchange should be send to." }, "recoveryInterval": { "index": 2, "kind": "property", "displayName": "Recovery Interval", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5000, "description": "Sets the interval between recovery scans" }, "maximumRedeliveries": { "index": 3, "kind": "property", "displayName": "Maximum Redeliveries", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 3, "description": "Sets an optional limit of the number of redelivery attempt of recovered Exchange should be attempted, before its exhausted. When this limit is hit, then the Exchange is moved to the dead letter channel." }, "allowSerializedHeaders": { "index": 4, "kind": "property", "displayName": "Allow Serialized Headers", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "description": "Whether headers on the Exchange that are Java objects and Serializable should be included and saved to the repository" } }
"properties": { "useRecovery": { "index": 0, "kind": "property", "displayName": "Use Recovery", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not recovery is enabled" }, "deadLetterUri": { "index": 1, "kind": "property", "displayName": "Dead Letter Uri", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an optional dead letter channel which exhausted recovered Exchange should be send to." }, "recoveryInterval": { "index": 2, "kind": "property", "displayName": "Recovery Interval", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5000, "description": "Sets the interval between recovery scans" }, "maximumRedeliveries": { "index": 3, "kind": "property", "displayName": "Maximum Redeliveries", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 3, "description": "Sets an optional limit of the number of redelivery attempt of recovered Exchange should be attempted, before its exhausted. When this limit is hit, then the Exchange is moved to the dead letter channel." }, "allowSerializedHeaders": { "index": 4, "kind": "property", "displayName": "Allow Serialized Headers", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "security": "insecure:serialization", "description": "Whether headers on the Exchange that are Java objects and Serializable should be included and saved to the repository" } }
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"groupId": "org.apache.camel",
"artifactId": "camel-cassandraql",
"version": "4.19.0-SNAPSHOT",
"properties": { "sessionHolder": { "index": 0, "kind": "property", "displayName": "Session Holder", "required": true, "type": "object", "javaType": "org.apache.camel.utils.cassandra.CassandraSessionHolder", "deprecated": false, "autowired": false, "secret": false, "description": "Cassandra session" }, "table": { "index": 1, "kind": "property", "displayName": "Table", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CAMEL_AGGREGATION", "description": "The table name for storing the data" }, "exchangeIdColumn": { "index": 2, "kind": "property", "displayName": "Exchange Id Column", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "EXCHANGE_ID", "description": "Column name for Exchange ID" }, "exchangeColumn": { "index": 3, "kind": "property", "displayName": "Exchange Column", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "EXCHANGE", "description": "Column name for Exchange" }, "prefixPKValues": { "index": 4, "kind": "property", "displayName": "Prefix Primary Key Values", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Values used as primary key prefix. Multiple values can be separated by comma." }, "pkColumns": { "index": 5, "kind": "property", "displayName": "Primary Key Columns", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "KEY", "description": "Primary key columns. Multiple values can be separated by comma." }, "ttl": { "index": 6, "kind": "property", "displayName": "Time to Live", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Time to live in seconds used for inserts" }, "writeConsistencyLevel": { "index": 7, "kind": "property", "displayName": "Write Consistency Level", "required": false, "type": "enum", "javaType": "com.datastax.oss.driver.api.core.ConsistencyLevel", "enum": [ "ANY", "ONE", "TWO", "THREE", "QUORUM", "ALL", "LOCAL_ONE", "LOCAL_QUORUM", "EACH_QUORUM", "SERIAL", "LOCAL_SERIAL" ], "deprecated": false, "autowired": false, "secret": false, "description": "Write consistency level" }, "readConsistencyLevel": { "index": 8, "kind": "property", "displayName": "Read Consistency Level", "required": false, "type": "enum", "javaType": "com.datastax.oss.driver.api.core.ConsistencyLevel", "enum": [ "ANY", "ONE", "TWO", "THREE", "QUORUM", "ALL", "LOCAL_ONE", "LOCAL_QUORUM", "EACH_QUORUM", "SERIAL", "LOCAL_SERIAL" ], "deprecated": false, "autowired": false, "secret": false, "description": "Read consistency level" }, "recoveryInterval": { "index": 9, "kind": "property", "displayName": "Recovery Interval", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5000, "description": "Sets the interval between recovery scans" }, "useRecovery": { "index": 10, "kind": "property", "displayName": "Use Recovery", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not recovery is enabled" }, "deadLetterUri": { "index": 11, "kind": "property", "displayName": "Dead Letter Uri", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an optional dead letter channel which exhausted recovered Exchange should be send to." }, "maximumRedeliveries": { "index": 12, "kind": "property", "displayName": "Maximum Redeliveries", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an optional limit of the number of redelivery attempt of recovered Exchange should be attempted, before its exhausted. When this limit is hit, then the Exchange is moved to the dead letter channel." }, "allowSerializedHeaders": { "index": 13, "kind": "property", "displayName": "Allow Serialized Headers", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "description": "Whether headers on the Exchange that are Java objects and Serializable should be included and saved to the repository" } }
"properties": { "sessionHolder": { "index": 0, "kind": "property", "displayName": "Session Holder", "required": true, "type": "object", "javaType": "org.apache.camel.utils.cassandra.CassandraSessionHolder", "deprecated": false, "autowired": false, "secret": false, "description": "Cassandra session" }, "table": { "index": 1, "kind": "property", "displayName": "Table", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CAMEL_AGGREGATION", "description": "The table name for storing the data" }, "exchangeIdColumn": { "index": 2, "kind": "property", "displayName": "Exchange Id Column", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "EXCHANGE_ID", "description": "Column name for Exchange ID" }, "exchangeColumn": { "index": 3, "kind": "property", "displayName": "Exchange Column", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "EXCHANGE", "description": "Column name for Exchange" }, "prefixPKValues": { "index": 4, "kind": "property", "displayName": "Prefix Primary Key Values", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Values used as primary key prefix. Multiple values can be separated by comma." }, "pkColumns": { "index": 5, "kind": "property", "displayName": "Primary Key Columns", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "KEY", "description": "Primary key columns. Multiple values can be separated by comma." }, "ttl": { "index": 6, "kind": "property", "displayName": "Time to Live", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Time to live in seconds used for inserts" }, "writeConsistencyLevel": { "index": 7, "kind": "property", "displayName": "Write Consistency Level", "required": false, "type": "enum", "javaType": "com.datastax.oss.driver.api.core.ConsistencyLevel", "enum": [ "ANY", "ONE", "TWO", "THREE", "QUORUM", "ALL", "LOCAL_ONE", "LOCAL_QUORUM", "EACH_QUORUM", "SERIAL", "LOCAL_SERIAL" ], "deprecated": false, "autowired": false, "secret": false, "description": "Write consistency level" }, "readConsistencyLevel": { "index": 8, "kind": "property", "displayName": "Read Consistency Level", "required": false, "type": "enum", "javaType": "com.datastax.oss.driver.api.core.ConsistencyLevel", "enum": [ "ANY", "ONE", "TWO", "THREE", "QUORUM", "ALL", "LOCAL_ONE", "LOCAL_QUORUM", "EACH_QUORUM", "SERIAL", "LOCAL_SERIAL" ], "deprecated": false, "autowired": false, "secret": false, "description": "Read consistency level" }, "recoveryInterval": { "index": 9, "kind": "property", "displayName": "Recovery Interval", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5000, "description": "Sets the interval between recovery scans" }, "useRecovery": { "index": 10, "kind": "property", "displayName": "Use Recovery", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether or not recovery is enabled" }, "deadLetterUri": { "index": 11, "kind": "property", "displayName": "Dead Letter Uri", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an optional dead letter channel which exhausted recovered Exchange should be send to." }, "maximumRedeliveries": { "index": 12, "kind": "property", "displayName": "Maximum Redeliveries", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an optional limit of the number of redelivery attempt of recovered Exchange should be attempted, before its exhausted. When this limit is hit, then the Exchange is moved to the dead letter channel." }, "allowSerializedHeaders": { "index": 13, "kind": "property", "displayName": "Allow Serialized Headers", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "security": "insecure:serialization", "description": "Whether headers on the Exchange that are Java objects and Serializable should be included and saved to the repository" } }
}
}

Loading
Loading