[ 
https://issues.apache.org/jira/browse/CAMEL-26689?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-26689.
---------------------------------
    Resolution: Fixed

Merged to main via https://github.com/apache/camel/pull/29331 (18058a29443f).

_Claude Code on behalf of davsclaus_

> camel-chaos - a model of the chaos rules in camel-catalog: targets, hooks, 
> faults, parameters and known rules
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26689
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26689
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-catalog, camel-jbang
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> The vocabulary of the camel-chaos rules lives only in the code of 
> {{ChaosRuleParser}}: the targets ({{endpoint=}}, {{component=}}, {{route=}}, 
> {{step=}}), the hooks each target has, the faults each hook offers, the 
> parameters of each fault with their types and limits, and the general options 
> ({{rate}}, {{until}}, {{from}}, {{at}}, {{expect}}, {{within}}). Tools that 
> help people write rules need it as data:
> * the chaos screen (CAMEL-26608): an add form with fields, pickers and a live 
> preview, and "chaos here" on a diagram node, offering only the faults that 
> node can take;
> * the AI of stage 2 (CAMEL-26607), which turns a loose prompt ("the order 
> route should fail 5%") into rules;
> * the MCP catalog tools and the docs.
> h3. Proposal
> A {{chaos-model.json}} in camel-chaos, copied to camel-catalog like the dev 
> consoles:
> * *targets*: name, description, what a picker offers (endpoints, routes, 
> steps);
> * *hooks*: name, the targets that have it, the faults it offers, and whether 
> it is reached only with {{at=}} ({{reply}}, {{dlq}});
> * *faults*: the parameters, with type (class, duration, duration range, 
> integer, enum, header map) and limits (status 300-599, the HTTP schemes of 
> {{status=}}, {{after=}} not at {{reply}}, the corrupt modes, the lifecycle 
> actions, repeat 1-100);
> * *options*: {{rate}} in its three forms (probability, {{every:N}}, 
> {{burst:on/period}}), {{until}}, {{from}}, {{expect}} with its kinds and ops, 
> {{within}};
> * *recipes*: the known rules in plain words, grouped by what goes wrong, each 
> a rule template with placeholders and defaults, for example "Downstream 
> returns an error (HTTP 503)": {{endpoint=$\{http\} error 
> status=$\{status:503\} rate=$\{rate:0.25\} until=$\{until:10m\}}}, "Did the 
> work, then failed": {{endpoint=$\{producer\} error at=reply until=1}}, "The 
> route flaps": {{route=$\{route\} lifecycle action=stop duration=10s repeat=3 
> every=1m}}.
> h3. Keeping it true
> * The parser stays the source of truth. A golden-style test builds the model 
> from the parser's own tables ({{ChaosRuleParser.offered()}}, the parameter 
> keys, the modes, actions, expectation kinds and ops) and fails when the 
> committed file differs; {{-Dcamel.chaos.updateModel=true}} writes it again, 
> as the CLI help golden test does.
> * The recipes are written by hand. The same test fills each recipe with its 
> sample values and parses it, so a recipe that no longer parses fails the 
> build.
> * {{PrepareCatalogMojo}} copies the file into camel-catalog, with 
> {{CamelCatalog.chaosModelJSon()}}.
> * The running integration still checks every rule when it is added 
> ({{chaos-add}} refuses with the reason), so a tool with a catalog of another 
> version cannot add a broken rule: at worst it offers a recipe that the 
> integration refuses with a clear message.
> Not chosen: a {{model}} option on the chaos dev console. It would always 
> match the running version, but the docs, the MCP catalog tools and an AI 
> without a running integration could not use it. It can be added later if 
> version skew turns out to matter.
> The chaos screen design that this comes from: 
> https://claude.ai/artifact/8nzJQAAjBpFWVKrexaoPZT (section 6).
> _Claude Code on behalf of Claus Ibsen_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to