checkoff 0.258.0 → 0.260.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/checkoff/attachments.rb +14 -15
  3. data/lib/checkoff/cli.rb +7 -12
  4. data/lib/checkoff/clients.rb +0 -2
  5. data/lib/checkoff/custom_fields.rb +13 -24
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +11 -21
  7. data/lib/checkoff/internal/asana_event_filter.rb +1 -5
  8. data/lib/checkoff/internal/config_loader.rb +0 -2
  9. data/lib/checkoff/internal/logging.rb +0 -2
  10. data/lib/checkoff/internal/project_hashes.rb +5 -4
  11. data/lib/checkoff/internal/search_url/custom_field_param_converter.rb +9 -10
  12. data/lib/checkoff/internal/search_url/custom_field_variant.rb +7 -2
  13. data/lib/checkoff/internal/search_url/date_param_converter.rb +13 -10
  14. data/lib/checkoff/internal/search_url/parser.rb +2 -7
  15. data/lib/checkoff/internal/search_url/simple_param_converter.rb +1 -4
  16. data/lib/checkoff/internal/section_selector_evaluator.rb +1 -1
  17. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +2 -2
  18. data/lib/checkoff/internal/selector_classes/common.rb +2 -3
  19. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +9 -4
  20. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +2 -2
  21. data/lib/checkoff/internal/selector_classes/project.rb +0 -1
  22. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +2 -2
  23. data/lib/checkoff/internal/selector_classes/section.rb +1 -2
  24. data/lib/checkoff/internal/selector_classes/task/function_evaluator.rb +2 -2
  25. data/lib/checkoff/internal/selector_classes/task.rb +2 -26
  26. data/lib/checkoff/internal/selector_evaluator.rb +6 -5
  27. data/lib/checkoff/internal/task_hashes.rb +17 -9
  28. data/lib/checkoff/internal/task_timing.rb +0 -4
  29. data/lib/checkoff/internal/thread_local.rb +0 -2
  30. data/lib/checkoff/monkeypatches/resource_marshalling.rb +3 -3
  31. data/lib/checkoff/my_tasks.rb +1 -4
  32. data/lib/checkoff/portfolios.rb +0 -1
  33. data/lib/checkoff/project_selectors.rb +1 -1
  34. data/lib/checkoff/projects.rb +19 -8
  35. data/lib/checkoff/resources.rb +14 -3
  36. data/lib/checkoff/sections.rb +9 -9
  37. data/lib/checkoff/subtasks.rb +1 -2
  38. data/lib/checkoff/tags.rb +3 -4
  39. data/lib/checkoff/task_searches.rb +1 -8
  40. data/lib/checkoff/task_selectors.rb +25 -12
  41. data/lib/checkoff/tasks.rb +6 -14
  42. data/lib/checkoff/timelines.rb +3 -20
  43. data/lib/checkoff/timing.rb +1 -2
  44. data/lib/checkoff/version.rb +1 -1
  45. data/lib/checkoff/workspaces.rb +1 -7
  46. data/rbi/checkoff.rbi +92 -146
  47. data/sig/checkoff.rbs +79 -153
  48. 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.258.0'
85
+ VERSION = '0.260.0'
86
86
 
87
87
  class Attachments
88
88
  include Logging
@@ -811,6 +811,9 @@ module Checkoff
811
811
  sig { params(gid: T.untyped, resource_type: T.untyped).returns(T.untyped) }
812
812
  def resource_by_gid(gid, resource_type: nil); end
813
813
 
814
+ sig { params(resource_type: T.untyped, gid: T.untyped).returns(T.untyped) }
815
+ def fetch_gid_by_type(resource_type, gid); end
816
+
814
817
  sig { params(gid: T.untyped).returns(T.untyped) }
815
818
  def fetch_task_gid(gid); end
816
819
 
@@ -1195,13 +1198,16 @@ module Checkoff
1195
1198
  attr_reader :custom_fields
1196
1199
 
1197
1200
  sig { returns(T.untyped) }
1198
- def self.project_name; end
1201
+ def self.task_selector; end
1202
+
1203
+ sig { params(parsed: T.untyped).returns(T.untyped) }
1204
+ def self.validate_task_selector(parsed); end
1199
1205
 
1200
1206
  sig { returns(T.untyped) }
1201
- def self.workspace_name; end
1207
+ def self.project_name; end
1202
1208
 
1203
1209
  sig { returns(T.untyped) }
1204
- def self.task_selector; end
1210
+ def self.workspace_name; end
1205
1211
 
1206
1212
  sig { returns(T.untyped) }
1207
1213
  def self.run; end
@@ -1630,6 +1636,9 @@ module Checkoff
1630
1636
  sig { params(task_hash: T.untyped, memberships: T.untyped).returns(T.untyped) }
1631
1637
  def add_user_task_list(task_hash, memberships); end
1632
1638
 
1639
+ sig { params(task_hash: T.untyped).returns(T.untyped) }
1640
+ def assignee_hash(task_hash); end
1641
+
1633
1642
  sig do
1634
1643
  params(
1635
1644
  task_hash: T.untyped,
@@ -1721,6 +1730,9 @@ module Checkoff
1721
1730
  sig { params(gid: T.untyped, remaining_params: T.untyped).void }
1722
1731
  def initialize(gid, remaining_params); end
1723
1732
 
1733
+ sig { returns(T.untyped) }
1734
+ def convert; end
1735
+
1724
1736
  sig { returns(T.untyped) }
1725
1737
  attr_reader :gid
1726
1738
 
@@ -1798,6 +1810,9 @@ module Checkoff
1798
1810
  sig { returns(T.untyped) }
1799
1811
  def convert; end
1800
1812
 
1813
+ sig { params(out: T.untyped).returns(T.untyped) }
1814
+ def ensure_matched!(out); end
1815
+
1801
1816
  sig { params(prefix: T.untyped).returns(T.untyped) }
1802
1817
  def convert_for_prefix(prefix); end
1803
1818
 
@@ -2470,7 +2485,7 @@ end
2470
2485
  # typed: ignore
2471
2486
  # Command-line and gem client for Asana (unofficial)
2472
2487
  module Checkoff
2473
- VERSION = T.let('0.258.0', T.untyped)
2488
+ VERSION = T.let('0.260.0', T.untyped)
2474
2489
 
2475
2490
  # Move tasks from one place to another
2476
2491
  class MvSubcommand
@@ -2617,7 +2632,7 @@ module Checkoff
2617
2632
  workspace_name: String,
2618
2633
  project_name: T.any(String, Symbol),
2619
2634
  section_name: T.nilable(T.any(String, Symbol)),
2620
- task_name: T.nilable(T.any(String, Symbol)),
2635
+ task_name: T.nilable(String),
2621
2636
  config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
2622
2637
  projects: Checkoff::Projects,
2623
2638
  sections: Checkoff::Sections,
@@ -2813,8 +2828,6 @@ module Checkoff
2813
2828
  def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: []); end
2814
2829
 
2815
2830
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
2816
- # @sg-ignore nil check above is not flow-sensitive
2817
- #
2818
2831
  # _@param_ `workspace_name`
2819
2832
  #
2820
2833
  # _@param_ `tag_name`
@@ -2885,7 +2898,7 @@ module Checkoff
2885
2898
  # _@param_ `asana_task`
2886
2899
  sig do
2887
2900
  params(
2888
- config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
2901
+ config: T.any(T::Hash[Symbol, Object], Checkoff::Internal::EnvFallbackConfigLoader),
2889
2902
  client: Asana::Client,
2890
2903
  workspaces: Checkoff::Workspaces,
2891
2904
  sections: Checkoff::Sections,
@@ -2994,9 +3007,6 @@ module Checkoff
2994
3007
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2995
3008
  # Add a task
2996
3009
  #
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
2999
- #
3000
3010
  # _@param_ `name`
3001
3011
  #
3002
3012
  # _@param_ `workspace_gid`
@@ -3049,14 +3059,12 @@ module Checkoff
3049
3059
 
3050
3060
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3051
3061
  # _@param_ `task_data`
3052
- sig { params(task_data: T::Hash[T.untyped, T.untyped]).returns(Asana::Resources::Task) }
3062
+ sig { params(task_data: T::Hash[String, Object]).returns(Asana::Resources::Task) }
3053
3063
  def h_to_task(task_data); end
3054
3064
 
3055
3065
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3056
3066
  # True if the task is in a project which is in the given portfolio
3057
3067
  #
3058
- # @sg-ignore Checkoff::Tasks#in_portfolio_named? return type could not be inferred
3059
- #
3060
3068
  # _@param_ `task`
3061
3069
  #
3062
3070
  # _@param_ `portfolio_name`
@@ -3109,9 +3117,6 @@ module Checkoff
3109
3117
  sig { returns(Checkoff::Projects) }
3110
3118
  def projects; end
3111
3119
 
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
3115
3120
  sig { returns(String) }
3116
3121
  def default_assignee_gid; end
3117
3122
 
@@ -3138,7 +3143,6 @@ module Checkoff
3138
3143
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3139
3144
  def finer(message = nil, &block); end
3140
3145
 
3141
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3142
3146
  sig { returns(Symbol) }
3143
3147
  def log_level; end
3144
3148
 
@@ -3246,7 +3250,6 @@ module Checkoff
3246
3250
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3247
3251
  def finer(message = nil, &block); end
3248
3252
 
3249
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3250
3253
  sig { returns(Symbol) }
3251
3254
  def log_level; end
3252
3255
 
@@ -3298,7 +3301,7 @@ module Checkoff
3298
3301
  # _@param_ `date_or_time`
3299
3302
  #
3300
3303
  # _@param_ `period` — Valid values: :this_week, :now_or_before, :indefinite, [:less_than_n_days_ago, Integer]
3301
- sig { params(date_or_time: T.nilable(T.any(Date, Time)), period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3304
+ sig { params(date_or_time: T.nilable(T.any(Date, Time)), period: T.any(Symbol, T::Array[T.any(Symbol, Integer)])).returns(T::Boolean) }
3302
3305
  def in_period?(date_or_time, period); end
3303
3306
 
3304
3307
  # _@param_ `date_or_time`
@@ -3347,8 +3350,6 @@ module Checkoff
3347
3350
  sig { params(num_days: Integer).returns(ActiveSupport::TimeWithZone) }
3348
3351
  def n_days_from_now(num_days); end
3349
3352
 
3350
- # @sg-ignore Checkoff::Timing#n_days_from_today return type could not be inferred
3351
- #
3352
3353
  # _@param_ `num_days`
3353
3354
  sig { params(num_days: Integer).returns(Date) }
3354
3355
  def n_days_from_today(num_days); end
@@ -3395,7 +3396,6 @@ module Checkoff
3395
3396
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3396
3397
  def finer(message = nil, &block); end
3397
3398
 
3398
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3399
3399
  sig { returns(Symbol) }
3400
3400
  def log_level; end
3401
3401
  end
@@ -3520,6 +3520,12 @@ module Checkoff
3520
3520
 
3521
3521
  # Default options used in Asana API to pull tasks
3522
3522
  #
3523
+ # Keys are :per_page (Integer), :options (a Hash whose :fields is an
3524
+ # Array<String>) and, when only_uncompleted is set, :completed_since
3525
+ # (String). The value type is genuinely per-key, which a single YARD
3526
+ # Hash value type cannot express.
3527
+ # Callers who want the field list should call #task_fields directly.
3528
+ #
3523
3529
  # _@param_ `extra_fields`
3524
3530
  #
3525
3531
  # _@param_ `only_uncompleted`
@@ -3548,8 +3554,6 @@ module Checkoff
3548
3554
  def project(workspace_name, project_name, extra_fields: []); end
3549
3555
 
3550
3556
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3551
- # @sg-ignore nil check above is not flow-sensitive
3552
- #
3553
3557
  # _@param_ `workspace_name`
3554
3558
  #
3555
3559
  # _@param_ `project_name` — - :my_tasks or a project name
@@ -3606,8 +3610,8 @@ module Checkoff
3606
3610
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3607
3611
  # _@param_ `project_obj`
3608
3612
  #
3609
- # _@param_ `project` — - :not_specified, :my_tasks or a project name
3610
- sig { params(project_obj: Asana::Resources::Project, project: T.any(String, Symbol)).returns(T::Hash[T.untyped, T.untyped]) }
3613
+ # _@param_ `project` — - a String is a project name
3614
+ sig { params(project_obj: Asana::Resources::Project, project: T.nilable(T.any(String, Symbol))).returns(T::Hash[String, Object]) }
3611
3615
  def project_to_h(project_obj, project: :not_specified); end
3612
3616
 
3613
3617
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
@@ -3621,7 +3625,7 @@ module Checkoff
3621
3625
  # _@param_ `project`
3622
3626
  #
3623
3627
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3624
- sig { params(project: Asana::Resources::Project, period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3628
+ sig { params(project: Asana::Resources::Project, period: T.any(Symbol, T::Array[T.any(Symbol, Integer)])).returns(T::Boolean) }
3625
3629
  def project_ready?(project, period: :now_or_before); end
3626
3630
 
3627
3631
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
@@ -3630,7 +3634,7 @@ module Checkoff
3630
3634
  # _@param_ `field_name`
3631
3635
  #
3632
3636
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3633
- sig { params(project: Asana::Resources::Project, field_name: T.any(Symbol, T::Array[T.untyped]), period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3637
+ sig { params(project: Asana::Resources::Project, field_name: T.any(Symbol, T::Array[T.untyped]), period: T.any(Symbol, T::Array[T.any(Symbol, Integer)])).returns(T::Boolean) }
3634
3638
  def in_period?(project, field_name, period); end
3635
3639
 
3636
3640
  sig { returns(T::Hash[T.untyped, T.untyped]) }
@@ -3668,7 +3672,6 @@ module Checkoff
3668
3672
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3669
3673
  def finer(message = nil, &block); end
3670
3674
 
3671
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3672
3675
  sig { returns(Symbol) }
3673
3676
  def log_level; end
3674
3677
 
@@ -3794,7 +3797,6 @@ module Checkoff
3794
3797
  def tasks(workspace_name, project_name, section_name, only_uncompleted: true, extra_fields: []); end
3795
3798
 
3796
3799
  # Pulls just names of tasks from a given section.
3797
- # @sg-ignore Task#name is nilable; task names are assumed present here
3798
3800
  #
3799
3801
  # _@param_ `workspace_name`
3800
3802
  #
@@ -3805,8 +3807,6 @@ module Checkoff
3805
3807
  def section_task_names(workspace_name, project_name, section_name); end
3806
3808
 
3807
3809
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3808
- # @sg-ignore section() is nil-checked below
3809
- #
3810
3810
  # _@param_ `workspace_name`
3811
3811
  #
3812
3812
  # _@param_ `project_name`
@@ -3901,8 +3901,6 @@ module Checkoff
3901
3901
  def file_task_by_section(by_section, task, project_gid); end
3902
3902
 
3903
3903
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3904
- # @sg-ignore projects.project may be nil but is raised below
3905
- #
3906
3904
  # _@param_ `workspace_name`
3907
3905
  #
3908
3906
  # _@param_ `project_name`
@@ -3932,7 +3930,6 @@ module Checkoff
3932
3930
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3933
3931
  def finer(message = nil, &block); end
3934
3932
 
3935
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3936
3933
  sig { returns(Symbol) }
3937
3934
  def log_level; end
3938
3935
 
@@ -4010,8 +4007,6 @@ module Checkoff
4010
4007
  # expected to move to the new-style way of representing sections
4011
4008
  # as memberships with a separate API within a task.
4012
4009
  #
4013
- # @sg-ignore Checkoff::Subtasks#subtask_section? return type could not be inferred
4014
- #
4015
4010
  # _@param_ `subtask`
4016
4011
  sig { params(subtask: Asana::Resources::Task).returns(T.nilable(T::Boolean)) }
4017
4012
  def subtask_section?(subtask); end
@@ -4101,6 +4096,12 @@ module Checkoff
4101
4096
  sig { void }
4102
4097
  def self.run; end
4103
4098
 
4099
+ # _@param_ `resource_type`
4100
+ #
4101
+ # _@param_ `gid`
4102
+ sig { params(resource_type: String, gid: String).returns(T.nilable(Asana::Resources::Resource)) }
4103
+ def fetch_gid_by_type(resource_type, gid); end
4104
+
4104
4105
  sig { returns(Checkoff::Workspaces) }
4105
4106
  attr_reader :workspaces
4106
4107
 
@@ -4185,7 +4186,7 @@ module Checkoff
4185
4186
  # _@param_ `task_data`
4186
4187
  #
4187
4188
  # _@param_ `section`
4188
- sig { params(task_data: T::Hash[T.untyped, T.untyped], section: Asana::Resources::Section).returns(T::Boolean) }
4189
+ sig { params(task_data: T::Hash[String, Object], section: Asana::Resources::Section).returns(T::Boolean) }
4189
4190
  def task_data_dependent_on_previous_section_last_milestone?(task_data, section); end
4190
4191
 
4191
4192
  sig { void }
@@ -4232,8 +4233,6 @@ module Checkoff
4232
4233
  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
4233
4234
 
4234
4235
  # sord warn - Asana::Resources::Portfolio wasn't able to be resolved to a constant in this project
4235
- # @sg-ignore nil check above is not flow-sensitive
4236
- #
4237
4236
  # _@param_ `workspace_name`
4238
4237
  #
4239
4238
  # _@param_ `portfolio_name`
@@ -4304,7 +4303,7 @@ module Checkoff
4304
4303
  # _@param_ `client`
4305
4304
  #
4306
4305
  # _@param_ `asana_workspace`
4307
- sig { params(config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader), client: Asana::Client, asana_workspace: T.class_of(Asana::Resources::Workspace)).void }
4306
+ sig { params(config: T.any(T::Hash[Symbol, Object], Checkoff::Internal::EnvFallbackConfigLoader), client: Asana::Client, asana_workspace: T.class_of(Asana::Resources::Workspace)).void }
4308
4307
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), client: Checkoff::Clients.new(config:).client, asana_workspace: Asana::Resources::Workspace); end
4309
4308
 
4310
4309
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
@@ -4315,21 +4314,14 @@ module Checkoff
4315
4314
  def workspace(workspace_name); end
4316
4315
 
4317
4316
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
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
4320
4317
  sig { returns(Asana::Resources::Workspace) }
4321
4318
  def default_workspace; end
4322
4319
 
4323
4320
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
4324
- # @sg-ignore workspace() is nil-checked below
4325
- #
4326
4321
  # _@param_ `workspace_name`
4327
4322
  sig { params(workspace_name: T.any(String, Symbol)).returns(Asana::Resources::Workspace) }
4328
4323
  def workspace_or_raise(workspace_name); end
4329
4324
 
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
4333
4325
  sig { returns(String) }
4334
4326
  def default_workspace_gid; end
4335
4327
 
@@ -4469,7 +4461,6 @@ module Checkoff
4469
4461
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4470
4462
  def finer(message = nil, &block); end
4471
4463
 
4472
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4473
4464
  sig { returns(Symbol) }
4474
4465
  def log_level; end
4475
4466
 
@@ -4511,8 +4502,6 @@ module Checkoff
4511
4502
  client:)); end
4512
4503
 
4513
4504
  # sord warn - Asana::Resources::CustomField wasn't able to be resolved to a constant in this project
4514
- # @sg-ignore nil check above is not flow-sensitive
4515
- #
4516
4505
  # _@param_ `workspace_name`
4517
4506
  #
4518
4507
  # _@param_ `custom_field_name`
@@ -4536,10 +4525,6 @@ module Checkoff
4536
4525
 
4537
4526
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4538
4527
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
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.
4542
- #
4543
4528
  # _@param_ `resource`
4544
4529
  #
4545
4530
  # _@param_ `custom_field_name`
@@ -4551,41 +4536,41 @@ module Checkoff
4551
4536
  # _@param_ `resource`
4552
4537
  #
4553
4538
  # _@param_ `custom_field_name`
4554
- sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
4539
+ sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T.nilable(T::Hash[String, Object])) }
4555
4540
  def resource_custom_field_by_name(resource, custom_field_name); end
4556
4541
 
4557
4542
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4558
4543
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4559
- # @sg-ignore nil check above is not flow-sensitive
4560
- #
4561
4544
  # _@param_ `resource`
4562
4545
  #
4563
4546
  # _@param_ `custom_field_name`
4564
- sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T::Hash[T.untyped, T.untyped]) }
4547
+ sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T::Hash[String, Object]) }
4565
4548
  def resource_custom_field_by_name_or_raise(resource, custom_field_name); end
4566
4549
 
4567
4550
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4568
4551
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4569
- # @sg-ignore nil check above is not flow-sensitive
4570
- #
4571
4552
  # _@param_ `resource`
4572
4553
  #
4573
4554
  # _@param_ `custom_field_gid`
4574
- sig { params(resource: T.any(Asana::Resources::Project, Asana::Resources::Task), custom_field_gid: String).returns(T::Hash[T.untyped, T.untyped]) }
4555
+ sig { params(resource: T.any(Asana::Resources::Project, Asana::Resources::Task), custom_field_gid: String).returns(T::Hash[String, Object]) }
4575
4556
  def resource_custom_field_by_gid_or_raise(resource, custom_field_gid); end
4576
4557
 
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.
4558
+ # sord warn - "\"resource_subtype\"" does not appear to be a type
4559
+ # sord warn - "String} & Hash{\"enum_value\"" does not appear to be a type
4560
+ # sord warn - "Hash} & Hash{\"multi_enum_values\"" does not appear to be a type
4561
+ # sord warn - "\"gid\"" does not appear to be a type
4562
+ # sord warn - "String} & Hash{\"name\"" does not appear to be a type
4563
+ # rubocop:disable Layout/LineLength, YARD/TagTypeSyntax
4564
+ # rubocop:enable Layout/LineLength, YARD/TagTypeSyntax
4580
4565
  #
4581
4566
  # _@param_ `custom_field`
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]]) }
4567
+ sig { params(custom_field: T::Hash[T.untyped, T.any(T.untyped, T.any(T.untyped, T::Array[T::Hash[T.untyped, T.untyped]]))]).returns(T::Array[T::Hash[T.untyped, T.any(T.untyped, String)]]) }
4583
4568
  def resource_custom_field_enum_values(custom_field); end
4584
4569
 
4585
4570
  # _@param_ `custom_field`
4586
4571
  #
4587
4572
  # _@param_ `enum_value`
4588
- sig { params(custom_field: T::Hash[T.untyped, T.untyped], enum_value: T.nilable(T::Hash[String, String])).returns(T::Array[String]) }
4573
+ sig { params(custom_field: T::Hash[String, Object], enum_value: T.nilable(T::Hash[String, String])).returns(T::Array[String]) }
4589
4574
  def find_gids(custom_field, enum_value); end
4590
4575
 
4591
4576
  sig { void }
@@ -4721,9 +4706,6 @@ module Checkoff
4721
4706
  sig { params(api_params: T::Hash[String, Object], workspace_gid: String, extra_fields: T::Array[String]).returns(T::Enumerable[Asana::Resources::Task]) }
4722
4707
  def iterated_raw_task_search(api_params, workspace_gid:, extra_fields:); end
4723
4708
 
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
4726
- #
4727
4709
  # _@param_ `extra_fields`
4728
4710
  sig { params(extra_fields: T::Array[String]).returns(T::Hash[Symbol, T::Array[String]]) }
4729
4711
  def calculate_api_options(extra_fields); end
@@ -4754,7 +4736,6 @@ module Checkoff
4754
4736
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4755
4737
  def finer(message = nil, &block); end
4756
4738
 
4757
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4758
4739
  sig { returns(Symbol) }
4759
4740
  def log_level; end
4760
4741
 
@@ -4809,24 +4790,25 @@ module Checkoff
4809
4790
  # _@param_ `task`
4810
4791
  #
4811
4792
  # _@param_ `task_selector` — Filter based on task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
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) }
4793
+ sig { params(task: Asana::Resources::Task, task_selector: T.any(Symbol, T::Array[T.any(Symbol, String, Integer, T::Array[T.untyped])])).returns(T::Boolean) }
4813
4794
  def filter_via_task_selector(task, task_selector); end
4814
4795
 
4815
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4816
4796
  sig { returns(String) }
4817
4797
  def self.project_name; end
4818
4798
 
4819
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4820
4799
  sig { returns(String) }
4821
4800
  def self.workspace_name; end
4822
4801
 
4823
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4824
4802
  sig { returns([Symbol, T::Array[T.untyped]]) }
4825
4803
  def self.task_selector; end
4826
4804
 
4827
4805
  sig { void }
4828
4806
  def self.run; end
4829
4807
 
4808
+ # _@param_ `parsed` — result of JSON.parse on a task selector
4809
+ sig { params(parsed: Object).returns([String, T::Array[T.untyped]]) }
4810
+ def self.validate_task_selector(parsed); end
4811
+
4830
4812
  sig { returns(Checkoff::Tasks) }
4831
4813
  attr_reader :tasks
4832
4814
 
@@ -4877,7 +4859,7 @@ module Checkoff
4877
4859
  # _@param_ `project`
4878
4860
  #
4879
4861
  # _@param_ `project_selector` — Filter based on project details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
4880
- sig { params(project: Asana::Resources::Project, project_selector: [Symbol, T::Array[T.untyped]]).returns(T::Boolean) }
4862
+ sig { params(project: Asana::Resources::Project, project_selector: T::Array[T.any(Symbol, String, T::Array[T.untyped])]).returns(T::Boolean) }
4881
4863
  def filter_via_project_selector(project, project_selector); end
4882
4864
 
4883
4865
  sig { void }
@@ -4971,7 +4953,7 @@ module Checkoff
4971
4953
  # _@param_ `task_data`
4972
4954
  #
4973
4955
  # _@param_ `client`
4974
- sig { params(task_data: T::Hash[T.untyped, T.untyped], client: Asana::Client).returns(Asana::Resources::Task) }
4956
+ sig { params(task_data: T::Hash[String, Object], client: Asana::Client).returns(Asana::Resources::Task) }
4975
4957
  def h_to_task(task_data, client:); end
4976
4958
 
4977
4959
  # _@param_ `task_hash`
@@ -4993,7 +4975,7 @@ module Checkoff
4993
4975
  # _@param_ `key`
4994
4976
  sig do
4995
4977
  params(
4996
- task_hash: T::Hash[T.untyped, T.untyped],
4978
+ task_hash: T::Hash[String, Object],
4997
4979
  memberships: T::Array[T::Hash[T.untyped, T.untyped]],
4998
4980
  resource: String,
4999
4981
  key: String
@@ -5002,8 +4984,12 @@ module Checkoff
5002
4984
  def unwrap_memberships(task_hash, memberships, resource, key); end
5003
4985
 
5004
4986
  # _@param_ `task_hash`
5005
- sig { params(task_hash: T::Hash[T.untyped, T.untyped]).void }
4987
+ sig { params(task_hash: T::Hash[String, Object]).void }
5006
4988
  def unwrap_all_memberships(task_hash); end
4989
+
4990
+ # _@param_ `task_hash`
4991
+ sig { params(task_hash: T::Hash[String, T.any(String, T::Hash[T.untyped, T.untyped], T::Array[T.untyped])]).returns(T::Hash[String, Object]) }
4992
+ def assignee_hash(task_hash); end
5007
4993
  end
5008
4994
 
5009
4995
  # Utility methods for working with task dates and times
@@ -5027,17 +5013,11 @@ module Checkoff
5027
5013
  def initialize(time_class: Time, date_class: Date, client: Checkoff::Clients.new.client, custom_fields: Checkoff::CustomFields.new(client:)); end
5028
5014
 
5029
5015
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5030
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5031
- # union receiver
5032
- #
5033
5016
  # _@param_ `task`
5034
5017
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5035
5018
  def start_time(task); end
5036
5019
 
5037
5020
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5038
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5039
- # union receiver
5040
- #
5041
5021
  # _@param_ `task`
5042
5022
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5043
5023
  def due_time(task); end
@@ -5076,9 +5056,6 @@ module Checkoff
5076
5056
  class ThreadLocal
5077
5057
  # sord warn - T wasn't able to be resolved to a constant in this project
5078
5058
  # sord warn - T wasn't able to be resolved to a constant in this project
5079
- # @sg-ignore return type could not be inferred — Solargraph's generic/yield-return
5080
- # inference gap for #with_thread_local_variable
5081
- #
5082
5059
  # _@param_ `name`
5083
5060
  #
5084
5061
  # _@param_ `value`
@@ -5097,8 +5074,6 @@ module Checkoff
5097
5074
  sig { params(config: T::Hash[Symbol, T.untyped], sym: Symbol, yaml_filename: String).void }
5098
5075
  def initialize(config, sym, yaml_filename); end
5099
5076
 
5100
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5101
- #
5102
5077
  # _@param_ `key`
5103
5078
  sig { params(key: Symbol).returns(Object) }
5104
5079
  def [](key); end
@@ -5137,8 +5112,8 @@ module Checkoff
5137
5112
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
5138
5113
  # _@param_ `project_obj`
5139
5114
  #
5140
- # _@param_ `project` — - :not_specified, :my_tasks
5141
- sig { params(project_obj: Asana::Resources::Project, project: T.any(String, Symbol)).returns(T::Hash[T.untyped, T.untyped]) }
5115
+ # _@param_ `project` — - a String is a project name
5116
+ sig { params(project_obj: Asana::Resources::Project, project: T.nilable(T.any(String, Symbol))).returns(T::Hash[String, Object]) }
5142
5117
  def project_to_h(project_obj, project: :not_specified); end
5143
5118
 
5144
5119
  # _@param_ `project_hash`
@@ -5248,6 +5223,10 @@ module Checkoff
5248
5223
  sig { params(param_name: String).returns(String) }
5249
5224
  def fetch_solo_param(param_name); end
5250
5225
 
5226
+ # Implemented by every subclass.
5227
+ sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5228
+ def convert; end
5229
+
5251
5230
  sig { returns(String) }
5252
5231
  attr_reader :gid
5253
5232
 
@@ -5339,7 +5318,6 @@ module Checkoff
5339
5318
  sig { params(date_url_params: T::Hash[String, T::Array[String]]).void }
5340
5319
  def initialize(date_url_params:); end
5341
5320
 
5342
- # @sg-ignore out can genuinely be nil if none of the 3 known prefixes matched; relies on the raise above it
5343
5321
  sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5344
5322
  def convert; end
5345
5323
 
@@ -5371,8 +5349,6 @@ module Checkoff
5371
5349
  sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5372
5350
  def handle_within_next(prefix); end
5373
5351
 
5374
- # @sg-ignore value.length == 1 guard above isn't inferred as narrowing value[0] to non-nil
5375
- #
5376
5352
  # _@param_ `param_key`
5377
5353
  sig { params(param_key: String).returns(String) }
5378
5354
  def get_single_param(param_key); end
@@ -5385,6 +5361,10 @@ module Checkoff
5385
5361
  sig { params(prefix: String).void }
5386
5362
  def validate_unit_is_day!(prefix); end
5387
5363
 
5364
+ # _@param_ `out`
5365
+ sig { params(out: T.nilable([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]])).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5366
+ def ensure_matched!(out); end
5367
+
5388
5368
  sig { returns(T::Hash[String, T::Array[String]]) }
5389
5369
  attr_reader :date_url_params
5390
5370
  end
@@ -5420,7 +5400,6 @@ module Checkoff
5420
5400
  sig { params(verb: String).returns(T::Array[String]) }
5421
5401
  def convert_from_projects_and_sections(verb); end
5422
5402
 
5423
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5424
5403
  sig { returns(T::Array[String]) }
5425
5404
  def convert; end
5426
5405
 
@@ -5577,16 +5556,12 @@ module Checkoff
5577
5556
  sig { returns(T::Hash[String, T::Hash[T.untyped, T.untyped]]) }
5578
5557
  def by_custom_field; end
5579
5558
 
5580
- # @sg-ignore `unless variant_class.nil?` return value isn't inferred as the declared tuple type
5581
- #
5582
5559
  # _@param_ `gid`
5583
5560
  #
5584
5561
  # _@param_ `single_custom_field_params`
5585
5562
  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])]]) }
5586
5563
  def convert_single_custom_field_params(gid, single_custom_field_params); end
5587
5564
 
5588
- # @sg-ignore split(...)[n]'s nilable Array indexing isn't inferred as the declared String return
5589
- #
5590
5565
  # _@param_ `key`
5591
5566
  sig { params(key: String).returns(String) }
5592
5567
  def gid_from_custom_field_key(key); end
@@ -5635,7 +5610,7 @@ module Checkoff
5635
5610
  # _@param_ `asana_event`
5636
5611
  #
5637
5612
  # _@param_ `failures`
5638
- sig { params(filter: T::Hash[T.untyped, T.untyped], asana_event: T::Hash[T.untyped, T.untyped], failures: T::Array[String]).returns(T::Boolean) }
5613
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])], asana_event: T::Hash[T.untyped, T.untyped], failures: T::Array[String]).returns(T::Boolean) }
5639
5614
  def filter_matches_asana_event?(filter, asana_event, failures); end
5640
5615
 
5641
5616
  # _@param_ `key`
@@ -5678,7 +5653,6 @@ module Checkoff
5678
5653
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5679
5654
  def finer(message = nil, &block); end
5680
5655
 
5681
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5682
5656
  sig { returns(Symbol) }
5683
5657
  def log_level; end
5684
5658
  end
@@ -5789,7 +5763,6 @@ module Checkoff
5789
5763
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5790
5764
  def finer(message = nil, &block); end
5791
5765
 
5792
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5793
5766
  sig { returns(Symbol) }
5794
5767
  def log_level; end
5795
5768
 
@@ -5817,13 +5790,12 @@ module Checkoff
5817
5790
  # Base class to evaluate Asana resource selectors against an Asana resource
5818
5791
  class SelectorEvaluator
5819
5792
  # _@param_ `selector`
5820
- sig { params(selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])])).returns(T.nilable(T.any(T::Boolean, Object, T::Array[T.untyped]))) }
5793
+ sig { params(selector: T.any(Symbol, T::Array[T.any(Symbol, String, Integer, T::Array[T.untyped])])).returns(T.nilable(T.any(T::Boolean, Object, T::Array[T.untyped]))) }
5821
5794
  def evaluate(selector); end
5822
5795
 
5823
5796
  sig { returns(T::Hash[T.untyped, T.untyped]) }
5824
5797
  def initializer_kwargs; end
5825
5798
 
5826
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5827
5799
  sig { returns(T::Array[T.class_of(Checkoff::SelectorClasses::FunctionEvaluator)]) }
5828
5800
  def function_evaluators; end
5829
5801
 
@@ -5904,9 +5876,6 @@ module Checkoff
5904
5876
  def evaluate_arg?(_index); end
5905
5877
 
5906
5878
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
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
5909
- #
5910
5879
  # _@param_ `task`
5911
5880
  #
5912
5881
  # _@param_ `project_name`
@@ -5996,9 +5965,6 @@ module Checkoff
5996
5965
  def matches?; end
5997
5966
 
5998
5967
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5999
- # @sg-ignore Checkoff::SelectorClasses::Task::UnassignedPFunctionEvaluator#evaluate
6000
- # return type could not be inferred
6001
- #
6002
5968
  # _@param_ `task`
6003
5969
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6004
5970
  def evaluate(task); end
@@ -6012,9 +5978,6 @@ module Checkoff
6012
5978
  def matches?; end
6013
5979
 
6014
5980
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6015
- # @sg-ignore Checkoff::SelectorClasses::Task::DueDateSetPFunctionEvaluator#evaluate
6016
- # return type could not be inferred
6017
- #
6018
5981
  # _@param_ `task`
6019
5982
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6020
5983
  def evaluate(task); end
@@ -6117,9 +6080,6 @@ module Checkoff
6117
6080
  def evaluate_arg?(_index); end
6118
6081
 
6119
6082
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6120
- # @sg-ignore Checkoff::SelectorClasses::Task::MilestonePFunctionEvaluator#evaluate
6121
- # return type could not be inferred
6122
- #
6123
6083
  # _@param_ `task`
6124
6084
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6125
6085
  def evaluate(task); end
@@ -6156,7 +6116,7 @@ module Checkoff
6156
6116
  # _@param_ `_kwargs`
6157
6117
  sig do
6158
6118
  params(
6159
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6119
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6160
6120
  tasks: Checkoff::Tasks,
6161
6121
  timelines: Checkoff::Timelines,
6162
6122
  custom_fields: Checkoff::CustomFields,
@@ -6174,7 +6134,7 @@ module Checkoff
6174
6134
  sig { returns(Checkoff::CustomFields) }
6175
6135
  attr_reader :custom_fields
6176
6136
 
6177
- sig { returns([Symbol, T::Array[T.untyped]]) }
6137
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6178
6138
  attr_reader :selector
6179
6139
  end
6180
6140
  end
@@ -6377,9 +6337,6 @@ module Checkoff
6377
6337
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6378
6338
  # sord warn - boolish is probably not a type, but using anyway
6379
6339
  # sord warn - boolish wasn't able to be resolved to a constant in this project
6380
- # @sg-ignore Checkoff::SelectorClasses::Common::NameStartsWithPFunctionEvaluator#evaluate
6381
- # return type could not be inferred
6382
- #
6383
6340
  # _@param_ `resource`
6384
6341
  #
6385
6342
  # _@param_ `prefix`
@@ -6394,8 +6351,6 @@ module Checkoff
6394
6351
 
6395
6352
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6396
6353
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6397
- # @sg-ignore selector is only String here per matches?'s is_a?(String) check, in another method
6398
- #
6399
6354
  # _@param_ `_resource`
6400
6355
  sig { params(_resource: T.any(Asana::Resources::Task, Asana::Resources::Project)).returns(String) }
6401
6356
  def evaluate(_resource); end
@@ -6408,10 +6363,10 @@ module Checkoff
6408
6363
  # _@param_ `custom_fields`
6409
6364
  #
6410
6365
  # _@param_ `_kwargs`
6411
- sig { params(selector: T.any([Symbol, T::Array[T.untyped]], String), custom_fields: Checkoff::CustomFields, _kwargs: T::Hash[T.untyped, T.untyped]).void }
6366
+ sig { params(selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol), custom_fields: Checkoff::CustomFields, _kwargs: T::Hash[T.untyped, T.untyped]).void }
6412
6367
  def initialize(selector:, custom_fields:, **_kwargs); end
6413
6368
 
6414
- sig { returns(T.any([Symbol, T::Array[T.untyped]], String)) }
6369
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6415
6370
  attr_reader :selector
6416
6371
 
6417
6372
  sig { returns(Checkoff::CustomFields) }
@@ -6429,8 +6384,6 @@ module Checkoff
6429
6384
  def matches?; end
6430
6385
 
6431
6386
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6432
- # @sg-ignore nilable return from an @!parse-declared method isn't inferred
6433
- #
6434
6387
  # _@param_ `resource`
6435
6388
  sig { params(resource: Asana::Resources::Project).returns(T.nilable(String)) }
6436
6389
  def evaluate(resource); end
@@ -6490,7 +6443,7 @@ module Checkoff
6490
6443
  # _@param_ `_kwargs`
6491
6444
  sig do
6492
6445
  params(
6493
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6446
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6494
6447
  projects: Checkoff::Projects,
6495
6448
  portfolios: Checkoff::Portfolios,
6496
6449
  workspaces: Checkoff::Workspaces,
@@ -6499,7 +6452,7 @@ module Checkoff
6499
6452
  end
6500
6453
  def initialize(selector:, projects:, portfolios:, workspaces:, **_kwargs); end
6501
6454
 
6502
- sig { returns([Symbol, T::Array[T.untyped]]) }
6455
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6503
6456
  attr_reader :selector
6504
6457
 
6505
6458
  sig { returns(Checkoff::Projects) }
@@ -6523,8 +6476,6 @@ module Checkoff
6523
6476
  def matches?; end
6524
6477
 
6525
6478
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6526
- # @sg-ignore String, nil safe-nav chain isn't inferred as returning Boolean
6527
- #
6528
6479
  # _@param_ `section`
6529
6480
  sig { params(section: Asana::Resources::Section).returns(T::Boolean) }
6530
6481
  def evaluate(section); end
@@ -6555,7 +6506,7 @@ module Checkoff
6555
6506
  # _@param_ `kwargs`
6556
6507
  sig do
6557
6508
  params(
6558
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6509
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6559
6510
  sections: Checkoff::Sections,
6560
6511
  client: Asana::Client,
6561
6512
  kwargs: T::Hash[T.untyped, T.untyped]
@@ -6563,7 +6514,7 @@ module Checkoff
6563
6514
  end
6564
6515
  def initialize(selector:, sections:, client:, **kwargs); end
6565
6516
 
6566
- sig { returns([Symbol, T::Array[T.untyped]]) }
6517
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6567
6518
  attr_reader :selector
6568
6519
 
6569
6520
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -6583,13 +6534,10 @@ module Checkoff
6583
6534
  sig { params(_index: Integer).returns(T::Boolean) }
6584
6535
  def evaluate_arg?(_index); end
6585
6536
 
6586
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6587
6537
  sig { returns(T::Boolean) }
6588
6538
  def matches?; end
6589
6539
 
6590
6540
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6591
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6592
- #
6593
6541
  # _@param_ `_task`
6594
6542
  #
6595
6543
  # _@param_ `_args`
@@ -6599,7 +6547,7 @@ module Checkoff
6599
6547
  # _@param_ `object`
6600
6548
  #
6601
6549
  # _@param_ `fn_name`
6602
- sig { params(object: Object, fn_name: Symbol).returns(T::Boolean) }
6550
+ sig { params(object: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol), fn_name: Symbol).returns(T::Boolean) }
6603
6551
  def fn?(object, fn_name); end
6604
6552
 
6605
6553
  # Concrete subclasses each declare their own initialize with their
@@ -6639,7 +6587,6 @@ module Checkoff
6639
6587
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6640
6588
  def finer(message = nil, &block); end
6641
6589
 
6642
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6643
6590
  sig { returns(Symbol) }
6644
6591
  def log_level; end
6645
6592
  end
@@ -6788,8 +6735,8 @@ end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze, T.untyped
6788
6735
  sig { returns(T::Hash[T.untyped, T.untyped]) }
6789
6736
  def initializer_kwargs; end
6790
6737
 
6791
- # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6792
- sig { returns(Asana::Resources::Project) }
6738
+ # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6739
+ sig { returns(Asana::Resources::Section) }
6793
6740
  attr_reader :item
6794
6741
 
6795
6742
  sig { returns(Checkoff::Sections) }
@@ -6832,7 +6779,6 @@ module Logging
6832
6779
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6833
6780
  def finer(message = nil, &block); end
6834
6781
 
6835
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6836
6782
  sig { returns(Symbol) }
6837
6783
  def log_level; end
6838
6784
  end
@@ -6853,11 +6799,11 @@ module Asana
6853
6799
  # Public: The base resource class which provides some sugar over common
6854
6800
  # resource functionality.
6855
6801
  class Resource
6856
- sig { returns(T::Hash[T.untyped, T.untyped]) }
6802
+ sig { returns(T::Hash[String, Object]) }
6857
6803
  def marshal_dump; end
6858
6804
 
6859
6805
  # _@param_ `data`
6860
- sig { params(data: T::Hash[T.untyped, T.untyped]).void }
6806
+ sig { params(data: T::Hash[String, Object]).void }
6861
6807
  def marshal_load(data); end
6862
6808
  end
6863
6809
  end