checkoff 0.257.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 -26
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +11 -13
  7. data/lib/checkoff/internal/asana_event_filter.rb +1 -1
  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 -9
  12. data/lib/checkoff/internal/search_url/custom_field_variant.rb +7 -0
  13. data/lib/checkoff/internal/search_url/date_param_converter.rb +13 -4
  14. data/lib/checkoff/internal/search_url/parser.rb +2 -7
  15. data/lib/checkoff/internal/search_url/simple_param_converter.rb +11 -5
  16. data/lib/checkoff/internal/section_selector_evaluator.rb +1 -1
  17. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +5 -2
  18. data/lib/checkoff/internal/selector_classes/common.rb +13 -31
  19. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +20 -4
  20. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +11 -2
  21. data/lib/checkoff/internal/selector_classes/project.rb +5 -13
  22. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +8 -5
  23. data/lib/checkoff/internal/selector_classes/section.rb +2 -5
  24. data/lib/checkoff/internal/selector_classes/task/function_evaluator.rb +2 -2
  25. data/lib/checkoff/internal/selector_classes/task.rb +24 -23
  26. data/lib/checkoff/internal/selector_evaluator.rb +8 -9
  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 +13 -19
  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 +8 -16
  42. data/lib/checkoff/timelines.rb +5 -10
  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 +122 -179
  47. data/sig/checkoff.rbs +83 -181
  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.257.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
@@ -1289,10 +1295,10 @@ module Checkoff
1289
1295
  def h_to_task(task_data); end
1290
1296
 
1291
1297
  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
1298
+ def in_portfolio_named?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
1293
1299
 
1294
1300
  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
1301
+ def in_portfolio_more_than_once?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
1296
1302
 
1297
1303
  sig { returns(T.untyped) }
1298
1304
  def as_cache_key; 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
 
@@ -1862,6 +1877,9 @@ module Checkoff
1862
1877
  sig { returns(T.untyped) }
1863
1878
  def single_value; end
1864
1879
 
1880
+ sig { returns(T.untyped) }
1881
+ def convert; end
1882
+
1865
1883
  sig { returns(T.untyped) }
1866
1884
  attr_reader :key
1867
1885
 
@@ -1977,6 +1995,9 @@ module Checkoff
1977
1995
  class FunctionEvaluator
1978
1996
  include Logging
1979
1997
 
1998
+ sig { params(selector: T.untyped, _kwargs: T.untyped).void }
1999
+ def initialize(selector: nil, **_kwargs); end
2000
+
1980
2001
  sig { params(_index: T.untyped).returns(T.untyped) }
1981
2002
  def evaluate_arg?(_index); end
1982
2003
 
@@ -2127,6 +2148,9 @@ module Checkoff
2127
2148
  sig { params(selector: T.untyped, custom_fields: T.untyped, _kwargs: T.untyped).void }
2128
2149
  def initialize(selector:, custom_fields:, **_kwargs); end
2129
2150
 
2151
+ sig { returns(T.untyped) }
2152
+ attr_reader :custom_fields
2153
+
2130
2154
  sig { returns(T.untyped) }
2131
2155
  attr_reader :selector
2132
2156
  end
@@ -2182,6 +2206,15 @@ module Checkoff
2182
2206
  end
2183
2207
  def initialize(selector:, projects:, portfolios:, workspaces:, **_kwargs); end
2184
2208
 
2209
+ sig { returns(T.untyped) }
2210
+ attr_reader :projects
2211
+
2212
+ sig { returns(T.untyped) }
2213
+ attr_reader :portfolios
2214
+
2215
+ sig { returns(T.untyped) }
2216
+ attr_reader :workspaces
2217
+
2185
2218
  sig { returns(T.untyped) }
2186
2219
  attr_reader :selector
2187
2220
  end
@@ -2220,10 +2253,13 @@ module Checkoff
2220
2253
  def initialize(selector:, sections:, client:, **kwargs); end
2221
2254
 
2222
2255
  sig { returns(T.untyped) }
2223
- attr_reader :selector
2256
+ attr_reader :sections
2224
2257
 
2225
2258
  sig { returns(T.untyped) }
2226
2259
  attr_reader :client
2260
+
2261
+ sig { returns(T.untyped) }
2262
+ attr_reader :selector
2227
2263
  end
2228
2264
  end
2229
2265
 
@@ -2449,7 +2485,7 @@ end
2449
2485
  # typed: ignore
2450
2486
  # Command-line and gem client for Asana (unofficial)
2451
2487
  module Checkoff
2452
- VERSION = T.let('0.257.0', T.untyped)
2488
+ VERSION = T.let('0.260.0', T.untyped)
2453
2489
 
2454
2490
  # Move tasks from one place to another
2455
2491
  class MvSubcommand
@@ -2596,7 +2632,7 @@ module Checkoff
2596
2632
  workspace_name: String,
2597
2633
  project_name: T.any(String, Symbol),
2598
2634
  section_name: T.nilable(T.any(String, Symbol)),
2599
- task_name: T.nilable(T.any(String, Symbol)),
2635
+ task_name: T.nilable(String),
2600
2636
  config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
2601
2637
  projects: Checkoff::Projects,
2602
2638
  sections: Checkoff::Sections,
@@ -2792,8 +2828,6 @@ module Checkoff
2792
2828
  def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: []); end
2793
2829
 
2794
2830
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
2795
- # @sg-ignore nil check above is not flow-sensitive
2796
- #
2797
2831
  # _@param_ `workspace_name`
2798
2832
  #
2799
2833
  # _@param_ `tag_name`
@@ -2864,7 +2898,7 @@ module Checkoff
2864
2898
  # _@param_ `asana_task`
2865
2899
  sig do
2866
2900
  params(
2867
- config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
2901
+ config: T.any(T::Hash[Symbol, Object], Checkoff::Internal::EnvFallbackConfigLoader),
2868
2902
  client: Asana::Client,
2869
2903
  workspaces: Checkoff::Workspaces,
2870
2904
  sections: Checkoff::Sections,
@@ -2973,9 +3007,6 @@ module Checkoff
2973
3007
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2974
3008
  # Add a task
2975
3009
  #
2976
- # @sg-ignore @asana_task.create return type could not be inferred — calling a class method
2977
- # through a Class<T>-typed ivar is a known Solargraph dispatch limitation
2978
- #
2979
3010
  # _@param_ `name`
2980
3011
  #
2981
3012
  # _@param_ `workspace_gid`
@@ -3028,21 +3059,19 @@ module Checkoff
3028
3059
 
3029
3060
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3030
3061
  # _@param_ `task_data`
3031
- 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) }
3032
3063
  def h_to_task(task_data); end
3033
3064
 
3034
3065
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3035
3066
  # True if the task is in a project which is in the given portfolio
3036
3067
  #
3037
- # @sg-ignore Checkoff::Tasks#in_portfolio_named? return type could not be inferred
3038
- #
3039
3068
  # _@param_ `task`
3040
3069
  #
3041
3070
  # _@param_ `portfolio_name`
3042
3071
  #
3043
3072
  # _@param_ `workspace_name`
3044
3073
  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
3074
+ def in_portfolio_named?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
3046
3075
 
3047
3076
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3048
3077
  # True if the task is in a project which is in the given portfolio
@@ -3053,7 +3082,7 @@ module Checkoff
3053
3082
  #
3054
3083
  # _@param_ `workspace_name`
3055
3084
  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
3085
+ def in_portfolio_more_than_once?(task, portfolio_name, workspace_name: T.must(@workspaces.default_workspace.name)); end
3057
3086
 
3058
3087
  sig { returns(T::Hash[T.untyped, T.untyped]) }
3059
3088
  def as_cache_key; end
@@ -3088,9 +3117,6 @@ module Checkoff
3088
3117
  sig { returns(Checkoff::Projects) }
3089
3118
  def projects; end
3090
3119
 
3091
- # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
3092
- # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
3093
- # unify #fetch across that union
3094
3120
  sig { returns(String) }
3095
3121
  def default_assignee_gid; end
3096
3122
 
@@ -3117,7 +3143,6 @@ module Checkoff
3117
3143
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3118
3144
  def finer(message = nil, &block); end
3119
3145
 
3120
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3121
3146
  sig { returns(Symbol) }
3122
3147
  def log_level; end
3123
3148
 
@@ -3225,7 +3250,6 @@ module Checkoff
3225
3250
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3226
3251
  def finer(message = nil, &block); end
3227
3252
 
3228
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3229
3253
  sig { returns(Symbol) }
3230
3254
  def log_level; end
3231
3255
 
@@ -3277,7 +3301,7 @@ module Checkoff
3277
3301
  # _@param_ `date_or_time`
3278
3302
  #
3279
3303
  # _@param_ `period` — Valid values: :this_week, :now_or_before, :indefinite, [:less_than_n_days_ago, Integer]
3280
- 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) }
3281
3305
  def in_period?(date_or_time, period); end
3282
3306
 
3283
3307
  # _@param_ `date_or_time`
@@ -3326,8 +3350,6 @@ module Checkoff
3326
3350
  sig { params(num_days: Integer).returns(ActiveSupport::TimeWithZone) }
3327
3351
  def n_days_from_now(num_days); end
3328
3352
 
3329
- # @sg-ignore Checkoff::Timing#n_days_from_today return type could not be inferred
3330
- #
3331
3353
  # _@param_ `num_days`
3332
3354
  sig { params(num_days: Integer).returns(Date) }
3333
3355
  def n_days_from_today(num_days); end
@@ -3374,7 +3396,6 @@ module Checkoff
3374
3396
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3375
3397
  def finer(message = nil, &block); end
3376
3398
 
3377
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3378
3399
  sig { returns(Symbol) }
3379
3400
  def log_level; end
3380
3401
  end
@@ -3499,6 +3520,12 @@ module Checkoff
3499
3520
 
3500
3521
  # Default options used in Asana API to pull tasks
3501
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
+ #
3502
3529
  # _@param_ `extra_fields`
3503
3530
  #
3504
3531
  # _@param_ `only_uncompleted`
@@ -3527,8 +3554,6 @@ module Checkoff
3527
3554
  def project(workspace_name, project_name, extra_fields: []); end
3528
3555
 
3529
3556
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3530
- # @sg-ignore nil check above is not flow-sensitive
3531
- #
3532
3557
  # _@param_ `workspace_name`
3533
3558
  #
3534
3559
  # _@param_ `project_name` — - :my_tasks or a project name
@@ -3585,8 +3610,8 @@ module Checkoff
3585
3610
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3586
3611
  # _@param_ `project_obj`
3587
3612
  #
3588
- # _@param_ `project` — - :not_specified, :my_tasks or a project name
3589
- 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]) }
3590
3615
  def project_to_h(project_obj, project: :not_specified); end
3591
3616
 
3592
3617
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
@@ -3600,7 +3625,7 @@ module Checkoff
3600
3625
  # _@param_ `project`
3601
3626
  #
3602
3627
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3603
- 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) }
3604
3629
  def project_ready?(project, period: :now_or_before); end
3605
3630
 
3606
3631
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
@@ -3609,7 +3634,7 @@ module Checkoff
3609
3634
  # _@param_ `field_name`
3610
3635
  #
3611
3636
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3612
- 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) }
3613
3638
  def in_period?(project, field_name, period); end
3614
3639
 
3615
3640
  sig { returns(T::Hash[T.untyped, T.untyped]) }
@@ -3647,7 +3672,6 @@ module Checkoff
3647
3672
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3648
3673
  def finer(message = nil, &block); end
3649
3674
 
3650
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3651
3675
  sig { returns(Symbol) }
3652
3676
  def log_level; end
3653
3677
 
@@ -3773,7 +3797,6 @@ module Checkoff
3773
3797
  def tasks(workspace_name, project_name, section_name, only_uncompleted: true, extra_fields: []); end
3774
3798
 
3775
3799
  # Pulls just names of tasks from a given section.
3776
- # @sg-ignore
3777
3800
  #
3778
3801
  # _@param_ `workspace_name`
3779
3802
  #
@@ -3784,8 +3807,6 @@ module Checkoff
3784
3807
  def section_task_names(workspace_name, project_name, section_name); end
3785
3808
 
3786
3809
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3787
- # @sg-ignore section() is nil-checked below
3788
- #
3789
3810
  # _@param_ `workspace_name`
3790
3811
  #
3791
3812
  # _@param_ `project_name`
@@ -3880,8 +3901,6 @@ module Checkoff
3880
3901
  def file_task_by_section(by_section, task, project_gid); end
3881
3902
 
3882
3903
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3883
- # @sg-ignore projects.project may be nil but is raised below
3884
- #
3885
3904
  # _@param_ `workspace_name`
3886
3905
  #
3887
3906
  # _@param_ `project_name`
@@ -3911,7 +3930,6 @@ module Checkoff
3911
3930
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3912
3931
  def finer(message = nil, &block); end
3913
3932
 
3914
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3915
3933
  sig { returns(Symbol) }
3916
3934
  def log_level; end
3917
3935
 
@@ -3989,8 +4007,6 @@ module Checkoff
3989
4007
  # expected to move to the new-style way of representing sections
3990
4008
  # as memberships with a separate API within a task.
3991
4009
  #
3992
- # @sg-ignore Checkoff::Subtasks#subtask_section? return type could not be inferred
3993
- #
3994
4010
  # _@param_ `subtask`
3995
4011
  sig { params(subtask: Asana::Resources::Task).returns(T.nilable(T::Boolean)) }
3996
4012
  def subtask_section?(subtask); end
@@ -4080,6 +4096,12 @@ module Checkoff
4080
4096
  sig { void }
4081
4097
  def self.run; end
4082
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
+
4083
4105
  sig { returns(Checkoff::Workspaces) }
4084
4106
  attr_reader :workspaces
4085
4107
 
@@ -4164,7 +4186,7 @@ module Checkoff
4164
4186
  # _@param_ `task_data`
4165
4187
  #
4166
4188
  # _@param_ `section`
4167
- 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) }
4168
4190
  def task_data_dependent_on_previous_section_last_milestone?(task_data, section); end
4169
4191
 
4170
4192
  sig { void }
@@ -4211,8 +4233,6 @@ module Checkoff
4211
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
4212
4234
 
4213
4235
  # sord warn - Asana::Resources::Portfolio wasn't able to be resolved to a constant in this project
4214
- # @sg-ignore nil check above is not flow-sensitive
4215
- #
4216
4236
  # _@param_ `workspace_name`
4217
4237
  #
4218
4238
  # _@param_ `portfolio_name`
@@ -4283,7 +4303,7 @@ module Checkoff
4283
4303
  # _@param_ `client`
4284
4304
  #
4285
4305
  # _@param_ `asana_workspace`
4286
- 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 }
4287
4307
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), client: Checkoff::Clients.new(config:).client, asana_workspace: Asana::Resources::Workspace); end
4288
4308
 
4289
4309
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
@@ -4294,21 +4314,14 @@ module Checkoff
4294
4314
  def workspace(workspace_name); end
4295
4315
 
4296
4316
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
4297
- # @sg-ignore @asana_workspace.find_by_id return type could not be inferred — calling a
4298
- # class method through a Class<T>-typed ivar is a known Solargraph dispatch limitation
4299
4317
  sig { returns(Asana::Resources::Workspace) }
4300
4318
  def default_workspace; end
4301
4319
 
4302
4320
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
4303
- # @sg-ignore workspace() is nil-checked below
4304
- #
4305
4321
  # _@param_ `workspace_name`
4306
4322
  sig { params(workspace_name: T.any(String, Symbol)).returns(Asana::Resources::Workspace) }
4307
4323
  def workspace_or_raise(workspace_name); end
4308
4324
 
4309
- # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
4310
- # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
4311
- # unify #fetch across that union
4312
4325
  sig { returns(String) }
4313
4326
  def default_workspace_gid; end
4314
4327
 
@@ -4448,7 +4461,6 @@ module Checkoff
4448
4461
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4449
4462
  def finer(message = nil, &block); end
4450
4463
 
4451
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4452
4464
  sig { returns(Symbol) }
4453
4465
  def log_level; end
4454
4466
 
@@ -4490,8 +4502,6 @@ module Checkoff
4490
4502
  client:)); end
4491
4503
 
4492
4504
  # sord warn - Asana::Resources::CustomField wasn't able to be resolved to a constant in this project
4493
- # @sg-ignore nil check above is not flow-sensitive
4494
- #
4495
4505
  # _@param_ `workspace_name`
4496
4506
  #
4497
4507
  # _@param_ `custom_field_name`
@@ -4515,10 +4525,6 @@ module Checkoff
4515
4525
 
4516
4526
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4517
4527
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4518
- # @sg-ignore Declared return type Array<String> does not match inferred type Array,Array<Array> —
4519
- # fixing cleanly needs binding enum_value.fetch('name') to a typed local; leaving for a
4520
- # follow-up code PR to keep this one annotation-only.
4521
- #
4522
4528
  # _@param_ `resource`
4523
4529
  #
4524
4530
  # _@param_ `custom_field_name`
@@ -4530,41 +4536,41 @@ module Checkoff
4530
4536
  # _@param_ `resource`
4531
4537
  #
4532
4538
  # _@param_ `custom_field_name`
4533
- 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])) }
4534
4540
  def resource_custom_field_by_name(resource, custom_field_name); end
4535
4541
 
4536
4542
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4537
4543
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4538
- # @sg-ignore nil check above is not flow-sensitive
4539
- #
4540
4544
  # _@param_ `resource`
4541
4545
  #
4542
4546
  # _@param_ `custom_field_name`
4543
- 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]) }
4544
4548
  def resource_custom_field_by_name_or_raise(resource, custom_field_name); end
4545
4549
 
4546
4550
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4547
4551
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4548
- # @sg-ignore nil check above is not flow-sensitive
4549
- #
4550
4552
  # _@param_ `resource`
4551
4553
  #
4552
4554
  # _@param_ `custom_field_gid`
4553
- 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]) }
4554
4556
  def resource_custom_field_by_gid_or_raise(resource, custom_field_gid); end
4555
4557
 
4556
- # @sg-ignore Declared return type Array<Hash> does not match inferred type Array,Hash,Array<Hash> —
4557
- # fixing cleanly needs restructuring the case/when to bind each branch to a typed local; leaving
4558
- # 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
4559
4565
  #
4560
4566
  # _@param_ `custom_field`
4561
- 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)]]) }
4562
4568
  def resource_custom_field_enum_values(custom_field); end
4563
4569
 
4564
4570
  # _@param_ `custom_field`
4565
4571
  #
4566
4572
  # _@param_ `enum_value`
4567
- 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]) }
4568
4574
  def find_gids(custom_field, enum_value); end
4569
4575
 
4570
4576
  sig { void }
@@ -4700,9 +4706,6 @@ module Checkoff
4700
4706
  sig { params(api_params: T::Hash[String, Object], workspace_gid: String, extra_fields: T::Array[String]).returns(T::Enumerable[Asana::Resources::Task]) }
4701
4707
  def iterated_raw_task_search(api_params, workspace_gid:, extra_fields:); end
4702
4708
 
4703
- # @sg-ignore return type could not be inferred — bracket access on a Hash{Symbol=>undefined}
4704
- # local doesn't narrow even with a T.cast on the return expression
4705
- #
4706
4709
  # _@param_ `extra_fields`
4707
4710
  sig { params(extra_fields: T::Array[String]).returns(T::Hash[Symbol, T::Array[String]]) }
4708
4711
  def calculate_api_options(extra_fields); end
@@ -4733,7 +4736,6 @@ module Checkoff
4733
4736
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4734
4737
  def finer(message = nil, &block); end
4735
4738
 
4736
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4737
4739
  sig { returns(Symbol) }
4738
4740
  def log_level; end
4739
4741
 
@@ -4788,24 +4790,25 @@ module Checkoff
4788
4790
  # _@param_ `task`
4789
4791
  #
4790
4792
  # _@param_ `task_selector` — Filter based on task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
4791
- 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) }
4792
4794
  def filter_via_task_selector(task, task_selector); end
4793
4795
 
4794
- # @sg-ignore
4795
4796
  sig { returns(String) }
4796
4797
  def self.project_name; end
4797
4798
 
4798
- # @sg-ignore
4799
4799
  sig { returns(String) }
4800
4800
  def self.workspace_name; end
4801
4801
 
4802
- # @sg-ignore
4803
4802
  sig { returns([Symbol, T::Array[T.untyped]]) }
4804
4803
  def self.task_selector; end
4805
4804
 
4806
4805
  sig { void }
4807
4806
  def self.run; end
4808
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
+
4809
4812
  sig { returns(Checkoff::Tasks) }
4810
4813
  attr_reader :tasks
4811
4814
 
@@ -4856,7 +4859,7 @@ module Checkoff
4856
4859
  # _@param_ `project`
4857
4860
  #
4858
4861
  # _@param_ `project_selector` — Filter based on project details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
4859
- 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) }
4860
4863
  def filter_via_project_selector(project, project_selector); end
4861
4864
 
4862
4865
  sig { void }
@@ -4950,7 +4953,7 @@ module Checkoff
4950
4953
  # _@param_ `task_data`
4951
4954
  #
4952
4955
  # _@param_ `client`
4953
- 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) }
4954
4957
  def h_to_task(task_data, client:); end
4955
4958
 
4956
4959
  # _@param_ `task_hash`
@@ -4972,7 +4975,7 @@ module Checkoff
4972
4975
  # _@param_ `key`
4973
4976
  sig do
4974
4977
  params(
4975
- task_hash: T::Hash[T.untyped, T.untyped],
4978
+ task_hash: T::Hash[String, Object],
4976
4979
  memberships: T::Array[T::Hash[T.untyped, T.untyped]],
4977
4980
  resource: String,
4978
4981
  key: String
@@ -4981,8 +4984,12 @@ module Checkoff
4981
4984
  def unwrap_memberships(task_hash, memberships, resource, key); end
4982
4985
 
4983
4986
  # _@param_ `task_hash`
4984
- sig { params(task_hash: T::Hash[T.untyped, T.untyped]).void }
4987
+ sig { params(task_hash: T::Hash[String, Object]).void }
4985
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
4986
4993
  end
4987
4994
 
4988
4995
  # Utility methods for working with task dates and times
@@ -5006,17 +5013,11 @@ module Checkoff
5006
5013
  def initialize(time_class: Time, date_class: Date, client: Checkoff::Clients.new.client, custom_fields: Checkoff::CustomFields.new(client:)); end
5007
5014
 
5008
5015
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5009
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5010
- # union receiver
5011
- #
5012
5016
  # _@param_ `task`
5013
5017
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5014
5018
  def start_time(task); end
5015
5019
 
5016
5020
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5017
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5018
- # union receiver
5019
- #
5020
5021
  # _@param_ `task`
5021
5022
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5022
5023
  def due_time(task); end
@@ -5055,9 +5056,6 @@ module Checkoff
5055
5056
  class ThreadLocal
5056
5057
  # sord warn - T wasn't able to be resolved to a constant in this project
5057
5058
  # sord warn - T wasn't able to be resolved to a constant in this project
5058
- # @sg-ignore return type could not be inferred — Solargraph's generic/yield-return
5059
- # inference gap for #with_thread_local_variable
5060
- #
5061
5059
  # _@param_ `name`
5062
5060
  #
5063
5061
  # _@param_ `value`
@@ -5076,8 +5074,6 @@ module Checkoff
5076
5074
  sig { params(config: T::Hash[Symbol, T.untyped], sym: Symbol, yaml_filename: String).void }
5077
5075
  def initialize(config, sym, yaml_filename); end
5078
5076
 
5079
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5080
- #
5081
5077
  # _@param_ `key`
5082
5078
  sig { params(key: Symbol).returns(Object) }
5083
5079
  def [](key); end
@@ -5116,8 +5112,8 @@ module Checkoff
5116
5112
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
5117
5113
  # _@param_ `project_obj`
5118
5114
  #
5119
- # _@param_ `project` — - :not_specified, :my_tasks
5120
- 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]) }
5121
5117
  def project_to_h(project_obj, project: :not_specified); end
5122
5118
 
5123
5119
  # _@param_ `project_hash`
@@ -5227,6 +5223,10 @@ module Checkoff
5227
5223
  sig { params(param_name: String).returns(String) }
5228
5224
  def fetch_solo_param(param_name); end
5229
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
+
5230
5230
  sig { returns(String) }
5231
5231
  attr_reader :gid
5232
5232
 
@@ -5318,7 +5318,6 @@ module Checkoff
5318
5318
  sig { params(date_url_params: T::Hash[String, T::Array[String]]).void }
5319
5319
  def initialize(date_url_params:); end
5320
5320
 
5321
- # @sg-ignore
5322
5321
  sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5323
5322
  def convert; end
5324
5323
 
@@ -5350,8 +5349,6 @@ module Checkoff
5350
5349
  sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5351
5350
  def handle_within_next(prefix); end
5352
5351
 
5353
- # @sg-ignore
5354
- #
5355
5352
  # _@param_ `param_key`
5356
5353
  sig { params(param_key: String).returns(String) }
5357
5354
  def get_single_param(param_key); end
@@ -5364,6 +5361,10 @@ module Checkoff
5364
5361
  sig { params(prefix: String).void }
5365
5362
  def validate_unit_is_day!(prefix); end
5366
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
+
5367
5368
  sig { returns(T::Hash[String, T::Array[String]]) }
5368
5369
  attr_reader :date_url_params
5369
5370
  end
@@ -5399,7 +5400,6 @@ module Checkoff
5399
5400
  sig { params(verb: String).returns(T::Array[String]) }
5400
5401
  def convert_from_projects_and_sections(verb); end
5401
5402
 
5402
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5403
5403
  sig { returns(T::Array[String]) }
5404
5404
  def convert; end
5405
5405
 
@@ -5517,14 +5517,13 @@ module Checkoff
5517
5517
  def convert; end
5518
5518
 
5519
5519
  # https://developers.asana.com/docs/search-tasks-in-a-workspace
5520
- # @sg-ignore
5521
5520
  #
5522
5521
  # _@param_ `key` — the name of the search url param
5523
5522
  #
5524
5523
  # _@param_ `values` — the values of the search url param
5525
5524
  #
5526
- # _@return_ — the converted params
5527
- sig { params(key: String, values: T::Array[String]).returns(T::Hash[String, String]) }
5525
+ # _@return_ — the converted params, as an alternating key/value flat array
5526
+ sig { params(key: String, values: T::Array[String]).returns(T::Array[String]) }
5528
5527
  def convert_arg(key, values); end
5529
5528
 
5530
5529
  sig { returns(T::Hash[String, T::Array[String]]) }
@@ -5557,16 +5556,12 @@ module Checkoff
5557
5556
  sig { returns(T::Hash[String, T::Hash[T.untyped, T.untyped]]) }
5558
5557
  def by_custom_field; end
5559
5558
 
5560
- # @sg-ignore
5561
- #
5562
5559
  # _@param_ `gid`
5563
5560
  #
5564
5561
  # _@param_ `single_custom_field_params`
5565
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])]]) }
5566
5563
  def convert_single_custom_field_params(gid, single_custom_field_params); end
5567
5564
 
5568
- # @sg-ignore
5569
- #
5570
5565
  # _@param_ `key`
5571
5566
  sig { params(key: String).returns(String) }
5572
5567
  def gid_from_custom_field_key(key); end
@@ -5615,7 +5610,7 @@ module Checkoff
5615
5610
  # _@param_ `asana_event`
5616
5611
  #
5617
5612
  # _@param_ `failures`
5618
- 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) }
5619
5614
  def filter_matches_asana_event?(filter, asana_event, failures); end
5620
5615
 
5621
5616
  # _@param_ `key`
@@ -5658,7 +5653,6 @@ module Checkoff
5658
5653
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5659
5654
  def finer(message = nil, &block); end
5660
5655
 
5661
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5662
5656
  sig { returns(Symbol) }
5663
5657
  def log_level; end
5664
5658
  end
@@ -5769,7 +5763,6 @@ module Checkoff
5769
5763
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5770
5764
  def finer(message = nil, &block); end
5771
5765
 
5772
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5773
5766
  sig { returns(Symbol) }
5774
5767
  def log_level; end
5775
5768
 
@@ -5797,26 +5790,25 @@ module Checkoff
5797
5790
  # Base class to evaluate Asana resource selectors against an Asana resource
5798
5791
  class SelectorEvaluator
5799
5792
  # _@param_ `selector`
5800
- 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]))) }
5801
5794
  def evaluate(selector); end
5802
5795
 
5803
5796
  sig { returns(T::Hash[T.untyped, T.untyped]) }
5804
5797
  def initializer_kwargs; end
5805
5798
 
5806
- # @sg-ignore
5807
5799
  sig { returns(T::Array[T.class_of(Checkoff::SelectorClasses::FunctionEvaluator)]) }
5808
5800
  def function_evaluators; end
5809
5801
 
5810
5802
  # _@param_ `selector`
5811
5803
  #
5812
5804
  # _@param_ `evaluator`
5813
- sig { params(selector: T::Array[T.untyped], evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T::Array[T.untyped]) }
5805
+ sig { params(selector: T.any(Symbol, T::Array[T.untyped]), evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T::Array[T.untyped]) }
5814
5806
  def evaluate_args(selector, evaluator); end
5815
5807
 
5816
5808
  # _@param_ `selector`
5817
5809
  #
5818
5810
  # _@param_ `evaluator`
5819
- sig { params(selector: T::Array[T.untyped], evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T.nilable(T.any(T::Boolean, Object))) }
5811
+ sig { params(selector: T.any(Symbol, T::Array[T.untyped]), evaluator: Checkoff::SelectorClasses::FunctionEvaluator).returns(T.nilable(T.any(T::Boolean, Object))) }
5820
5812
  def try_this_evaluator(selector, evaluator); end
5821
5813
 
5822
5814
  sig { returns(Asana::Resources::Resource) }
@@ -5850,8 +5842,6 @@ module Checkoff
5850
5842
  def evaluate_arg?(_index); end
5851
5843
 
5852
5844
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5853
- # @sg-ignore
5854
- #
5855
5845
  # _@param_ `task`
5856
5846
  #
5857
5847
  # _@param_ `section_name_prefix`
@@ -5869,8 +5859,6 @@ module Checkoff
5869
5859
  def evaluate_arg?(_index); end
5870
5860
 
5871
5861
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5872
- # @sg-ignore
5873
- #
5874
5862
  # _@param_ `task`
5875
5863
  #
5876
5864
  # _@param_ `section_name`
@@ -5888,8 +5876,6 @@ module Checkoff
5888
5876
  def evaluate_arg?(_index); end
5889
5877
 
5890
5878
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5891
- # @sg-ignore
5892
- #
5893
5879
  # _@param_ `task`
5894
5880
  #
5895
5881
  # _@param_ `project_name`
@@ -5924,8 +5910,6 @@ module Checkoff
5924
5910
  def evaluate_arg?(_index); end
5925
5911
 
5926
5912
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5927
- # @sg-ignore
5928
- #
5929
5913
  # _@param_ `task`
5930
5914
  #
5931
5915
  # _@param_ `tag_name`
@@ -5981,9 +5965,6 @@ module Checkoff
5981
5965
  def matches?; end
5982
5966
 
5983
5967
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5984
- # @sg-ignore Checkoff::SelectorClasses::Task::UnassignedPFunctionEvaluator#evaluate
5985
- # return type could not be inferred
5986
- #
5987
5968
  # _@param_ `task`
5988
5969
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
5989
5970
  def evaluate(task); end
@@ -5997,9 +5978,6 @@ module Checkoff
5997
5978
  def matches?; end
5998
5979
 
5999
5980
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6000
- # @sg-ignore Checkoff::SelectorClasses::Task::DueDateSetPFunctionEvaluator#evaluate
6001
- # return type could not be inferred
6002
- #
6003
5981
  # _@param_ `task`
6004
5982
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6005
5983
  def evaluate(task); end
@@ -6102,9 +6080,6 @@ module Checkoff
6102
6080
  def evaluate_arg?(_index); end
6103
6081
 
6104
6082
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6105
- # @sg-ignore Checkoff::SelectorClasses::Task::MilestonePFunctionEvaluator#evaluate
6106
- # return type could not be inferred
6107
- #
6108
6083
  # _@param_ `task`
6109
6084
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6110
6085
  def evaluate(task); end
@@ -6141,7 +6116,7 @@ module Checkoff
6141
6116
  # _@param_ `_kwargs`
6142
6117
  sig do
6143
6118
  params(
6144
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6119
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6145
6120
  tasks: Checkoff::Tasks,
6146
6121
  timelines: Checkoff::Timelines,
6147
6122
  custom_fields: Checkoff::CustomFields,
@@ -6159,7 +6134,7 @@ module Checkoff
6159
6134
  sig { returns(Checkoff::CustomFields) }
6160
6135
  attr_reader :custom_fields
6161
6136
 
6162
- sig { returns([Symbol, T::Array[T.untyped]]) }
6137
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6163
6138
  attr_reader :selector
6164
6139
  end
6165
6140
  end
@@ -6278,10 +6253,6 @@ module Checkoff
6278
6253
 
6279
6254
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6280
6255
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6281
- # @sg-ignore
6282
- # @sg-ignore
6283
- # @sg-ignore
6284
- #
6285
6256
  # _@param_ `resource`
6286
6257
  #
6287
6258
  # _@param_ `custom_field_gid`
@@ -6301,9 +6272,6 @@ module Checkoff
6301
6272
 
6302
6273
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6303
6274
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6304
- # @sg-ignore
6305
- # @sg-ignore
6306
- #
6307
6275
  # _@param_ `resource`
6308
6276
  #
6309
6277
  # _@param_ `custom_field_gid`
@@ -6325,9 +6293,6 @@ module Checkoff
6325
6293
 
6326
6294
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6327
6295
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6328
- # @sg-ignore
6329
- # @sg-ignore
6330
- #
6331
6296
  # _@param_ `resource`
6332
6297
  #
6333
6298
  # _@param_ `custom_field_name`
@@ -6372,9 +6337,6 @@ module Checkoff
6372
6337
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6373
6338
  # sord warn - boolish is probably not a type, but using anyway
6374
6339
  # sord warn - boolish wasn't able to be resolved to a constant in this project
6375
- # @sg-ignore Checkoff::SelectorClasses::Common::NameStartsWithPFunctionEvaluator#evaluate
6376
- # return type could not be inferred
6377
- #
6378
6340
  # _@param_ `resource`
6379
6341
  #
6380
6342
  # _@param_ `prefix`
@@ -6389,8 +6351,6 @@ module Checkoff
6389
6351
 
6390
6352
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6391
6353
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6392
- # @sg-ignore
6393
- #
6394
6354
  # _@param_ `_resource`
6395
6355
  sig { params(_resource: T.any(Asana::Resources::Task, Asana::Resources::Project)).returns(String) }
6396
6356
  def evaluate(_resource); end
@@ -6403,10 +6363,10 @@ module Checkoff
6403
6363
  # _@param_ `custom_fields`
6404
6364
  #
6405
6365
  # _@param_ `_kwargs`
6406
- 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 }
6407
6367
  def initialize(selector:, custom_fields:, **_kwargs); end
6408
6368
 
6409
- 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)) }
6410
6370
  attr_reader :selector
6411
6371
 
6412
6372
  sig { returns(Checkoff::CustomFields) }
@@ -6424,8 +6384,6 @@ module Checkoff
6424
6384
  def matches?; end
6425
6385
 
6426
6386
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6427
- # @sg-ignore
6428
- #
6429
6387
  # _@param_ `resource`
6430
6388
  sig { params(resource: Asana::Resources::Project).returns(T.nilable(String)) }
6431
6389
  def evaluate(resource); end
@@ -6439,8 +6397,6 @@ module Checkoff
6439
6397
  def matches?; end
6440
6398
 
6441
6399
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6442
- # @sg-ignore
6443
- #
6444
6400
  # _@param_ `project`
6445
6401
  #
6446
6402
  # _@param_ `period` — - :now_or_before or :this_week
@@ -6456,10 +6412,6 @@ module Checkoff
6456
6412
  def matches?; end
6457
6413
 
6458
6414
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6459
- # @sg-ignore
6460
- #
6461
- # @sg-ignore
6462
- #
6463
6415
  # _@param_ `project`
6464
6416
  #
6465
6417
  # _@param_ `portfolio_name`
@@ -6491,7 +6443,7 @@ module Checkoff
6491
6443
  # _@param_ `_kwargs`
6492
6444
  sig do
6493
6445
  params(
6494
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6446
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6495
6447
  projects: Checkoff::Projects,
6496
6448
  portfolios: Checkoff::Portfolios,
6497
6449
  workspaces: Checkoff::Workspaces,
@@ -6500,7 +6452,7 @@ module Checkoff
6500
6452
  end
6501
6453
  def initialize(selector:, projects:, portfolios:, workspaces:, **_kwargs); end
6502
6454
 
6503
- sig { returns([Symbol, T::Array[T.untyped]]) }
6455
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6504
6456
  attr_reader :selector
6505
6457
 
6506
6458
  sig { returns(Checkoff::Projects) }
@@ -6524,8 +6476,6 @@ module Checkoff
6524
6476
  def matches?; end
6525
6477
 
6526
6478
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6527
- # @sg-ignore
6528
- #
6529
6479
  # _@param_ `section`
6530
6480
  sig { params(section: Asana::Resources::Section).returns(T::Boolean) }
6531
6481
  def evaluate(section); end
@@ -6539,8 +6489,6 @@ module Checkoff
6539
6489
  def matches?; end
6540
6490
 
6541
6491
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6542
- # @sg-ignore
6543
- #
6544
6492
  # _@param_ `section`
6545
6493
  sig { params(section: Asana::Resources::Section).returns(T::Boolean) }
6546
6494
  def evaluate(section); end
@@ -6558,7 +6506,7 @@ module Checkoff
6558
6506
  # _@param_ `kwargs`
6559
6507
  sig do
6560
6508
  params(
6561
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6509
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6562
6510
  sections: Checkoff::Sections,
6563
6511
  client: Asana::Client,
6564
6512
  kwargs: T::Hash[T.untyped, T.untyped]
@@ -6566,7 +6514,7 @@ module Checkoff
6566
6514
  end
6567
6515
  def initialize(selector:, sections:, client:, **kwargs); end
6568
6516
 
6569
- sig { returns([Symbol, T::Array[T.untyped]]) }
6517
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6570
6518
  attr_reader :selector
6571
6519
 
6572
6520
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -6586,13 +6534,10 @@ module Checkoff
6586
6534
  sig { params(_index: Integer).returns(T::Boolean) }
6587
6535
  def evaluate_arg?(_index); end
6588
6536
 
6589
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6590
6537
  sig { returns(T::Boolean) }
6591
6538
  def matches?; end
6592
6539
 
6593
6540
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6594
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6595
- #
6596
6541
  # _@param_ `_task`
6597
6542
  #
6598
6543
  # _@param_ `_args`
@@ -6602,7 +6547,7 @@ module Checkoff
6602
6547
  # _@param_ `object`
6603
6548
  #
6604
6549
  # _@param_ `fn_name`
6605
- 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) }
6606
6551
  def fn?(object, fn_name); end
6607
6552
 
6608
6553
  # Concrete subclasses each declare their own initialize with their
@@ -6642,7 +6587,6 @@ module Checkoff
6642
6587
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6643
6588
  def finer(message = nil, &block); end
6644
6589
 
6645
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6646
6590
  sig { returns(Symbol) }
6647
6591
  def log_level; end
6648
6592
  end
@@ -6791,8 +6735,8 @@ end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze, T.untyped
6791
6735
  sig { returns(T::Hash[T.untyped, T.untyped]) }
6792
6736
  def initializer_kwargs; end
6793
6737
 
6794
- # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6795
- 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) }
6796
6740
  attr_reader :item
6797
6741
 
6798
6742
  sig { returns(Checkoff::Sections) }
@@ -6835,7 +6779,6 @@ module Logging
6835
6779
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6836
6780
  def finer(message = nil, &block); end
6837
6781
 
6838
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6839
6782
  sig { returns(Symbol) }
6840
6783
  def log_level; end
6841
6784
  end
@@ -6856,11 +6799,11 @@ module Asana
6856
6799
  # Public: The base resource class which provides some sugar over common
6857
6800
  # resource functionality.
6858
6801
  class Resource
6859
- sig { returns(T::Hash[T.untyped, T.untyped]) }
6802
+ sig { returns(T::Hash[String, Object]) }
6860
6803
  def marshal_dump; end
6861
6804
 
6862
6805
  # _@param_ `data`
6863
- sig { params(data: T::Hash[T.untyped, T.untyped]).void }
6806
+ sig { params(data: T::Hash[String, Object]).void }
6864
6807
  def marshal_load(data); end
6865
6808
  end
6866
6809
  end