checkoff 0.256.0 → 0.258.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/checkoff/attachments.rb +12 -11
  3. data/lib/checkoff/cli.rb +11 -14
  4. data/lib/checkoff/clients.rb +2 -2
  5. data/lib/checkoff/custom_fields.rb +9 -7
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +17 -11
  7. data/lib/checkoff/internal/asana_event_filter.rb +4 -0
  8. data/lib/checkoff/internal/config_loader.rb +2 -2
  9. data/lib/checkoff/internal/logging.rb +2 -2
  10. data/lib/checkoff/internal/search_url/custom_field_param_converter.rb +8 -7
  11. data/lib/checkoff/internal/search_url/custom_field_variant.rb +2 -0
  12. data/lib/checkoff/internal/search_url/date_param_converter.rb +8 -2
  13. data/lib/checkoff/internal/search_url/parser.rb +7 -5
  14. data/lib/checkoff/internal/search_url/results_merger.rb +1 -2
  15. data/lib/checkoff/internal/search_url/simple_param_converter.rb +13 -4
  16. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +3 -0
  17. data/lib/checkoff/internal/selector_classes/common.rb +14 -30
  18. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +13 -2
  19. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +9 -0
  20. data/lib/checkoff/internal/selector_classes/project.rb +6 -13
  21. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +6 -3
  22. data/lib/checkoff/internal/selector_classes/section.rb +2 -4
  23. data/lib/checkoff/internal/selector_classes/task.rb +42 -16
  24. data/lib/checkoff/internal/selector_evaluator.rb +4 -6
  25. data/lib/checkoff/internal/task_timing.rb +6 -5
  26. data/lib/checkoff/internal/thread_local.rb +2 -1
  27. data/lib/checkoff/my_tasks.rb +3 -1
  28. data/lib/checkoff/portfolios.rb +1 -1
  29. data/lib/checkoff/projects.rb +4 -3
  30. data/lib/checkoff/sections.rb +7 -11
  31. data/lib/checkoff/subtasks.rb +2 -1
  32. data/lib/checkoff/tags.rb +3 -2
  33. data/lib/checkoff/task_searches.rb +6 -3
  34. data/lib/checkoff/task_selectors.rb +3 -3
  35. data/lib/checkoff/tasks.rb +10 -9
  36. data/lib/checkoff/timelines.rb +21 -5
  37. data/lib/checkoff/timing.rb +4 -8
  38. data/lib/checkoff/version.rb +1 -1
  39. data/lib/checkoff/workspaces.rb +5 -2
  40. data/rbi/checkoff.rbi +145 -104
  41. data/sig/checkoff.rbs +110 -97
  42. metadata +2 -2
data/rbi/checkoff.rbi CHANGED
@@ -82,7 +82,7 @@ module Overcommit
82
82
  end
83
83
 
84
84
  module Checkoff
85
- VERSION = '0.256.0'
85
+ VERSION = '0.258.0'
86
86
 
87
87
  class Attachments
88
88
  include Logging
@@ -1289,10 +1289,10 @@ module Checkoff
1289
1289
  def h_to_task(task_data); end
1290
1290
 
1291
1291
  sig { params(task: T.untyped, portfolio_name: T.untyped, workspace_name: T.untyped).returns(T.untyped) }
1292
- def in_portfolio_named?(task, portfolio_name, workspace_name: @workspaces.default_workspace.name); end
1292
+ def in_portfolio_named?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
1293
1293
 
1294
1294
  sig { params(task: T.untyped, portfolio_name: T.untyped, workspace_name: T.untyped).returns(T.untyped) }
1295
- def in_portfolio_more_than_once?(task, portfolio_name, workspace_name: @workspaces.default_workspace.name); end
1295
+ def in_portfolio_more_than_once?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
1296
1296
 
1297
1297
  sig { returns(T.untyped) }
1298
1298
  def as_cache_key; end
@@ -1862,6 +1862,9 @@ module Checkoff
1862
1862
  sig { returns(T.untyped) }
1863
1863
  def single_value; end
1864
1864
 
1865
+ sig { returns(T.untyped) }
1866
+ def convert; end
1867
+
1865
1868
  sig { returns(T.untyped) }
1866
1869
  attr_reader :key
1867
1870
 
@@ -1977,6 +1980,9 @@ module Checkoff
1977
1980
  class FunctionEvaluator
1978
1981
  include Logging
1979
1982
 
1983
+ sig { params(selector: T.untyped, _kwargs: T.untyped).void }
1984
+ def initialize(selector: nil, **_kwargs); end
1985
+
1980
1986
  sig { params(_index: T.untyped).returns(T.untyped) }
1981
1987
  def evaluate_arg?(_index); end
1982
1988
 
@@ -2127,6 +2133,9 @@ module Checkoff
2127
2133
  sig { params(selector: T.untyped, custom_fields: T.untyped, _kwargs: T.untyped).void }
2128
2134
  def initialize(selector:, custom_fields:, **_kwargs); end
2129
2135
 
2136
+ sig { returns(T.untyped) }
2137
+ attr_reader :custom_fields
2138
+
2130
2139
  sig { returns(T.untyped) }
2131
2140
  attr_reader :selector
2132
2141
  end
@@ -2182,6 +2191,15 @@ module Checkoff
2182
2191
  end
2183
2192
  def initialize(selector:, projects:, portfolios:, workspaces:, **_kwargs); end
2184
2193
 
2194
+ sig { returns(T.untyped) }
2195
+ attr_reader :projects
2196
+
2197
+ sig { returns(T.untyped) }
2198
+ attr_reader :portfolios
2199
+
2200
+ sig { returns(T.untyped) }
2201
+ attr_reader :workspaces
2202
+
2185
2203
  sig { returns(T.untyped) }
2186
2204
  attr_reader :selector
2187
2205
  end
@@ -2220,10 +2238,13 @@ module Checkoff
2220
2238
  def initialize(selector:, sections:, client:, **kwargs); end
2221
2239
 
2222
2240
  sig { returns(T.untyped) }
2223
- attr_reader :selector
2241
+ attr_reader :sections
2224
2242
 
2225
2243
  sig { returns(T.untyped) }
2226
2244
  attr_reader :client
2245
+
2246
+ sig { returns(T.untyped) }
2247
+ attr_reader :selector
2227
2248
  end
2228
2249
  end
2229
2250
 
@@ -2449,7 +2470,7 @@ end
2449
2470
  # typed: ignore
2450
2471
  # Command-line and gem client for Asana (unofficial)
2451
2472
  module Checkoff
2452
- VERSION = T.let('0.256.0', T.untyped)
2473
+ VERSION = T.let('0.258.0', T.untyped)
2453
2474
 
2454
2475
  # Move tasks from one place to another
2455
2476
  class MvSubcommand
@@ -2536,7 +2557,7 @@ module Checkoff
2536
2557
  def run; end
2537
2558
 
2538
2559
  # _@param_ `project_arg`
2539
- sig { params(project_arg: String).returns(T.any(Symbol, String)) }
2560
+ sig { params(project_arg: T.any(Symbol, String)).returns(T.any(Symbol, String)) }
2540
2561
  def project_arg_to_name(project_arg); end
2541
2562
 
2542
2563
  # Returns the value of attribute from_workspace_name.
@@ -2792,7 +2813,7 @@ module Checkoff
2792
2813
  def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: []); end
2793
2814
 
2794
2815
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
2795
- # @sg-ignore
2816
+ # @sg-ignore nil check above is not flow-sensitive
2796
2817
  #
2797
2818
  # _@param_ `workspace_name`
2798
2819
  #
@@ -2973,7 +2994,8 @@ module Checkoff
2973
2994
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2974
2995
  # Add a task
2975
2996
  #
2976
- # @sg-ignore
2997
+ # @sg-ignore @asana_task.create return type could not be inferred — calling a class method
2998
+ # through a Class<T>-typed ivar is a known Solargraph dispatch limitation
2977
2999
  #
2978
3000
  # _@param_ `name`
2979
3001
  #
@@ -2995,7 +3017,6 @@ module Checkoff
2995
3017
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2996
3018
  # True if any of the task's dependencies are marked incomplete
2997
3019
  #
2998
- # @sg-ignore
2999
3020
  # Include 'dependencies.gid' in extra_fields of task passed in.
3000
3021
  #
3001
3022
  # _@param_ `task`
@@ -3042,7 +3063,7 @@ module Checkoff
3042
3063
  #
3043
3064
  # _@param_ `workspace_name`
3044
3065
  sig { params(task: Asana::Resources::Task, portfolio_name: String, workspace_name: String).returns(T::Boolean) }
3045
- def in_portfolio_named?(task, portfolio_name, workspace_name: @workspaces.default_workspace.name); end
3066
+ def in_portfolio_named?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
3046
3067
 
3047
3068
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3048
3069
  # True if the task is in a project which is in the given portfolio
@@ -3053,7 +3074,7 @@ module Checkoff
3053
3074
  #
3054
3075
  # _@param_ `workspace_name`
3055
3076
  sig { params(task: Asana::Resources::Task, portfolio_name: String, workspace_name: String).returns(T::Boolean) }
3056
- def in_portfolio_more_than_once?(task, portfolio_name, workspace_name: @workspaces.default_workspace.name); end
3077
+ def in_portfolio_more_than_once?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
3057
3078
 
3058
3079
  sig { returns(T::Hash[T.untyped, T.untyped]) }
3059
3080
  def as_cache_key; end
@@ -3088,7 +3109,9 @@ module Checkoff
3088
3109
  sig { returns(Checkoff::Projects) }
3089
3110
  def projects; end
3090
3111
 
3091
- # @sg-ignore
3112
+ # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
3113
+ # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
3114
+ # unify #fetch across that union
3092
3115
  sig { returns(String) }
3093
3116
  def default_assignee_gid; end
3094
3117
 
@@ -3115,7 +3138,7 @@ module Checkoff
3115
3138
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3116
3139
  def finer(message = nil, &block); end
3117
3140
 
3118
- # @sg-ignore
3141
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3119
3142
  sig { returns(Symbol) }
3120
3143
  def log_level; end
3121
3144
 
@@ -3223,7 +3246,7 @@ module Checkoff
3223
3246
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3224
3247
  def finer(message = nil, &block); end
3225
3248
 
3226
- # @sg-ignore
3249
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3227
3250
  sig { returns(Symbol) }
3228
3251
  def log_level; end
3229
3252
 
@@ -3343,7 +3366,7 @@ module Checkoff
3343
3366
  # _@param_ `period_name`
3344
3367
  #
3345
3368
  # _@param_ `args`
3346
- sig { params(date_or_time: T.nilable(T.any(Date, Time)), period_name: Symbol, args: Object).returns(T::Boolean) }
3369
+ sig { params(date_or_time: T.nilable(T.any(Date, Time)), period_name: Symbol, args: T::Array[Object]).returns(T::Boolean) }
3347
3370
  def compound_in_period?(date_or_time, period_name, *args); end
3348
3371
 
3349
3372
  sig { void }
@@ -3372,7 +3395,7 @@ module Checkoff
3372
3395
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3373
3396
  def finer(message = nil, &block); end
3374
3397
 
3375
- # @sg-ignore
3398
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3376
3399
  sig { returns(Symbol) }
3377
3400
  def log_level; end
3378
3401
  end
@@ -3525,7 +3548,7 @@ module Checkoff
3525
3548
  def project(workspace_name, project_name, extra_fields: []); end
3526
3549
 
3527
3550
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3528
- # @sg-ignore
3551
+ # @sg-ignore nil check above is not flow-sensitive
3529
3552
  #
3530
3553
  # _@param_ `workspace_name`
3531
3554
  #
@@ -3645,7 +3668,7 @@ module Checkoff
3645
3668
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3646
3669
  def finer(message = nil, &block); end
3647
3670
 
3648
- # @sg-ignore
3671
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3649
3672
  sig { returns(Symbol) }
3650
3673
  def log_level; end
3651
3674
 
@@ -3730,7 +3753,7 @@ module Checkoff
3730
3753
  # _@param_ `extra_fields`
3731
3754
  sig do
3732
3755
  params(
3733
- workspace_name: String,
3756
+ workspace_name: T.any(String, Symbol),
3734
3757
  project_name: T.any(String, Symbol),
3735
3758
  only_uncompleted: T::Boolean,
3736
3759
  extra_fields: T::Array[String]
@@ -3771,7 +3794,7 @@ module Checkoff
3771
3794
  def tasks(workspace_name, project_name, section_name, only_uncompleted: true, extra_fields: []); end
3772
3795
 
3773
3796
  # Pulls just names of tasks from a given section.
3774
- # @sg-ignore
3797
+ # @sg-ignore Task#name is nilable; task names are assumed present here
3775
3798
  #
3776
3799
  # _@param_ `workspace_name`
3777
3800
  #
@@ -3909,7 +3932,7 @@ module Checkoff
3909
3932
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3910
3933
  def finer(message = nil, &block); end
3911
3934
 
3912
- # @sg-ignore
3935
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3913
3936
  sig { returns(Symbol) }
3914
3937
  def log_level; end
3915
3938
 
@@ -3987,10 +4010,10 @@ module Checkoff
3987
4010
  # expected to move to the new-style way of representing sections
3988
4011
  # as memberships with a separate API within a task.
3989
4012
  #
3990
- # @sg-ignore
4013
+ # @sg-ignore Checkoff::Subtasks#subtask_section? return type could not be inferred
3991
4014
  #
3992
4015
  # _@param_ `subtask`
3993
- sig { params(subtask: Asana::Resources::Task).returns(T::Boolean) }
4016
+ sig { params(subtask: Asana::Resources::Task).returns(T.nilable(T::Boolean)) }
3994
4017
  def subtask_section?(subtask); end
3995
4018
 
3996
4019
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
@@ -4209,7 +4232,7 @@ module Checkoff
4209
4232
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), clients: Checkoff::Clients.new(config:), client: clients.client, projects: Checkoff::Projects.new(config:, client:), workspaces: Checkoff::Workspaces.new(config:, client:)); end
4210
4233
 
4211
4234
  # sord warn - Asana::Resources::Portfolio wasn't able to be resolved to a constant in this project
4212
- # @sg-ignore
4235
+ # @sg-ignore nil check above is not flow-sensitive
4213
4236
  #
4214
4237
  # _@param_ `workspace_name`
4215
4238
  #
@@ -4292,7 +4315,8 @@ module Checkoff
4292
4315
  def workspace(workspace_name); end
4293
4316
 
4294
4317
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
4295
- # @sg-ignore
4318
+ # @sg-ignore @asana_workspace.find_by_id return type could not be inferred — calling a
4319
+ # class method through a Class<T>-typed ivar is a known Solargraph dispatch limitation
4296
4320
  sig { returns(Asana::Resources::Workspace) }
4297
4321
  def default_workspace; end
4298
4322
 
@@ -4303,7 +4327,9 @@ module Checkoff
4303
4327
  sig { params(workspace_name: T.any(String, Symbol)).returns(Asana::Resources::Workspace) }
4304
4328
  def workspace_or_raise(workspace_name); end
4305
4329
 
4306
- # @sg-ignore
4330
+ # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
4331
+ # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
4332
+ # unify #fetch across that union
4307
4333
  sig { returns(String) }
4308
4334
  def default_workspace_gid; end
4309
4335
 
@@ -4340,6 +4366,7 @@ module Checkoff
4340
4366
  end
4341
4367
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), workspaces: Checkoff::Workspaces.new(config:), clients: Checkoff::Clients.new(config:), client: clients.client); end
4342
4368
 
4369
+ # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4343
4370
  # sord warn - Asana::Resources::Attachment wasn't able to be resolved to a constant in this project
4344
4371
  # _@param_ `url`
4345
4372
  #
@@ -4353,7 +4380,7 @@ module Checkoff
4353
4380
  sig do
4354
4381
  params(
4355
4382
  url: String,
4356
- resource: Asana::Resources::Resource,
4383
+ resource: Asana::Resources::Task,
4357
4384
  attachment_name: T.nilable(String),
4358
4385
  verify_mode: Integer,
4359
4386
  just_the_url: T::Boolean
@@ -4361,7 +4388,6 @@ module Checkoff
4361
4388
  end
4362
4389
  def create_attachment_from_url!(url, resource, attachment_name: nil, verify_mode: OpenSSL::SSL::VERIFY_PEER, just_the_url: false); end
4363
4390
 
4364
- # sord warn - URI wasn't able to be resolved to a constant in this project
4365
4391
  # Writes contents of URL to a temporary file with the same
4366
4392
  # extension as the URL using Net::HTTP, raising an exception if
4367
4393
  # not succesful
@@ -4369,7 +4395,7 @@ module Checkoff
4369
4395
  # _@param_ `uri`
4370
4396
  #
4371
4397
  # _@param_ `verify_mode` — - e.g., OpenSSL::SSL::VERIFY_NONE,OpenSSL::SSL::VERIFY_PEER
4372
- sig { params(uri: URI, verify_mode: Integer, block: T.untyped).returns(Object) }
4398
+ sig { params(uri: URI::Generic, verify_mode: Integer, block: T.untyped).returns(Object) }
4373
4399
  def download_uri(uri, verify_mode: OpenSSL::SSL::VERIFY_PEER, &block); end
4374
4400
 
4375
4401
  # sord duck - #read_body looks like a duck type, replacing with untyped
@@ -4377,6 +4403,7 @@ module Checkoff
4377
4403
  sig { params(response: T.untyped).void }
4378
4404
  def write_tempfile_from_response(response); end
4379
4405
 
4406
+ # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4380
4407
  # sord warn - Asana::Resources::Attachment wasn't able to be resolved to a constant in this project
4381
4408
  # _@param_ `url`
4382
4409
  #
@@ -4388,20 +4415,21 @@ module Checkoff
4388
4415
  sig do
4389
4416
  params(
4390
4417
  url: String,
4391
- resource: Asana::Resources::Resource,
4418
+ resource: Asana::Resources::Task,
4392
4419
  attachment_name: T.nilable(String),
4393
4420
  verify_mode: Integer
4394
4421
  ).returns(Asana::Resources::Attachment)
4395
4422
  end
4396
4423
  def create_attachment_from_downloaded_url!(url, resource, attachment_name:, verify_mode: OpenSSL::SSL::VERIFY_PEER); end
4397
4424
 
4425
+ # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4398
4426
  # sord warn - Asana::Resources::Attachment wasn't able to be resolved to a constant in this project
4399
4427
  # _@param_ `url`
4400
4428
  #
4401
4429
  # _@param_ `resource`
4402
4430
  #
4403
4431
  # _@param_ `attachment_name`
4404
- sig { params(url: String, resource: Asana::Resources::Resource, attachment_name: T.nilable(String)).returns(Asana::Resources::Attachment) }
4432
+ sig { params(url: String, resource: Asana::Resources::Task, attachment_name: T.nilable(String)).returns(Asana::Resources::Attachment) }
4405
4433
  def create_attachment_from_url_alone!(url, resource, attachment_name:); end
4406
4434
 
4407
4435
  # _@param_ `filename`
@@ -4441,7 +4469,7 @@ module Checkoff
4441
4469
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4442
4470
  def finer(message = nil, &block); end
4443
4471
 
4444
- # @sg-ignore
4472
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4445
4473
  sig { returns(Symbol) }
4446
4474
  def log_level; end
4447
4475
 
@@ -4483,7 +4511,7 @@ module Checkoff
4483
4511
  client:)); end
4484
4512
 
4485
4513
  # sord warn - Asana::Resources::CustomField wasn't able to be resolved to a constant in this project
4486
- # @sg-ignore
4514
+ # @sg-ignore nil check above is not flow-sensitive
4487
4515
  #
4488
4516
  # _@param_ `workspace_name`
4489
4517
  #
@@ -4508,7 +4536,9 @@ module Checkoff
4508
4536
 
4509
4537
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4510
4538
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4511
- # @sg-ignore
4539
+ # @sg-ignore Declared return type Array<String> does not match inferred type Array,Array<Array> —
4540
+ # fixing cleanly needs binding enum_value.fetch('name') to a typed local; leaving for a
4541
+ # follow-up code PR to keep this one annotation-only.
4512
4542
  #
4513
4543
  # _@param_ `resource`
4514
4544
  #
@@ -4526,7 +4556,7 @@ module Checkoff
4526
4556
 
4527
4557
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4528
4558
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4529
- # @sg-ignore
4559
+ # @sg-ignore nil check above is not flow-sensitive
4530
4560
  #
4531
4561
  # _@param_ `resource`
4532
4562
  #
@@ -4536,7 +4566,7 @@ module Checkoff
4536
4566
 
4537
4567
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4538
4568
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4539
- # @sg-ignore
4569
+ # @sg-ignore nil check above is not flow-sensitive
4540
4570
  #
4541
4571
  # _@param_ `resource`
4542
4572
  #
@@ -4544,7 +4574,9 @@ module Checkoff
4544
4574
  sig { params(resource: T.any(Asana::Resources::Project, Asana::Resources::Task), custom_field_gid: String).returns(T::Hash[T.untyped, T.untyped]) }
4545
4575
  def resource_custom_field_by_gid_or_raise(resource, custom_field_gid); end
4546
4576
 
4547
- # @sg-ignore
4577
+ # @sg-ignore Declared return type Array<Hash> does not match inferred type Array,Hash,Array<Hash> —
4578
+ # fixing cleanly needs restructuring the case/when to bind each branch to a typed local; leaving
4579
+ # for a follow-up code PR to keep this one annotation-only.
4548
4580
  #
4549
4581
  # _@param_ `custom_field`
4550
4582
  sig { params(custom_field: T::Hash[String, T.any(T::Hash[T.untyped, T.untyped], T::Array[T::Hash[T.untyped, T.untyped]])]).returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
@@ -4689,10 +4721,11 @@ module Checkoff
4689
4721
  sig { params(api_params: T::Hash[String, Object], workspace_gid: String, extra_fields: T::Array[String]).returns(T::Enumerable[Asana::Resources::Task]) }
4690
4722
  def iterated_raw_task_search(api_params, workspace_gid:, extra_fields:); end
4691
4723
 
4692
- # @sg-ignore
4724
+ # @sg-ignore return type could not be inferred — bracket access on a Hash{Symbol=>undefined}
4725
+ # local doesn't narrow even with a T.cast on the return expression
4693
4726
  #
4694
4727
  # _@param_ `extra_fields`
4695
- sig { params(extra_fields: T::Array[String]).returns(T::Hash[Symbol, T.untyped]) }
4728
+ sig { params(extra_fields: T::Array[String]).returns(T::Hash[Symbol, T::Array[String]]) }
4696
4729
  def calculate_api_options(extra_fields); end
4697
4730
 
4698
4731
  sig { void }
@@ -4721,7 +4754,7 @@ module Checkoff
4721
4754
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4722
4755
  def finer(message = nil, &block); end
4723
4756
 
4724
- # @sg-ignore
4757
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4725
4758
  sig { returns(Symbol) }
4726
4759
  def log_level; end
4727
4760
 
@@ -4779,15 +4812,15 @@ module Checkoff
4779
4812
  sig { params(task: Asana::Resources::Task, task_selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])])).returns(T::Boolean) }
4780
4813
  def filter_via_task_selector(task, task_selector); end
4781
4814
 
4782
- # @sg-ignore
4815
+ # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4783
4816
  sig { returns(String) }
4784
4817
  def self.project_name; end
4785
4818
 
4786
- # @sg-ignore
4819
+ # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4787
4820
  sig { returns(String) }
4788
4821
  def self.workspace_name; end
4789
4822
 
4790
- # @sg-ignore
4823
+ # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4791
4824
  sig { returns([Symbol, T::Array[T.untyped]]) }
4792
4825
  def self.task_selector; end
4793
4826
 
@@ -4994,14 +5027,16 @@ module Checkoff
4994
5027
  def initialize(time_class: Time, date_class: Date, client: Checkoff::Clients.new.client, custom_fields: Checkoff::CustomFields.new(client:)); end
4995
5028
 
4996
5029
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4997
- # @sg-ignore
5030
+ # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5031
+ # union receiver
4998
5032
  #
4999
5033
  # _@param_ `task`
5000
5034
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5001
5035
  def start_time(task); end
5002
5036
 
5003
5037
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5004
- # @sg-ignore
5038
+ # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5039
+ # union receiver
5005
5040
  #
5006
5041
  # _@param_ `task`
5007
5042
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
@@ -5041,7 +5076,8 @@ module Checkoff
5041
5076
  class ThreadLocal
5042
5077
  # sord warn - T wasn't able to be resolved to a constant in this project
5043
5078
  # sord warn - T wasn't able to be resolved to a constant in this project
5044
- # @sg-ignore
5079
+ # @sg-ignore return type could not be inferred — Solargraph's generic/yield-return
5080
+ # inference gap for #with_thread_local_variable
5045
5081
  #
5046
5082
  # _@param_ `name`
5047
5083
  #
@@ -5061,7 +5097,7 @@ module Checkoff
5061
5097
  sig { params(config: T::Hash[Symbol, T.untyped], sym: Symbol, yaml_filename: String).void }
5062
5098
  def initialize(config, sym, yaml_filename); end
5063
5099
 
5064
- # @sg-ignore
5100
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5065
5101
  #
5066
5102
  # _@param_ `key`
5067
5103
  sig { params(key: Symbol).returns(Object) }
@@ -5180,7 +5216,7 @@ module Checkoff
5180
5216
  def convert_custom_field_params(custom_field_params); end
5181
5217
 
5182
5218
  # _@param_ `url_params`
5183
- sig { params(url_params: T::Hash[String, String]).returns([T::Hash[String, T::Array[String]], T::Hash[String, T::Array[String]], T::Hash[String, T::Array[String]]]) }
5219
+ sig { params(url_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, T::Array[String]], T::Hash[String, T::Array[String]], T::Hash[String, T::Array[String]]]) }
5184
5220
  def partition_url_params(url_params); end
5185
5221
  end
5186
5222
 
@@ -5190,10 +5226,8 @@ module Checkoff
5190
5226
  sig { params(args: T::Array[T::Hash[String, String]]).returns(T::Hash[String, String]) }
5191
5227
  def self.merge_args(*args); end
5192
5228
 
5193
- # @sg-ignore
5194
- #
5195
5229
  # _@param_ `task_selectors`
5196
- sig { params(task_selectors: T::Array[T.any(Symbol, T::Array[T.untyped])]).returns([Symbol, T::Array[T.untyped], T::Array[T.untyped]]) }
5230
+ sig { params(task_selectors: T::Array[T.any(Symbol, T::Array[T.untyped])]).returns(T.any(Symbol, T::Array[T.untyped], [Symbol, T::Array[T.untyped], T::Array[T.untyped]])) }
5197
5231
  def self.merge_task_selectors(*task_selectors); end
5198
5232
  end
5199
5233
 
@@ -5305,7 +5339,7 @@ module Checkoff
5305
5339
  sig { params(date_url_params: T::Hash[String, T::Array[String]]).void }
5306
5340
  def initialize(date_url_params:); end
5307
5341
 
5308
- # @sg-ignore
5342
+ # @sg-ignore out can genuinely be nil if none of the 3 known prefixes matched; relies on the raise above it
5309
5343
  sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5310
5344
  def convert; end
5311
5345
 
@@ -5337,7 +5371,7 @@ module Checkoff
5337
5371
  sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5338
5372
  def handle_within_next(prefix); end
5339
5373
 
5340
- # @sg-ignore
5374
+ # @sg-ignore value.length == 1 guard above isn't inferred as narrowing value[0] to non-nil
5341
5375
  #
5342
5376
  # _@param_ `param_key`
5343
5377
  sig { params(param_key: String).returns(String) }
@@ -5386,6 +5420,10 @@ module Checkoff
5386
5420
  sig { params(verb: String).returns(T::Array[String]) }
5387
5421
  def convert_from_projects_and_sections(verb); end
5388
5422
 
5423
+ # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5424
+ sig { returns(T::Array[String]) }
5425
+ def convert; end
5426
+
5389
5427
  sig { returns(String) }
5390
5428
  attr_reader :key
5391
5429
 
@@ -5500,14 +5538,13 @@ module Checkoff
5500
5538
  def convert; end
5501
5539
 
5502
5540
  # https://developers.asana.com/docs/search-tasks-in-a-workspace
5503
- # @sg-ignore
5504
5541
  #
5505
5542
  # _@param_ `key` — the name of the search url param
5506
5543
  #
5507
5544
  # _@param_ `values` — the values of the search url param
5508
5545
  #
5509
- # _@return_ — the converted params
5510
- sig { params(key: String, values: T::Array[String]).returns(T::Hash[String, String]) }
5546
+ # _@return_ — the converted params, as an alternating key/value flat array
5547
+ sig { params(key: String, values: T::Array[String]).returns(T::Array[String]) }
5511
5548
  def convert_arg(key, values); end
5512
5549
 
5513
5550
  sig { returns(T::Hash[String, T::Array[String]]) }
@@ -5540,7 +5577,7 @@ module Checkoff
5540
5577
  sig { returns(T::Hash[String, T::Hash[T.untyped, T.untyped]]) }
5541
5578
  def by_custom_field; end
5542
5579
 
5543
- # @sg-ignore
5580
+ # @sg-ignore `unless variant_class.nil?` return value isn't inferred as the declared tuple type
5544
5581
  #
5545
5582
  # _@param_ `gid`
5546
5583
  #
@@ -5548,7 +5585,7 @@ module Checkoff
5548
5585
  sig { params(gid: String, single_custom_field_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5549
5586
  def convert_single_custom_field_params(gid, single_custom_field_params); end
5550
5587
 
5551
- # @sg-ignore
5588
+ # @sg-ignore split(...)[n]'s nilable Array indexing isn't inferred as the declared String return
5552
5589
  #
5553
5590
  # _@param_ `key`
5554
5591
  sig { params(key: String).returns(String) }
@@ -5641,7 +5678,7 @@ module Checkoff
5641
5678
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5642
5679
  def finer(message = nil, &block); end
5643
5680
 
5644
- # @sg-ignore
5681
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5645
5682
  sig { returns(Symbol) }
5646
5683
  def log_level; end
5647
5684
  end
@@ -5709,10 +5746,8 @@ module Checkoff
5709
5746
  sig { params(gid: String, resource_type: T.nilable(String)).returns([T.untyped, T.untyped, T.untyped, T.untyped]) }
5710
5747
  def enrich_gid(gid, resource_type: nil); end
5711
5748
 
5712
- # @sg-ignore
5713
- #
5714
5749
  # _@param_ `filter`
5715
- sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).returns(T.nilable(String)) }
5750
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).void }
5716
5751
  def enrich_filter_parent_gid!(filter); end
5717
5752
 
5718
5753
  # _@param_ `filter`
@@ -5723,14 +5758,12 @@ module Checkoff
5723
5758
  sig { params(filter: T::Hash[String, T.any(String, T::Array[String])]).void }
5724
5759
  def enrich_filter_section!(filter); end
5725
5760
 
5726
- # sord warn - "'resource'" does not appear to be a type
5727
5761
  # _@param_ `asana_event`
5728
- sig { params(asana_event: T::Hash[T.untyped, T::Hash[T.untyped, T.untyped]]).void }
5762
+ sig { params(asana_event: T::Hash[T.untyped, T.untyped]).void }
5729
5763
  def enrich_event_parent!(asana_event); end
5730
5764
 
5731
- # sord warn - "'resource'" does not appear to be a type
5732
5765
  # _@param_ `asana_event`
5733
- sig { params(asana_event: T::Hash[T.untyped, T::Hash[T.untyped, T.untyped]]).void }
5766
+ sig { params(asana_event: T::Hash[T.untyped, T.untyped]).void }
5734
5767
  def enrich_event_resource!(asana_event); end
5735
5768
 
5736
5769
  sig { returns(::Logger) }
@@ -5756,7 +5789,7 @@ module Checkoff
5756
5789
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5757
5790
  def finer(message = nil, &block); end
5758
5791
 
5759
- # @sg-ignore
5792
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5760
5793
  sig { returns(Symbol) }
5761
5794
  def log_level; end
5762
5795
 
@@ -5790,20 +5823,20 @@ module Checkoff
5790
5823
  sig { returns(T::Hash[T.untyped, T.untyped]) }
5791
5824
  def initializer_kwargs; end
5792
5825
 
5793
- # @sg-ignore
5826
+ # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5794
5827
  sig { returns(T::Array[T.class_of(Checkoff::SelectorClasses::FunctionEvaluator)]) }
5795
5828
  def function_evaluators; end
5796
5829
 
5797
5830
  # _@param_ `selector`
5798
5831
  #
5799
5832
  # _@param_ `evaluator`
5800
- sig { params(selector: T::Array[T.untyped], evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T::Array[T.untyped]) }
5833
+ sig { params(selector: T.any(Symbol, T::Array[T.untyped]), evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T::Array[T.untyped]) }
5801
5834
  def evaluate_args(selector, evaluator); end
5802
5835
 
5803
5836
  # _@param_ `selector`
5804
5837
  #
5805
5838
  # _@param_ `evaluator`
5806
- sig { params(selector: T::Array[T.untyped], evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T.nilable(T.any(T::Boolean, Object))) }
5839
+ sig { params(selector: T.any(Symbol, T::Array[T.untyped]), evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T.nilable(T.any(T::Boolean, Object))) }
5807
5840
  def try_this_evaluator(selector, evaluator); end
5808
5841
 
5809
5842
  sig { returns(Asana::Resources::Resource) }
@@ -5837,8 +5870,6 @@ module Checkoff
5837
5870
  def evaluate_arg?(_index); end
5838
5871
 
5839
5872
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5840
- # @sg-ignore
5841
- #
5842
5873
  # _@param_ `task`
5843
5874
  #
5844
5875
  # _@param_ `section_name_prefix`
@@ -5856,8 +5887,6 @@ module Checkoff
5856
5887
  def evaluate_arg?(_index); end
5857
5888
 
5858
5889
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5859
- # @sg-ignore
5860
- #
5861
5890
  # _@param_ `task`
5862
5891
  #
5863
5892
  # _@param_ `section_name`
@@ -5875,7 +5904,8 @@ module Checkoff
5875
5904
  def evaluate_arg?(_index); end
5876
5905
 
5877
5906
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5878
- # @sg-ignore
5907
+ # @sg-ignore Hash#fetch generic<X> leak on rbs >= 4.1.0, fix in progress upstream
5908
+ # https://github.com/castwide/solargraph/pull/1228
5879
5909
  #
5880
5910
  # _@param_ `task`
5881
5911
  #
@@ -5911,8 +5941,6 @@ module Checkoff
5911
5941
  def evaluate_arg?(_index); end
5912
5942
 
5913
5943
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5914
- # @sg-ignore
5915
- #
5916
5944
  # _@param_ `task`
5917
5945
  #
5918
5946
  # _@param_ `tag_name`
@@ -6089,7 +6117,8 @@ module Checkoff
6089
6117
  def evaluate_arg?(_index); end
6090
6118
 
6091
6119
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6092
- # @sg-ignore
6120
+ # @sg-ignore Checkoff::SelectorClasses::Task::MilestonePFunctionEvaluator#evaluate
6121
+ # return type could not be inferred
6093
6122
  #
6094
6123
  # _@param_ `task`
6095
6124
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
@@ -6264,10 +6293,6 @@ module Checkoff
6264
6293
 
6265
6294
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6266
6295
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6267
- # @sg-ignore
6268
- # @sg-ignore
6269
- # @sg-ignore
6270
- #
6271
6296
  # _@param_ `resource`
6272
6297
  #
6273
6298
  # _@param_ `custom_field_gid`
@@ -6287,9 +6312,6 @@ module Checkoff
6287
6312
 
6288
6313
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6289
6314
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6290
- # @sg-ignore
6291
- # @sg-ignore
6292
- #
6293
6315
  # _@param_ `resource`
6294
6316
  #
6295
6317
  # _@param_ `custom_field_gid`
@@ -6311,9 +6333,6 @@ module Checkoff
6311
6333
 
6312
6334
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6313
6335
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6314
- # @sg-ignore
6315
- # @sg-ignore
6316
- #
6317
6336
  # _@param_ `resource`
6318
6337
  #
6319
6338
  # _@param_ `custom_field_name`
@@ -6358,7 +6377,8 @@ module Checkoff
6358
6377
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6359
6378
  # sord warn - boolish is probably not a type, but using anyway
6360
6379
  # sord warn - boolish wasn't able to be resolved to a constant in this project
6361
- # @sg-ignore
6380
+ # @sg-ignore Checkoff::SelectorClasses::Common::NameStartsWithPFunctionEvaluator#evaluate
6381
+ # return type could not be inferred
6362
6382
  #
6363
6383
  # _@param_ `resource`
6364
6384
  #
@@ -6374,7 +6394,7 @@ module Checkoff
6374
6394
 
6375
6395
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6376
6396
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6377
- # @sg-ignore
6397
+ # @sg-ignore selector is only String here per matches?'s is_a?(String) check, in another method
6378
6398
  #
6379
6399
  # _@param_ `_resource`
6380
6400
  sig { params(_resource: T.any(Asana::Resources::Task, Asana::Resources::Project)).returns(String) }
@@ -6393,6 +6413,9 @@ module Checkoff
6393
6413
 
6394
6414
  sig { returns(T.any([Symbol, T::Array[T.untyped]], String)) }
6395
6415
  attr_reader :selector
6416
+
6417
+ sig { returns(Checkoff::CustomFields) }
6418
+ attr_reader :custom_fields
6396
6419
  end
6397
6420
  end
6398
6421
 
@@ -6406,7 +6429,7 @@ module Checkoff
6406
6429
  def matches?; end
6407
6430
 
6408
6431
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6409
- # @sg-ignore
6432
+ # @sg-ignore nilable return from an @!parse-declared method isn't inferred
6410
6433
  #
6411
6434
  # _@param_ `resource`
6412
6435
  sig { params(resource: Asana::Resources::Project).returns(T.nilable(String)) }
@@ -6421,8 +6444,6 @@ module Checkoff
6421
6444
  def matches?; end
6422
6445
 
6423
6446
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6424
- # @sg-ignore
6425
- #
6426
6447
  # _@param_ `project`
6427
6448
  #
6428
6449
  # _@param_ `period` — - :now_or_before or :this_week
@@ -6438,10 +6459,6 @@ module Checkoff
6438
6459
  def matches?; end
6439
6460
 
6440
6461
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6441
- # @sg-ignore
6442
- #
6443
- # @sg-ignore
6444
- #
6445
6462
  # _@param_ `project`
6446
6463
  #
6447
6464
  # _@param_ `portfolio_name`
@@ -6484,6 +6501,15 @@ module Checkoff
6484
6501
 
6485
6502
  sig { returns([Symbol, T::Array[T.untyped]]) }
6486
6503
  attr_reader :selector
6504
+
6505
+ sig { returns(Checkoff::Projects) }
6506
+ attr_reader :projects
6507
+
6508
+ sig { returns(Checkoff::Portfolios) }
6509
+ attr_reader :portfolios
6510
+
6511
+ sig { returns(Checkoff::Workspaces) }
6512
+ attr_reader :workspaces
6487
6513
  end
6488
6514
  end
6489
6515
 
@@ -6497,7 +6523,7 @@ module Checkoff
6497
6523
  def matches?; end
6498
6524
 
6499
6525
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6500
- # @sg-ignore
6526
+ # @sg-ignore String, nil safe-nav chain isn't inferred as returning Boolean
6501
6527
  #
6502
6528
  # _@param_ `section`
6503
6529
  sig { params(section: Asana::Resources::Section).returns(T::Boolean) }
@@ -6512,8 +6538,6 @@ module Checkoff
6512
6538
  def matches?; end
6513
6539
 
6514
6540
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6515
- # @sg-ignore
6516
- #
6517
6541
  # _@param_ `section`
6518
6542
  sig { params(section: Asana::Resources::Section).returns(T::Boolean) }
6519
6543
  def evaluate(section); end
@@ -6545,6 +6569,9 @@ module Checkoff
6545
6569
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
6546
6570
  sig { returns(Asana::Client) }
6547
6571
  attr_reader :client
6572
+
6573
+ sig { returns(Checkoff::Sections) }
6574
+ attr_reader :sections
6548
6575
  end
6549
6576
  end
6550
6577
 
@@ -6556,12 +6583,12 @@ module Checkoff
6556
6583
  sig { params(_index: Integer).returns(T::Boolean) }
6557
6584
  def evaluate_arg?(_index); end
6558
6585
 
6559
- # @sg-ignore
6586
+ # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6560
6587
  sig { returns(T::Boolean) }
6561
6588
  def matches?; end
6562
6589
 
6563
6590
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6564
- # @sg-ignore
6591
+ # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6565
6592
  #
6566
6593
  # _@param_ `_task`
6567
6594
  #
@@ -6575,6 +6602,20 @@ module Checkoff
6575
6602
  sig { params(object: Object, fn_name: Symbol).returns(T::Boolean) }
6576
6603
  def fn?(object, fn_name); end
6577
6604
 
6605
+ # Concrete subclasses each declare their own initialize with their
6606
+ # specific keyword args (and set @selector themselves before calling
6607
+ # super()); this signature exists only so Solargraph can resolve
6608
+ # `evaluator_class.new(selector:, **kwargs)` call sites that hold a
6609
+ # `Class<FunctionEvaluator>` reference rather than a concrete subclass -
6610
+ # deliberately a no-op so a bare `super()` call from those subclasses
6611
+ # can't clobber the @selector they already set.
6612
+ #
6613
+ # _@param_ `selector`
6614
+ #
6615
+ # _@param_ `_kwargs`
6616
+ sig { params(selector: T.nilable(T.any(Symbol, T::Array[T.untyped], String)), _kwargs: T::Hash[T.untyped, T.untyped]).void }
6617
+ def initialize(selector: nil, **_kwargs); end
6618
+
6578
6619
  sig { returns(::Logger) }
6579
6620
  def logger; end
6580
6621
 
@@ -6598,7 +6639,7 @@ module Checkoff
6598
6639
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6599
6640
  def finer(message = nil, &block); end
6600
6641
 
6601
- # @sg-ignore
6642
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6602
6643
  sig { returns(Symbol) }
6603
6644
  def log_level; end
6604
6645
  end
@@ -6791,7 +6832,7 @@ module Logging
6791
6832
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6792
6833
  def finer(message = nil, &block); end
6793
6834
 
6794
- # @sg-ignore
6835
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6795
6836
  sig { returns(Symbol) }
6796
6837
  def log_level; end
6797
6838
  end