- Signing the Contributor License Agreement
- Docker
The semantic conventions are defined as YAML files under the model/ directory.
They use the OpenTelemetry Weaver registry format.
model/registry_manifest.yaml— Registry manifest declaring dependencies (e.g., on OTel semantic conventions).model/<domain>/entities.yaml— Entity definitions.model/<domain>/events.yaml— Event definitions.
When adding or modifying conventions:
- Edit or create the relevant YAML files under
model/. - Run
make checkto validate the model. - Add or update test data under
tests/. - Run
make testto verify all test data.
Annotations are restricted to an allowlist enforced by the Rego policy in policies/annotations.rego, which make check runs.
Each element that can carry annotations has its own allowlist, which maps a namespace to its allowed keys, and each key to its allowed values.
| Element | Allowlist | Currently allowed |
|---|---|---|
| Attribute | allowed_attribute_annotations |
dash0.transform_access |
| Group | allowed_group_annotations |
code_generation.metric_value_type |
| Enum member | allowed_member_annotations |
Nothing |
To introduce a new annotation, add it to the allowlist of the element it applies to, and document it below.
An annotations block that declares nothing is reported as an improvement, which also fails make check; remove the block instead.
TODO: describe what a transform is and what access to an attribute means for it.
The annotation takes a single value:
| Value | Meaning |
|---|---|
read |
The attribute may be read, but not written. |
write |
The attribute may be written as well as read, since write implies read. |
An attribute without the annotation may be written, and therefore read as well. Annotate an attribute only to narrow that default, or to state the default explicitly where it is worth calling out.
Test data lives under the tests/ directory as plain JSON files:
tests/valid/— Samples that must pass validation.tests/invalid/— Samples that must fail validation.
When adding a new event or entity, add at least one valid and one invalid test case.
All validation runs via Docker through the provided Makefile.
Check the registry model for correctness:
make checkResolve the full registry (including OTel dependencies) into resolved.json:
make resolveRun all live-check tests (valid and invalid):
make testYou can also run only the valid or invalid suite:
make test-valid
make test-invalidGenerate the documentation from the model and templates, then serve it locally:
make serve-docsThis regenerates the Markdown files in docs/ and starts a local server at http://localhost:8000.
To regenerate without serving:
make generate-docsAll pull requests are validated in CI, which runs:
weaver registry check— model validation, including the policies underpolicies/weaver registry resolve— full registry resolution- Live-check tests against all files in
tests/valid/andtests/invalid/
Please make sure all checks pass locally before opening a PR.