Repository navigation
Conversation
`slot: shared` marks a tag as rarely set. When the coloring honors it (with #12882), a shared tag still gets a slot apart from every tag that isn't shared in its cliques, so tags that are always present keep exact presence bits, but shared tags may share slots with each other. Rare groups then pack into the slots the always-present tags leave free, instead of falling back to the unslotted bit 63 that every slotless tag shares. The generator parses the marker (the only value is `shared`), requires a name's declarations per direction to agree on it, records it on the registry tag, and shows it in each generated id's comment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI Visibility creates one span per test session, module, suite and test (span.kind test_session_end, test_module_end, test_suite_end and test, none of which has a direction). Set sites checked per tag. New shared span types: - ci.span (abstract): what standard enrichment (TestDecoratorImpl.afterStart) puts on every CI span -- the session name, test type, status, framework, session id, and the CI provider and commit (ci.*, git.*) -- plus library_version and the host's vCPU count. - ci.aggregate (abstract, sessions and modules): command, coverage, ITR skipping counts, early flake detection, test management. - test.session, test.module, test.suite and test, sharing tags across levels by ref (test.module, test.suite, the ids, the source location). - test.browser (Selenium). - Java overlay: test.gradle.session, test.gradle.module, test.maven.module, test.android (Robolectric), test.junit5, and junit.callback for JUnit's before/after spans. A test span carries about 100 tags, more than the dense store's 63 slots. So tags set only some of the time (pull request and head commit info, retry, ITR, test management, configuration errors, coverage, browser and Android details, and the os/runtime fields the CI intake mapper normally writes itself) are marked `slot: shared`. With shared-aware coloring (to follow in #12882), a simulation colors the 309 tags into 56 slots, with the always-set tags on exact slots. The old ci_visibility mixin goes: its tags are on the types. The coverage test's CI Visibility families are now all registered, so no family or single constant remains unregistered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI Visibility Test Environment - sbt-scalatestJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - nebula-release-pluginJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - reactive-streams-jvmJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - pass4sJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - netflix-zuulJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - heliboardJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
🟢 Java Benchmark SLOs — All performance SLOs passed
PR vs. master results
Commit: Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion. |
CI Visibility Test Environment - sonar-kotlinJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - jolokiaJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - okhttpJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
CI Visibility Test Environment - spring_bootJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
Replaces the `slot: shared` markers with requirement levels. The tags TestDecoratorImpl.afterStart puts on every CI span (the CI provider and commit) and the test source range are recommended rather than optional, so the coloring keeps them on exact slots; the tags set only some of the time stay optional and absorb the overflow on test spans. With #12882's coloring, the 306 tags fit in 63 slots; only the CI test span types, which carry 73 to 104 tags, have tags sharing a slot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI Visibility Test Environment - sonar-javaJob Status: 🟢 success
Baseline: median of Tests run to verify that CI Visibility behavior has not regressed in the current PR. |
What Does This Do
Registers the CI Visibility tags in the tag registry, on span types for test sessions, modules, suites and tests, with requirement levels that tell the slot coloring which tags are set only some of the time. With #12893, every tag constant is now registered or deliberately excluded.
span.kindvalues (test_session_end,test_module_end,test_suite_end,test) have no direction. Each tag's production set sites were checked for which of the four it lands on.ci.span(abstract): what standard enrichment (TestDecoratorImpl.afterStart) puts on every CI span: the session name, test type, status, framework, session id, and the CI provider and commit (ci.*,git.*).ci.aggregate(abstract, sessions and modules): command, coverage, ITR skipping counts, early flake detection, test management.test.session,test.module,test.suite,test, sharing tags across levels byref(test.module,test.suite, the ids, the source location).test.browser(Selenium) extendstest.test.gradle.session,test.gradle.module,test.maven.module,test.android(Robolectric),test.junit5, andjunit.callbackfor JUnit's before and after spans.optionaltags only, so the levels say which tags matter: what standard enrichment always sets (the CI provider and commit,ci.*/git.*) and the test source range arerecommended, and the tags set only some of the time stayoptional: pull request and head commit info, retries, ITR, test management, configuration errors, coverage, browser and Android details.Motivation
The id migration needs every tag registered, and the dense store gives a tag a precise presence bit only when it's placed on the span types it appears on.
Falling back to "unslotted" for the overflow would have been the easy way out, but every slotless tag shares bit 63: set on most spans, so checking any of them means a scan. A designed collision between tags that are rarely present together keeps the fast miss for the tags that matter, and deriving it from requirement levels keeps slots out of the conventions.
Additional Notes
base(_dd.span_links,_dd.svc_src,error.debug_info_captured,events) share on test spans only.slot:marker in the conventions (an earlier revision; slots are the generator's business, and the level already carries the information), two occupancy longs (8 bytes and a word select on every span, for CI's sake), or a group bit like trace-level (doesn't help: the overflow is within one span's tags).afterStartcopies theci.*/git.*block onto every session, module, suite and test span, though it's constant for the process. Setting it once per trace would be a CI Visibility behavior change (the intake may expect it on each event), for the CI Visibility team to decide; not changed here.test_session_id,test_module_id,test_suite_idanditr_correlation_idare set as tags and moved to top-level fields byCiTestCycleMapperV1, so they go throughsetTagand need ids. Theos.*/runtime.*fields are tags only when CI Visibility reports through the APM protocol, so they're shared.slot: sharedmarker is reverted by the later two.🤖 Generated with Claude Code