Summary
The RL module has an experiment decorator system (ExperimentDecoratorManager) that allows modules to provide human-readable labels for experiment arms in reports. However, this system is not documented, making it difficult for module developers to use.
Problem
When viewing experiment reports at /admin/reports/rl/experiment/{experiment_id}, arm IDs are shown as raw values (e.g., node IDs like "42", "87") instead of human-readable labels (e.g., "My Blog Post Title").
Current Architecture
The decorator system already exists:
ExperimentDecoratorManager collects decorator services tagged with rl_experiment_decorator
- Decorators implement
ExperimentDecoratorInterface with decorateExperiment() and decorateArm() methods
ReportsController::experimentDetail() already calls decorateArm() but falls back to raw arm ID when no decorator is registered
Requested Documentation
Add documentation (README or inline) explaining:
- How to create a decorator class implementing
ExperimentDecoratorInterface
- How to register the decorator service with the
rl_experiment_decorator tag
- Example decorator implementation
Example Service Registration
mymodule.experiment_decorator:
class: Drupal\mymodule\Decorator\MyExperimentDecorator
arguments: ['@entity_type.manager']
tags:
- { name: rl_experiment_decorator }
Related
- See ai_sorting module issue for implementing a decorator for Views-based experiments
Summary
The RL module has an experiment decorator system (
ExperimentDecoratorManager) that allows modules to provide human-readable labels for experiment arms in reports. However, this system is not documented, making it difficult for module developers to use.Problem
When viewing experiment reports at
/admin/reports/rl/experiment/{experiment_id}, arm IDs are shown as raw values (e.g., node IDs like "42", "87") instead of human-readable labels (e.g., "My Blog Post Title").Current Architecture
The decorator system already exists:
ExperimentDecoratorManagercollects decorator services tagged withrl_experiment_decoratorExperimentDecoratorInterfacewithdecorateExperiment()anddecorateArm()methodsReportsController::experimentDetail()already callsdecorateArm()but falls back to raw arm ID when no decorator is registeredRequested Documentation
Add documentation (README or inline) explaining:
ExperimentDecoratorInterfacerl_experiment_decoratortagExample Service Registration
Related