Skip to content

chore(open_feature): prepare evaluator-gated dependent flag capabilities - #6608

Draft
hhan2024 wants to merge 5 commits into
masterfrom
helen/dependent-flags-capabilities-ruby
Draft

hhan2024 wants to merge 5 commits into
masterfrom
helen/dependent-flags-capabilities-ruby

Conversation

@hhan2024

@hhan2024 hhan2024 commented Nov 2, 2026

Copy link
Copy Markdown

Why

Dependent-flag configuration must reach only SDKs that support prerequisite evaluation, error propagation, and exposure reporting. This prepares negotiation for both Ruby configuration transports.

What

An empty evaluator capability report gates the optional agentless header and Remote Config bit 50. Current requests and the existing rules capability remain unchanged.

Risk

Two-way change scoped to feature flag configuration negotiation; revert these changes to remove it. Keep draft until tests, lint, and type checks pass, and do not enable the report before evaluator/exposure integration coverage exists.

Details

Notes

Follows Python agentless #21335 and Python RC #21336.

Added empty/unknown/supported transport cases, initial/conditional request coverage, and matching RBS signatures. Ruby syntax checks and the empty-report assertion pass; bundle exec rake test:open_feature, rubocop:fix, and steep:check are blocked by missing gems (first failure: benchmark-ips), with insufficient workspace storage for dependency setup.

Gate configuration negotiation on evaluation and exposure support; the current evaluator remains opted out.

Environment: Datadog workspace

Co-Authored-By: Codex GPT-6 <noreply@localhost>
@hhan2024 hhan2024 added the AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos label Nov 2, 2026 — with ChatGPT Codex Connector
@dd-octo-sts dd-octo-sts Bot added the openfeature A new component that provider an ability to configure feature flags label Nov 2, 2026
@datadog-prod-us1-5

datadog-prod-us1-5 Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Pipelines  Tests

❌ Errors

Your PR has failed checks. Please review the issues below and take necessary action before merging.

🚦 2 Pipeline jobs failed

Integration Apps | rails-five (Ruby 2.7) — 🔄 Retry may pass, looks flaky

View more details · View in GitHub Actions

Check Pull Request CI Status | all-jobs-are-green

View more details · View in GitHub Actions

ℹ️ Info

No other issues found (see more)

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
• Patch Coverage: 100.00%
• Overall Coverage: 93.79% (+5.63%)

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: b96a842 | Docs | View more details | Give us feedback!

@dd-octo-sts

dd-octo-sts Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Typing analysis

Ignored files

This PR clears 28 ignored files. It increases the percentage of typed files from 51.9% to 54.75% (+2.85%).

Ignored files (+0-28) ✅ Cleared:
lib/datadog/core/buffer/thread_safe.rb
lib/datadog/core/encoding.rb
lib/datadog/core/environment/identity.rb
lib/datadog/core/environment/platform.rb
lib/datadog/core/environment/socket.rb
lib/datadog/core/environment/variable_helpers.rb
lib/datadog/core/environment/vm_cache.rb
lib/datadog/core/metrics/client.rb
lib/datadog/core/metrics/helpers.rb
lib/datadog/core/metrics/metric.rb
lib/datadog/core/metrics/options.rb
lib/datadog/core/runtime/ext.rb
lib/datadog/core/runtime/metrics.rb
lib/datadog/core/transport/http/adapters/net.rb
lib/datadog/core/transport/http/adapters/unix_socket.rb
lib/datadog/core/utils/at_fork_monkey_patch.rb
lib/datadog/core/utils/forking.rb
lib/datadog/core/utils/hash.rb
lib/datadog/core/utils/network.rb
lib/datadog/core/utils/time.rb
lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb
lib/datadog/core/worker.rb
lib/datadog/core/workers/async.rb
lib/datadog/core/workers/interval_loop.rb
lib/datadog/core/workers/polling.rb
lib/datadog/core/workers/queue.rb
lib/datadog/core/workers/runtime_metrics.rb
lib/datadog/core/environment/yjit.rb

Note: Ignored files are excluded from the next sections.

steep:ignore comments

This PR introduces 2 steep:ignore comments.

steep:ignore comments (+2-0) ❌ Introduced:
lib/datadog/core/utils/forking.rb:51
lib/datadog/core/workers/runtime_metrics.rb:63

Untyped methods

This PR introduces 48 untyped methods and 95 partially typed methods, and clears 67 partially typed methods. It decreases the percentage of typed methods from 73.55% to 72.98% (-0.57%).

Untyped methods (+48-0) ❌ Introduced:
sig/datadog/core/environment/vm_cache.rbs:9
└── def self?.global_constant_state: () -> untyped
sig/datadog/core/environment/vm_cache.rbs:10
└── def self?.global_method_state: () -> untyped
sig/datadog/core/environment/vm_cache.rbs:11
└── def self?.constant_cache_invalidations: () -> untyped
sig/datadog/core/environment/vm_cache.rbs:12
└── def self?.constant_cache_misses: () -> untyped
sig/datadog/core/metrics/client.rbs:41
└── def default_statsd_client: () -> untyped
sig/datadog/core/metrics/client.rbs:47
└── def count: (untyped stat, ?untyped? value, ?untyped? options) ?{ () -> untyped } -> untyped
sig/datadog/core/metrics/client.rbs:49
└── def distribution: (untyped stat, ?untyped? value, ?untyped? options) ?{ () -> untyped } -> untyped
sig/datadog/core/metrics/client.rbs:51
└── def increment: (untyped stat, ?untyped? options) ?{ () -> untyped } -> untyped
sig/datadog/core/metrics/client.rbs:53
└── def gauge: (untyped stat, ?untyped? value, ?untyped? options) ?{ () -> untyped } -> untyped
sig/datadog/core/metrics/client.rbs:55
└── def time: (untyped stat, ?untyped? options) { () -> untyped } -> untyped
sig/datadog/core/metrics/metric.rbs:15
└── def initialize: (*untyped args) -> void
sig/datadog/core/runtime/metrics.rbs:9
└── def gc_metrics: () -> untyped
sig/datadog/core/runtime/metrics.rbs:11
└── def try_flush: () { () -> untyped } -> untyped
sig/datadog/core/runtime/metrics.rbs:13
└── def default_metric_options: () -> untyped
sig/datadog/core/runtime/metrics.rbs:25
└── def compile_service_tags!: () -> untyped
sig/datadog/core/runtime/metrics.rbs:27
└── def nested_gc_metric: (untyped prefix, untyped k, untyped v) -> untyped
sig/datadog/core/runtime/metrics.rbs:29
└── def to_metric_name: (untyped str) -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:23
└── def initialize: (untyped agent_settings) -> void
sig/datadog/core/transport/http/adapters/net.rbs:25
└── def self.build: (untyped agent_settings) -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:27
└── def open: () { (?) -> untyped } -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:29
└── def call: (untyped env) -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:31
└── def get: (untyped env) -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:33
└── def post: (untyped env) -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:37
└── def net_http_path_from_env: (untyped env) -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:42
└── def initialize: (untyped verb) -> void
sig/datadog/core/transport/http/adapters/net.rbs:54
└── def initialize: (untyped http_response) -> void
sig/datadog/core/transport/http/adapters/net.rbs:56
└── def payload: () -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:58
└── def code: () -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:60
└── def ok?: () -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:62
└── def unsupported?: () -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:64
└── def not_found?: () -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:66
└── def client_error?: () -> untyped
sig/datadog/core/transport/http/adapters/net.rbs:68
└── def server_error?: () -> untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:16
└── def initialize: (?untyped? uds_path, **untyped options) -> void
sig/datadog/core/transport/http/adapters/unix_socket.rbs:18
└── def self.build: (untyped agent_settings) -> untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:20
└── def open: () { (?) -> untyped } -> untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:48
└── def connect: () -> untyped
sig/datadog/core/utils/at_fork_monkey_patch.rbs:40
└── def fork: () ?{ () -> untyped } -> untyped
sig/datadog/core/utils/at_fork_monkey_patch.rbs:46
└── def daemon: (*untyped args) -> untyped
sig/datadog/core/utils/forking.rbs:20
└── def initialize: (*untyped args) ?{ (?) -> untyped } -> void
sig/datadog/core/utils/hash.rbs:10
└── def []: (untyped key) -> untyped
sig/datadog/core/worker.rbs:8
└── def initialize: () ?{ () -> untyped } -> void
sig/datadog/core/worker.rbs:10
└── def perform: (*untyped args) -> untyped
sig/datadog/core/workers/polling.rbs:10
└── def perform: (*untyped args) -> untyped
sig/datadog/core/workers/queue.rbs:8
└── def perform: (*untyped args) -> untyped
sig/datadog/core/workers/queue.rbs:13
└── def buffer: () -> untyped
sig/datadog/core/workers/queue.rbs:15
└── def enqueue: (*untyped args) -> untyped
sig/datadog/core/workers/queue.rbs:17
└── def dequeue: () -> untyped
Partially typed methods (+95-67) ❌ Introduced:
sig/datadog/core/chunker.rbs:4
└── def self?.chunk_by_size: (Enumerable[untyped] list, Numeric max_chunk_size) -> Enumerator[Array[untyped], untyped]
sig/datadog/core/crashtracking/component.rbs:15
└── def initialize: (
          tags: Hash[String, String],
          agent_base_url: String,
          ld_library_path: String,
          path_to_crashtracking_receiver_binary: String,
          logger: untyped
        ) -> void
sig/datadog/core/environment/vm_cache.rbs:2
└── def self.stat: () -> Hash[Symbol, untyped]
sig/datadog/core/environment/yjit.rbs:28
└── def self.runtime_stats: () -> Hash[Symbol, untyped]
sig/datadog/core/feature_flags.rbs:12
└── def get_assignment: (
          String flag_key,
          Symbol expected_type,
          Hash[String, untyped] context
        ) -> ResolutionDetails
sig/datadog/core/metrics/client.rbs:23
└── def initialize: (
          telemetry: Core::Telemetry::Component telemetry,
          ?statsd: untyped? statsd,
          ?enabled: bool enabled,
          ?logger: Core::Logger logger,
          **untyped _
        ) -> void
sig/datadog/core/metrics/client.rbs:35
└── def enabled=: (untyped enabled) -> void
sig/datadog/core/metrics/client.rbs:43
└── def configure: (?Hash[untyped, untyped] options) -> void
sig/datadog/core/metrics/client.rbs:59
└── def close: () -> (untyped | nil)
sig/datadog/core/metrics/metric.rbs:13
└── def self.new: (Symbol type, String? name, Numeric? value, ?Hash[Symbol, untyped]? options) -> instance
sig/datadog/core/metrics/options.rbs:9
└── def metric_options: (?Hash[Symbol, untyped]? options) -> Hash[Symbol, untyped]
sig/datadog/core/metrics/options.rbs:11
└── def default_metric_options: () -> Hash[Symbol, untyped]
sig/datadog/core/remote/client.rbs:40
└── def payload: () ->  Hash[Symbol, untyped]
sig/datadog/core/remote/client.rbs:42
└── def gem_spec: (String) -> (Gem::Specification | untyped)
sig/datadog/core/remote/configuration/content.rbs:6
└── def self.parse: (Hash[Symbol, untyped] hash) -> Content
sig/datadog/core/remote/configuration/content.rbs:44
└── def self.parse: (Array[Hash[Symbol, untyped]] array) -> ContentList
sig/datadog/core/remote/configuration/digest.rbs:6
└── def self.parse: (Hash[String, untyped] hash) -> DigestList
sig/datadog/core/remote/configuration/target.rbs:6
└── def self.parse: (Hash[String, untyped] hash) -> TargetMap
sig/datadog/core/remote/configuration/target.rbs:23
└── def self.parse: (Hash[String, untyped] hash) -> Target
sig/datadog/core/runtime/metrics.rbs:5
└── def initialize: (telemetry: Core::Telemetry::Component telemetry, **untyped options) -> void
sig/datadog/core/runtime/metrics.rbs:6
└── def register_service: (untyped service) -> (nil | untyped)
sig/datadog/core/runtime/metrics.rbs:7
└── def flush: () -> (nil | untyped)
sig/datadog/core/runtime/metrics.rbs:31
└── def gauge_if_not_nil: (untyped metric_name, untyped metric_value) -> (untyped | nil)
sig/datadog/core/telemetry/event/app_started.rbs:43
└── def configuration: (untyped settings, Core::Configuration::AgentSettings agent_settings) -> Array[telemetry_configuration]
sig/datadog/core/telemetry/event/app_started.rbs:57
└── def collect_all_configuration_options: (untyped settings) -> Array[Configuration::Option]
sig/datadog/core/telemetry/event/app_started.rbs:59
└── def collect_integration_configuration_options: (untyped tracing_settings) -> Array[Configuration::Option]
sig/datadog/core/telemetry/event/app_started.rbs:61
└── def collect_configuration_options_from: (untyped settings) -> Array[Configuration::Option]
sig/datadog/core/telemetry/event/app_started.rbs:65
└── def resolve_option: (untyped settings, String config_path) -> Configuration::Option
sig/datadog/core/telemetry/request.rbs:5
└── def self.build_payload: (Event::Base event, int seq_id, ?debug: bool) -> Hash[Symbol, untyped]
sig/datadog/core/telemetry/request.rbs:9
└── def self.application: -> Hash[Symbol, untyped]
sig/datadog/core/telemetry/request.rbs:10
└── def self.host: -> Hash[Symbol, untyped]
sig/datadog/core/transport/http/adapters/unix_socket.rbs:44
└── def self.new: (untyped uds_path, ?Hash[untyped, untyped] options) -> instance
sig/datadog/core/transport/http/adapters/unix_socket.rbs:46
└── def initialize: (untyped uds_path, ?Hash[untyped, untyped] options) -> void
sig/datadog/core/transport/http/api/instance.rbs:19
└── def initialize: (Endpoint endpoint, untyped adapter, ?Hash[untyped, untyped] options) -> void
sig/datadog/core/transport/http/builder.rbs:24
└── def headers: (?Hash[untyped, untyped] values) -> untyped
sig/datadog/core/transport/http/builder.rbs:26
└── def api: (untyped key, untyped spec, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/core/utils/at_fork_monkey_patch.rbs:27
└── def self.at_fork: (Symbol stage) { () -> untyped } -> Proc
sig/datadog/core/utils/forking.rbs:11
└── def after_fork!: () { () -> untyped } -> bool
sig/datadog/core/utils/hash.rbs:8
└── def initialize: (::Hash[untyped, untyped] hash) -> void
sig/datadog/core/utils/hash.rbs:12
└── def key?: (untyped key) -> bool
sig/datadog/core/utils/hash.rbs:18
└── def original_hash: () -> ::Hash[untyped, untyped]
sig/datadog/core/utils/spawn_monkey_patch.rbs:14
└── def self.inject_envs: (untyped args) -> Array[untyped]
sig/datadog/core/utils.rbs:7
└── def self.truncate: (untyped value, untyped size, ?String omission) -> untyped
sig/datadog/core/utils.rbs:12
└── def self.extract_host_port: (untyped host_port) -> (nil | Array[untyped])
sig/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rbs:30
└── def initialize: (untyped filename_or_io, untyped content_type, ?untyped? filename, ?Hash[untyped, untyped] opts) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/multipartable.rbs:8
└── def set_content_type: (untyped type, ?Hash[untyped, untyped] params) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/multipartable.rbs:10
└── def content_length=: (untyped len) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/multipartable.rbs:12
└── def body_stream=: (untyped body_stream) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/multipartable.rbs:19
└── def initialize: (untyped path, untyped params, ?Hash[untyped, untyped] headers, ?untyped boundary) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:11
└── def self.new: (untyped boundary, untyped name, untyped value, ?Hash[untyped, untyped] headers) -> untyped
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:21
└── def initialize: (untyped boundary, untyped name, untyped value, ?Hash[untyped, untyped] headers) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:24
└── def build_part: (untyped boundary, untyped name, untyped value, ?Hash[untyped, untyped] headers) -> untyped
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:34
└── def initialize: (untyped boundary, untyped name, untyped io, ?Hash[untyped, untyped] headers) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:35
└── def build_head: (untyped boundary, untyped name, untyped filename, untyped `type`, untyped content_len, ?Hash[untyped, untyped] opts) -> untyped
sig/datadog/core/workers/async.rbs:19
└── def perform: (*untyped args) -> void
sig/datadog/core/workers/interval_loop.rbs:18
└── def perform: (*untyped args) -> void
sig/datadog/core/workers/runtime_metrics.rbs:19
└── def initialize: (telemetry: Core::Telemetry::Component, **untyped options) -> void
sig/datadog/core/workers/runtime_metrics.rbs:25
└── def stop: (*untyped args, ?close_metrics: bool) -> bool
sig/datadog/di/instrumenter.rbs:83
└── def run_method_probe: (Array[untyped] args, Hash[Symbol, untyped] kwargs, Proc? target_block, any target_self, Probe probe, untyped responder, [String, Integer]? loc, String method_name) { () -> untyped } -> untyped
sig/datadog/di/instrumenter.rbs:87
└── def kwargs_from_splat: (Array[untyped] args) -> [Array[untyped], Hash[untyped, untyped]]
sig/datadog/profiling/component.rbs:11
└── def self.build_thread_context_collector: (
        untyped settings,
        Datadog::Profiling::StackRecorder recorder,
        Datadog::Tracing::Tracer? optional_tracer,
        Integer max_frames,
      ) -> Datadog::Profiling::Collectors::ThreadContext
sig/datadog/tracing/contrib/configurable.rbs:11
└── def configuration: (?Symbol matcher) -> untyped
sig/datadog/tracing/contrib/configurable.rbs:14
└── def configure: (?Symbol matcher, ?Hash[untyped, untyped] options) ?{ () -> untyped } -> untyped
sig/datadog/tracing/contrib/rack/route_inference.rbs:16
└── def self?.read_or_infer: (Hash[String, untyped] request_env) -> String?
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:15
└── def self?.format: (untyped hash_obj, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:17
└── def self?.format!: (untyped hash_obj, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:19
└── def self?.format_hash: (untyped hash_obj, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:21
└── def self?.format_value: (untyped value, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:23
└── def self?.format_array: (untyped value, untyped options) -> (untyped | Array[untyped])
sig/datadog/tracing/contrib/utils/quantization/http.rbs:18
└── def self?.url: (untyped url, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:20
└── def self?.base_url: (untyped url, ?Hash[untyped, untyped] options) -> (untyped | "")
sig/datadog/tracing/contrib/utils/quantization/http.rbs:22
└── def self?.url!: (untyped url, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:24
└── def self?.query: (untyped query, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:26
└── def self?.query!: (untyped query, ?Hash[untyped, untyped] options) -> ("" | untyped)
sig/datadog/tracing/contrib/utils/quantization/http.rbs:27
└── def self?.collect_query: (untyped query, ?Hash[untyped, untyped] options) { (untyped, untyped, untyped) -> untyped } -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:28
└── def self?.obfuscate_query: (untyped query, ?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/waterdrop.rbs:8
└── def self.inject: (Tracing::TraceDigest digest, Hash[untyped, untyped] data) -> void
sig/datadog/tracing/contrib/waterdrop.rbs:11
└── def self.extract: (Hash[untyped, untyped] data) -> Tracing::TraceDigest?
sig/datadog/tracing/distributed/b3_multi.rbs:18
└── def inject!: (untyped digest, ?Hash[untyped, untyped] data) -> (nil | untyped)
sig/datadog/tracing/distributed/baggage.rbs:18
└── def initialize: (fetcher: untyped, ?baggage_key: String, ?baggage_tag_keys: untyped) -> void
sig/datadog/tracing/flush.rbs:18
└── def initialize: (?Hash[untyped, untyped] options) -> void
sig/datadog/tracing/metadata/metastruct.rbs:15
└── def to_h: () -> Hash[String | Symbol, untyped]
sig/datadog/tracing/remote.rbs:17
└── def self.config_matches?: (Hash[String, untyped] config, String? service, String? env) -> bool
sig/datadog/tracing/remote.rbs:19
└── def self.config_priority: (Hash[String, untyped] config) -> Integer
sig/datadog/tracing/remote.rbs:21
└── def self.merge_lib_configs: (Array[Hash[String, untyped]] configs_most_specific_first) -> Hash[String, untyped]
sig/datadog/tracing/remote.rbs:31
└── def self.parse_content: (Core::Remote::Configuration::Content content) -> Hash[String, untyped]
sig/datadog/tracing/sampling/all_sampler.rbs:9
└── def sample_rate: (*untyped _) -> Float
sig/datadog/tracing/sampling/priority_sampler.rbs:8
└── def initialize: (?Hash[untyped, untyped] opts) -> void
sig/datadog/tracing/sampling/rate_by_key_sampler.rbs:11
└── def initialize: (untyped default_key, ?Float default_rate, ?decision: untyped?) ?{ (TraceOperation trace) -> String } -> void
sig/datadog/tracing/sampling/rate_by_key_sampler.rbs:29
└── def delete_if: () { (String, RateSampler) -> bool } -> untyped
sig/datadog/tracing/sampling/rate_sampler.rbs:12
└── def sample_rate: (*untyped _) -> Float
sig/datadog/tracing/trace_digest.rbs:30
└── def initialize: (?span_id: untyped?, ?span_name: untyped?, ?span_resource: untyped?, ?span_service: untyped?, ?span_type: untyped?, ?span_links: Array[SpanLink]?, ?trace_distributed_tags: untyped?, ?trace_hostname: untyped?, ?trace_id: untyped?, ?trace_name: untyped?, ?trace_origin: untyped?, ?trace_process_id: untyped?, ?trace_resource: untyped?, ?trace_runtime_id: untyped?, ?trace_sampling_priority: untyped?, ?trace_service: untyped?, ?trace_distributed_id: untyped?, ?trace_flags: untyped?, ?trace_state: untyped?, ?trace_state_unknown_fields: untyped?, ?trace_otel_random_value: String?, ?trace_otel_threshold: String?, ?trace_otel_unknown_fields: String?, ?span_remote: untyped?, ?baggage: untyped?) -> void
sig/datadog/tracing/transport/http/statistics.rbs:13
└── def metrics_tag_value: (untyped status_code) -> (untyped | String)
sig/datadog/tracing/transport/io.rbs:6
└── def self?.default: (?Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/utils.rbs:18
└── def self.serialize_attribute: (untyped key, untyped value) -> (untyped | Array[Array[untyped]])
✅ Cleared:
sig/datadog/core/chunker.rbs:4
└── def self?.chunk_by_size: (::Enumerable[untyped] list, ::Numeric max_chunk_size) -> ::Enumerator[::Array[untyped], untyped]
sig/datadog/core/crashtracking/component.rbs:15
└── def initialize: (
          tags: ::Hash[::String, ::String],
          agent_base_url: ::String,
          ld_library_path: ::String,
          path_to_crashtracking_receiver_binary: ::String,
          logger: untyped
        ) -> void
sig/datadog/core/feature_flags.rbs:12
└── def get_assignment: (
          ::String flag_key,
          ::Symbol expected_type,
          ::Hash[::String, untyped] context
        ) -> ResolutionDetails
sig/datadog/core/remote/client.rbs:40
└── def payload: () ->  ::Hash[Symbol, untyped]
sig/datadog/core/remote/client.rbs:42
└── def gem_spec: (::String) -> (::Gem::Specification | untyped)
sig/datadog/core/remote/configuration/content.rbs:6
└── def self.parse: (::Hash[Symbol, untyped] hash) -> Content
sig/datadog/core/remote/configuration/content.rbs:44
└── def self.parse: (::Array[::Hash[Symbol, untyped]] array) -> ContentList
sig/datadog/core/remote/configuration/digest.rbs:6
└── def self.parse: (::Hash[::String, untyped] hash) -> DigestList
sig/datadog/core/remote/configuration/target.rbs:6
└── def self.parse: (::Hash[::String, untyped] hash) -> TargetMap
sig/datadog/core/remote/configuration/target.rbs:23
└── def self.parse: (::Hash[::String, untyped] hash) -> Target
sig/datadog/core/telemetry/event/app_started.rbs:43
└── def configuration: (untyped settings, Core::Configuration::AgentSettings agent_settings) -> ::Array[telemetry_configuration]
sig/datadog/core/telemetry/event/app_started.rbs:57
└── def collect_all_configuration_options: (untyped settings) -> ::Array[Configuration::Option]
sig/datadog/core/telemetry/event/app_started.rbs:59
└── def collect_integration_configuration_options: (untyped tracing_settings) -> ::Array[Configuration::Option]
sig/datadog/core/telemetry/event/app_started.rbs:61
└── def collect_configuration_options_from: (untyped settings) -> ::Array[Configuration::Option]
sig/datadog/core/telemetry/event/app_started.rbs:65
└── def resolve_option: (untyped settings, ::String config_path) -> Configuration::Option
sig/datadog/core/telemetry/request.rbs:5
└── def self.build_payload: (Event::Base event, int seq_id, ?debug: bool) -> ::Hash[Symbol, untyped]
sig/datadog/core/telemetry/request.rbs:9
└── def self.application: -> ::Hash[Symbol, untyped]
sig/datadog/core/telemetry/request.rbs:10
└── def self.host: -> ::Hash[Symbol, untyped]
sig/datadog/core/transport/http/api/instance.rbs:19
└── def initialize: (Endpoint endpoint, untyped adapter, ?::Hash[untyped, untyped] options) -> void
sig/datadog/core/transport/http/builder.rbs:24
└── def headers: (?::Hash[untyped, untyped] values) -> untyped
sig/datadog/core/transport/http/builder.rbs:26
└── def api: (untyped key, untyped spec, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/core/utils/spawn_monkey_patch.rbs:14
└── def self.inject_envs: (untyped args) -> ::Array[untyped]
sig/datadog/core/utils.rbs:7
└── def self.truncate: (untyped value, untyped size, ?::String omission) -> untyped
sig/datadog/core/utils.rbs:12
└── def self.extract_host_port: (untyped host_port) -> (nil | ::Array[untyped])
sig/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rbs:30
└── def initialize: (untyped filename_or_io, untyped content_type, ?untyped? filename, ?::Hash[untyped, untyped] opts) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:11
└── def self.new: (untyped boundary, untyped name, untyped value, ?::Hash[untyped, untyped] headers) -> untyped
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:21
└── def initialize: (untyped boundary, untyped name, untyped value, ?::Hash[untyped, untyped] headers) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:24
└── def build_part: (untyped boundary, untyped name, untyped value, ?::Hash[untyped, untyped] headers) -> untyped
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:34
└── def initialize: (untyped boundary, untyped name, untyped io, ?::Hash[untyped, untyped] headers) -> void
sig/datadog/core/vendor/multipart-post/multipart/post/parts.rbs:35
└── def build_head: (untyped boundary, untyped name, untyped filename, untyped `type`, untyped content_len, ?::Hash[untyped, untyped] opts) -> untyped
sig/datadog/di/instrumenter.rbs:83
└── def run_method_probe: (::Array[untyped] args, ::Hash[::Symbol, untyped] kwargs, ::Proc? target_block, any target_self, Probe probe, untyped responder, [::String, ::Integer]? loc, ::String method_name) { () -> untyped } -> untyped
sig/datadog/di/instrumenter.rbs:87
└── def kwargs_from_splat: (::Array[untyped] args) -> [::Array[untyped], ::Hash[untyped, untyped]]
sig/datadog/profiling/component.rbs:11
└── def self.build_thread_context_collector: (
        untyped settings,
        Datadog::Profiling::StackRecorder recorder,
        Datadog::Tracing::Tracer? optional_tracer,
      ) -> Datadog::Profiling::Collectors::ThreadContext
sig/datadog/tracing/contrib/configurable.rbs:11
└── def configuration: (?::Symbol matcher) -> untyped
sig/datadog/tracing/contrib/configurable.rbs:14
└── def configure: (?::Symbol matcher, ?::Hash[untyped, untyped] options) ?{ () -> untyped } -> untyped
sig/datadog/tracing/contrib/rack/route_inference.rbs:16
└── def self?.read_or_infer: (Hash[::String, untyped] request_env) -> ::String?
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:15
└── def self?.format: (untyped hash_obj, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:17
└── def self?.format!: (untyped hash_obj, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:19
└── def self?.format_hash: (untyped hash_obj, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:21
└── def self?.format_value: (untyped value, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:23
└── def self?.format_array: (untyped value, untyped options) -> (untyped | ::Array[untyped])
sig/datadog/tracing/contrib/utils/quantization/http.rbs:18
└── def self?.url: (untyped url, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:20
└── def self?.base_url: (untyped url, ?::Hash[untyped, untyped] options) -> (untyped | "")
sig/datadog/tracing/contrib/utils/quantization/http.rbs:22
└── def self?.url!: (untyped url, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:24
└── def self?.query: (untyped query, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:26
└── def self?.query!: (untyped query, ?::Hash[untyped, untyped] options) -> ("" | untyped)
sig/datadog/tracing/contrib/utils/quantization/http.rbs:27
└── def self?.collect_query: (untyped query, ?::Hash[untyped, untyped] options) { (untyped, untyped, untyped) -> untyped } -> untyped
sig/datadog/tracing/contrib/utils/quantization/http.rbs:28
└── def self?.obfuscate_query: (untyped query, ?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/contrib/waterdrop.rbs:8
└── def self.inject: (Tracing::TraceDigest digest, ::Hash[untyped, untyped] data) -> void
sig/datadog/tracing/contrib/waterdrop.rbs:11
└── def self.extract: (::Hash[untyped, untyped] data) -> Tracing::TraceDigest?
sig/datadog/tracing/distributed/b3_multi.rbs:18
└── def inject!: (untyped digest, ?::Hash[untyped, untyped] data) -> (nil | untyped)
sig/datadog/tracing/distributed/baggage.rbs:18
└── def initialize: (fetcher: untyped, ?baggage_key: ::String, ?baggage_tag_keys: untyped) -> void
sig/datadog/tracing/flush.rbs:18
└── def initialize: (?::Hash[untyped, untyped] options) -> void
sig/datadog/tracing/metadata/metastruct.rbs:15
└── def to_h: () -> ::Hash[String | Symbol, untyped]
sig/datadog/tracing/remote.rbs:17
└── def self.config_matches?: (::Hash[::String, untyped] config, ::String? service, ::String? env) -> bool
sig/datadog/tracing/remote.rbs:19
└── def self.config_priority: (::Hash[::String, untyped] config) -> ::Integer
sig/datadog/tracing/remote.rbs:21
└── def self.merge_lib_configs: (::Array[::Hash[::String, untyped]] configs_most_specific_first) -> ::Hash[::String, untyped]
sig/datadog/tracing/remote.rbs:31
└── def self.parse_content: (Core::Remote::Configuration::Content content) -> ::Hash[::String, untyped]
sig/datadog/tracing/sampling/all_sampler.rbs:9
└── def sample_rate: (*untyped _) -> ::Float
sig/datadog/tracing/sampling/priority_sampler.rbs:8
└── def initialize: (?::Hash[untyped, untyped] opts) -> void
sig/datadog/tracing/sampling/rate_by_key_sampler.rbs:11
└── def initialize: (untyped default_key, ?::Float default_rate, ?decision: untyped?) ?{ (TraceOperation trace) -> ::String } -> void
sig/datadog/tracing/sampling/rate_by_key_sampler.rbs:29
└── def delete_if: () { (::String, RateSampler) -> bool } -> untyped
sig/datadog/tracing/sampling/rate_sampler.rbs:12
└── def sample_rate: (*untyped _) -> ::Float
sig/datadog/tracing/trace_digest.rbs:30
└── def initialize: (?span_id: untyped?, ?span_name: untyped?, ?span_resource: untyped?, ?span_service: untyped?, ?span_type: untyped?, ?span_links: ::Array[SpanLink]?, ?trace_distributed_tags: untyped?, ?trace_hostname: untyped?, ?trace_id: untyped?, ?trace_name: untyped?, ?trace_origin: untyped?, ?trace_process_id: untyped?, ?trace_resource: untyped?, ?trace_runtime_id: untyped?, ?trace_sampling_priority: untyped?, ?trace_service: untyped?, ?trace_distributed_id: untyped?, ?trace_flags: untyped?, ?trace_state: untyped?, ?trace_state_unknown_fields: untyped?, ?trace_otel_random_value: ::String?, ?trace_otel_threshold: ::String?, ?trace_otel_unknown_fields: ::String?, ?span_remote: untyped?, ?baggage: untyped?) -> void
sig/datadog/tracing/transport/http/statistics.rbs:13
└── def metrics_tag_value: (untyped status_code) -> (untyped | ::String)
sig/datadog/tracing/transport/io.rbs:6
└── def self?.default: (?::Hash[untyped, untyped] options) -> untyped
sig/datadog/tracing/utils.rbs:18
└── def self.serialize_attribute: (untyped key, untyped value) -> (untyped | ::Array[::Array[untyped]])

Untyped other declarations

This PR introduces 34 untyped other declarations and 9 partially typed other declarations, and clears 7 partially typed other declarations. It decreases the percentage of typed other declarations from 87.05% to 86.28% (-0.77%).

Untyped other declarations (+34-0) ❌ Introduced:
sig/datadog/core/metrics/client.rbs:17
└── attr_reader statsd: untyped
sig/datadog/core/metrics/client.rbs:65
└── IGNORED_STATSD_ONLY_ONCE: untyped
sig/datadog/core/runtime/metrics.rbs:17
└── attr_reader service_tags: untyped
sig/datadog/core/runtime/metrics.rbs:19
└── attr_reader services: untyped
sig/datadog/core/runtime/metrics.rbs:21
└── attr_reader process_tags_enabled: untyped
sig/datadog/core/transport/http/adapters/net.rbs:7
└── @hostname: untyped
sig/datadog/core/transport/http/adapters/net.rbs:9
└── @port: untyped
sig/datadog/core/transport/http/adapters/net.rbs:11
└── @timeout: untyped
sig/datadog/core/transport/http/adapters/net.rbs:13
└── @ssl: untyped
sig/datadog/core/transport/http/adapters/net.rbs:15
└── attr_reader hostname: untyped
sig/datadog/core/transport/http/adapters/net.rbs:17
└── attr_reader port: untyped
sig/datadog/core/transport/http/adapters/net.rbs:19
└── attr_reader timeout: untyped
sig/datadog/core/transport/http/adapters/net.rbs:21
└── attr_reader ssl: untyped
sig/datadog/core/transport/http/adapters/net.rbs:40
└── attr_reader verb: untyped
sig/datadog/core/transport/http/adapters/net.rbs:48
└── @http_response: untyped
sig/datadog/core/transport/http/adapters/net.rbs:52
└── attr_reader http_response: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:7
└── @filepath: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:9
└── @timeout: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:11
└── attr_reader filepath: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:13
└── attr_reader timeout: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:24
└── @filepath: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:26
└── @read_timeout: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:28
└── @continue_timeout: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:30
└── @debug_output: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:32
└── @unix_socket: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:34
└── @socket: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:38
└── attr_reader filepath: untyped
sig/datadog/core/transport/http/adapters/unix_socket.rbs:40
└── attr_reader unix_socket: untyped
sig/datadog/core/vendor/multipart-post/multipart/post/multipartable.rbs:21
└── attr_reader boundary: untyped
sig/datadog/core/workers/async.rbs:28
└── @result: untyped
sig/datadog/core/workers/async.rbs:40
└── attr_reader result: untyped
sig/datadog/core/workers/async.rbs:64
└── attr_writer result: untyped
sig/datadog/core/workers/queue.rbs:11
└── @buffer: untyped
sig/datadog/core/workers/queue.rbs:23
└── attr_writer buffer: untyped
Partially typed other declarations (+9-7) ❌ Introduced:
sig/datadog/core/metrics/metric.rbs:11
└── attr_accessor options: Hash[Symbol, untyped]
sig/datadog/core/remote/client.rbs:33
└── @gem_specs: Hash[String, Gem::Specification | untyped]
sig/datadog/core/utils/hash.rbs:6
└── @hash: ::Hash[untyped, untyped]
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:9
└── EXCLUDE_KEYS: Array[untyped]
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:11
└── SHOW_KEYS: Array[untyped]
sig/datadog/tracing/metadata/tagging.rbs:5
└── @meta: Hash[untyped, untyped]
sig/datadog/tracing/metadata/tagging.rbs:6
└── @metrics: Hash[untyped, untyped]
sig/datadog/tracing/metadata/tagging.rbs:8
└── NUMERIC_TAG_SIZE_RANGE: Range[untyped]
sig/datadog/tracing/metadata/tagging.rbs:9
└── ENSURE_AGENT_TAGS: Hash[untyped, bool]
✅ Cleared:
sig/datadog/core/remote/client.rbs:33
└── @gem_specs: ::Hash[::String, ::Gem::Specification | untyped]
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:9
└── EXCLUDE_KEYS: ::Array[untyped]
sig/datadog/tracing/contrib/utils/quantization/hash_formatter.rbs:11
└── SHOW_KEYS: ::Array[untyped]
sig/datadog/tracing/metadata/tagging.rbs:5
└── @meta: ::Hash[untyped, untyped]
sig/datadog/tracing/metadata/tagging.rbs:6
└── @metrics: ::Hash[untyped, untyped]
sig/datadog/tracing/metadata/tagging.rbs:8
└── NUMERIC_TAG_SIZE_RANGE: ::Range[untyped]
sig/datadog/tracing/metadata/tagging.rbs:9
└── ENSURE_AGENT_TAGS: ::Hash[untyped, bool]

If you believe a method or an attribute is rightfully untyped or partially typed, you can add # untyped:accept on the line before the definition to remove it from the stats.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos openfeature A new component that provider an ability to configure feature flags

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants