Federico Mariani created CAMEL-25538:
----------------------------------------
Summary: camel-jbang-mcp - camel_configuration_validate answers
accepted:false, valid:true for camel.server.* and any invented key outside the
ten known prefixes
Key: CAMEL-25538
URL: https://issues.apache.org/jira/browse/CAMEL-25538
Project: Camel
Issue Type: Bug
Components: camel-catalog, camel-jbang-mcp
Affects Versions: 4.22.1
Reporter: Federico Mariani
{{camel_configuration_validate}} answers {{"accepted":false,"valid":true}} for
any key outside the ten prefixes the catalog validator knows, including
{{camel.server.*}} and invented keys, and counts them as valid in the summary.
Only keys under {{camel.main.*}} (and the other accepted prefixes) get "Unknown
option". The tool description does not say what {{accepted}} means, so a model
reads {{accepted:false}} as "this key is rejected" and {{valid:true}} as "this
key exists".
In an evaluation of coding agents (Claude Code and IBM Bob) on migration tasks,
using camel-jbang-mcp 4.22.1, 18 of the 22 sessions that called the tool got
{{accepted:false}} for at least one line, {{camel.server.port}} most often.
Five IBM Bob sessions took {{accepted:false}} for {{camel.server.port=8081}} as
a rejection and then spent 5 to 15 calls looking for the right HTTP port
property. Invented keys passed as valid.
h3. Reproduction
{code}
camel_configuration_validate runtime=main camelVersion=4.22.1
properties="camel.server.port=9999\ncamel.server.bindPort=9999"
{code}
{noformat}
{"summary":{"total":2,"valid":2,"errors":0,"warnings":0},"properties":[
{"text":"camel.server.port=9999","accepted":false,"valid":true,"errors":0,"issues":[]},
{"text":"camel.server.bindPort=9999","accepted":false,"valid":true,"errors":0,"issues":[]}]}
{noformat}
{{camel.platform.http.server.port=9999}} and
{{camel.datasource.default.jdbc-url=...}} get the same answer.
{{camel.server.port}} is a real option and {{camel.server.bindPort}} is not,
but the answer is the same for both. For comparison,
{{camel.main.httpServerPort = 9999}} gets {{"accepted":true,"valid":false}} and
{{httpServerPort Unknown option}}.
h3. Cause
{{AbstractCamelCatalog.acceptConfigurationPropertyKey}} (camel-core-catalog)
accepts only {{camel.component.}}, {{camel.dataformat.}}, {{camel.language.}},
{{camel.main.}}, {{camel.resilience4j.}}, {{camel.faulttolerance.}},
{{camel.threadpool.}}, {{camel.health.}}, {{camel.lra.}} and {{camel.rest.}}.
For any other key, {{validateConfigurationProperty(String)}} returns right
after {{setAccepted(false)}} with no checks, and
{{PropertiesValidationResult.isSuccess()}} is true because no errors were
recorded. {{ConfigurationValidateTools.toPropertyValidationInfo}} copies both
flags as they are, and its summary counts the line as valid.
The main-model branch already checks options against {{mainModel()}}, and
{{camel-main-configuration-metadata.json}} already has all the {{camel.*}}
groups: {{camel.server}} (28 options, including {{port}} and {{enabled}}),
{{camel.management}}, {{camel.ssl}}, {{camel.debug}}, {{camel.trace}},
{{camel.routecontroller}}, {{camel.startupcondition}}, {{camel.security}},
{{camel.vault.*}}, {{camel.opentelemetry}}, {{camel.opentelemetry2}},
{{camel.metrics}}, {{camel.mdc}}, {{camel.errorRegistry}},
{{camel.telemetryDev}} and {{camel.cluster.*}}. Those keys are not checked only
because they are missing from the hardcoded prefix lists, which are in
{{acceptConfigurationPropertyKey}} and again in the {{key.startsWith("main.")
|| ...}} branch. {{camel.jbang.*}} has its own model ({{jbangModel()}},
{{camel-jbang-configuration-metadata.json}}), which is not used here.
Nothing has changed on main: CAMEL-23179 added the tool, and CAMEL-25118 fixed
other validation bugs without touching the prefix list.
h3. Fix
# Build the accepted prefixes from the groups in the main configuration
metadata instead of the hardcoded lists, so that {{camel.server.*}},
{{camel.management.*}}, {{camel.ssl.*}}, {{camel.vault.*}} and the other groups
go through the main-model branch. An unknown key under a known group, such as
{{camel.server.bindPort}}, then gets "Unknown option", with suggestions when
there are any.
# Validate {{camel.jbang.*}} against {{jbangModel()}}.
# For a {{camel.<x>.*}} key whose group is unknown, such as
{{camel.platform.http.server.port}} or {{camel.datasource.*}}, return a warning
("not a known Camel configuration group", with the closest group as a
suggestion). {{camel.beans.*}}, {{camel.kamelet.*}} and the other prefixes that
are legal but have no model can stay unchecked.
# In {{camel_configuration_validate}}, report a line that was not checked as
{{"checked":false}} (or rename {{accepted}}), do not count it in
{{summary.valid}} (add {{summary.unchecked}}), and say in the tool description
that such lines were not validated. A non-Camel key such as {{mail.smtp.host}}
should read as "not checked", not as "rejected".
--
This message was sent by Atlassian Jira
(v8.20.10#820010)