ecoportal-api-graphql 1.3.16 → 2.2.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 (482) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +746 -6
  3. data/LICENSE +21 -21
  4. data/README.md +24 -24
  5. data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
  6. data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
  7. data/lib/ecoportal/api/common/graphql/client.rb +69 -69
  8. data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
  9. data/lib/ecoportal/api/common/graphql/http_client.rb +85 -2
  10. data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -54
  11. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -49
  12. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -188
  13. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
  14. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -295
  15. data/lib/ecoportal/api/common/graphql/model/diffable/leaf_diff_service.rb +97 -0
  16. data/lib/ecoportal/api/common/graphql/model/diffable.rb +1 -0
  17. data/lib/ecoportal/api/common/graphql/model.rb +17 -17
  18. data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
  19. data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
  20. data/lib/ecoportal/api/common/graphql.rb +16 -16
  21. data/lib/ecoportal/api/common.graphql.rb +8 -8
  22. data/lib/ecoportal/api/graphql/base/action.rb +1 -1
  23. data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
  24. data/lib/ecoportal/api/graphql/base/action_event.rb +23 -0
  25. data/lib/ecoportal/api/graphql/base/action_event_page.rb +16 -0
  26. data/lib/ecoportal/api/graphql/base/activity.rb +38 -0
  27. data/lib/ecoportal/api/graphql/base/activity_log.rb +38 -0
  28. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +13 -8
  29. data/lib/ecoportal/api/graphql/base/auth_log.rb +24 -0
  30. data/lib/ecoportal/api/graphql/base/authorization_result.rb +20 -0
  31. data/lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb +17 -5
  32. data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
  33. data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
  34. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -16
  35. data/lib/ecoportal/api/graphql/base/field.rb +12 -12
  36. data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
  37. data/lib/ecoportal/api/graphql/base/file_container.rb +12 -4
  38. data/lib/ecoportal/api/graphql/base/location_classification_type.rb +2 -0
  39. data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
  40. data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
  41. data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
  42. data/lib/ecoportal/api/graphql/base/location_structure.rb +3 -0
  43. data/lib/ecoportal/api/graphql/base/minimal_dashboard.rb +25 -0
  44. data/lib/ecoportal/api/graphql/base/organization.rb +2 -0
  45. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -9
  46. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -18
  47. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -29
  48. data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +26 -3
  49. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +1 -1
  50. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -23
  51. data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +47 -8
  52. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -24
  53. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +6 -3
  54. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -8
  55. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -9
  56. data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +50 -12
  57. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -17
  58. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -26
  59. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -9
  60. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -17
  61. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -9
  62. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -21
  63. data/lib/ecoportal/api/graphql/base/page/data_field.rb +12 -18
  64. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +51 -0
  65. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -15
  66. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -48
  67. data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
  68. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -39
  69. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -27
  70. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -30
  71. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -34
  72. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -35
  73. data/lib/ecoportal/api/graphql/base/permissions.rb +15 -0
  74. data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
  75. data/lib/ecoportal/api/graphql/base/person_member_changelog.rb +23 -0
  76. data/lib/ecoportal/api/graphql/base/preset_view.rb +136 -1
  77. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -23
  78. data/lib/ecoportal/api/graphql/base/register.rb +6 -1
  79. data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
  80. data/lib/ecoportal/api/graphql/base/template/change_log_entry.rb +118 -0
  81. data/lib/ecoportal/api/graphql/base/template.rb +2 -0
  82. data/lib/ecoportal/api/graphql/base.rb +9 -0
  83. data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
  84. data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +10 -0
  85. data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
  86. data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
  87. data/lib/ecoportal/api/graphql/builder/page.rb +0 -16
  88. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -84
  89. data/lib/ecoportal/api/graphql/builder/register.rb +49 -49
  90. data/lib/ecoportal/api/graphql/builder/template.rb +46 -0
  91. data/lib/ecoportal/api/graphql/builder/template_builder.rb +21 -2
  92. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -23
  93. data/lib/ecoportal/api/graphql/compat/pages.rb +7 -2
  94. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -84
  95. data/lib/ecoportal/api/graphql/compat/response.rb +14 -0
  96. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -33
  97. data/lib/ecoportal/api/graphql/compat.rb +17 -17
  98. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -71
  99. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -68
  100. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -60
  101. data/lib/ecoportal/api/graphql/concerns/threadable.rb +58 -0
  102. data/lib/ecoportal/api/graphql/concerns.rb +1 -0
  103. data/lib/ecoportal/api/graphql/connection/action.rb +1 -1
  104. data/lib/ecoportal/api/graphql/connection/action_category.rb +1 -1
  105. data/lib/ecoportal/api/graphql/connection/activity.rb +11 -0
  106. data/lib/ecoportal/api/graphql/connection/activity_log.rb +11 -0
  107. data/lib/ecoportal/api/graphql/connection/auth_log.rb +11 -0
  108. data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +1 -1
  109. data/lib/ecoportal/api/graphql/connection/minimal_dashboard.rb +11 -0
  110. data/lib/ecoportal/api/graphql/connection/page.rb +1 -1
  111. data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +1 -1
  112. data/lib/ecoportal/api/graphql/connection/person_member.rb +1 -1
  113. data/lib/ecoportal/api/graphql/connection/person_member_changelog.rb +11 -0
  114. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -11
  115. data/lib/ecoportal/api/graphql/connection/preview_page.rb +1 -1
  116. data/lib/ecoportal/api/graphql/connection/template_change_log.rb +19 -0
  117. data/lib/ecoportal/api/graphql/connection.rb +6 -0
  118. data/lib/ecoportal/api/graphql/diff/change.rb +7 -2
  119. data/lib/ecoportal/api/graphql/diff/command_synthesizer.rb +19 -1
  120. data/lib/ecoportal/api/graphql/diff/pairing/signals.rb +21 -1
  121. data/lib/ecoportal/api/graphql/diff/version_diff.rb +13 -6
  122. data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
  123. data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
  124. data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
  125. data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
  126. data/lib/ecoportal/api/graphql/error.rb +12 -12
  127. data/lib/ecoportal/api/graphql/file_upload/client.rb +199 -140
  128. data/lib/ecoportal/api/graphql/file_upload.rb +10 -10
  129. data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
  130. data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
  131. data/lib/ecoportal/api/graphql/fragment/activity.rb +84 -0
  132. data/lib/ecoportal/api/graphql/fragment/activity_log.rb +75 -0
  133. data/lib/ecoportal/api/graphql/fragment/auth_log.rb +29 -0
  134. data/lib/ecoportal/api/graphql/fragment/authorization_result.rb +14 -0
  135. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
  136. data/lib/ecoportal/api/graphql/fragment/location_node.rb +1 -0
  137. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
  138. data/lib/ecoportal/api/graphql/fragment/minimal_dashboard.rb +31 -0
  139. data/lib/ecoportal/api/graphql/fragment/page.rb +1 -0
  140. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +23 -0
  141. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -15
  142. data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
  143. data/lib/ecoportal/api/graphql/fragment/permissions.rb +98 -0
  144. data/lib/ecoportal/api/graphql/fragment/person_member_changelog.rb +33 -0
  145. data/lib/ecoportal/api/graphql/fragment/template_change_log.rb +102 -0
  146. data/lib/ecoportal/api/graphql/fragment.rb +8 -0
  147. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
  148. data/lib/ecoportal/api/graphql/helpers.rb +10 -10
  149. data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
  150. data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
  151. data/lib/ecoportal/api/graphql/input/action/update.rb +12 -0
  152. data/lib/ecoportal/api/graphql/input/action.rb +14 -14
  153. data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
  154. data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
  155. data/lib/ecoportal/api/graphql/input/contractor_entity/manager_settings.rb +20 -0
  156. data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +6 -27
  157. data/lib/ecoportal/api/graphql/input/contractor_entity.rb +1 -0
  158. data/lib/ecoportal/api/graphql/input/date_range.rb +16 -0
  159. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -16
  160. data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
  161. data/lib/ecoportal/api/graphql/input/location_structure/apply_commands.rb +2 -2
  162. data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
  163. data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
  164. data/lib/ecoportal/api/graphql/input/location_structure/draft/add_commands.rb +2 -2
  165. data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
  166. data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
  167. data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
  168. data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
  169. data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
  170. data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +21 -13
  171. data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
  172. data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
  173. data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
  174. data/lib/ecoportal/api/graphql/input/location_structure/update_command.rb +6 -2
  175. data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
  176. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -14
  177. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -13
  178. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -13
  179. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -18
  180. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -13
  181. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -13
  182. data/lib/ecoportal/api/graphql/input/page/review_task.rb +27 -14
  183. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -14
  184. data/lib/ecoportal/api/graphql/input/page.rb +26 -26
  185. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -18
  186. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -16
  187. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +17 -2
  188. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -14
  189. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -18
  190. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -15
  191. data/lib/ecoportal/api/graphql/input/register.rb +13 -13
  192. data/lib/ecoportal/api/graphql/input/search.rb +13 -13
  193. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -234
  194. data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
  195. data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
  196. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -18
  197. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -18
  198. data/lib/ecoportal/api/graphql/input/workflow_command/add_checklist_field_item.rb +19 -0
  199. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -18
  200. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -18
  201. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -18
  202. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -18
  203. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +10 -9
  204. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -18
  205. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -23
  206. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -18
  207. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -18
  208. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -18
  209. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -18
  210. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -18
  211. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -18
  212. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -18
  213. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -18
  214. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -18
  215. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -23
  216. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -18
  217. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -18
  218. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +25 -19
  219. data/lib/ecoportal/api/graphql/input/workflow_command/add_smart_fill_config.rb +23 -0
  220. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +3 -2
  221. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -18
  222. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -18
  223. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -18
  224. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -18
  225. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -18
  226. data/lib/ecoportal/api/graphql/input/workflow_command/add_viewable_field.rb +45 -0
  227. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -18
  228. data/lib/ecoportal/api/graphql/input/workflow_command/archive_public_config.rb +19 -0
  229. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -18
  230. data/lib/ecoportal/api/graphql/input/workflow_command/create_public_config.rb +19 -0
  231. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -18
  232. data/lib/ecoportal/api/graphql/input/workflow_command/edit_checklist_field_item.rb +19 -0
  233. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -18
  234. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -18
  235. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +17 -2
  236. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +21 -18
  237. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -19
  238. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -19
  239. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -18
  240. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -18
  241. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -18
  242. data/lib/ecoportal/api/graphql/input/workflow_command/edit_public_config.rb +19 -0
  243. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -18
  244. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -18
  245. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -18
  246. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -18
  247. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -22
  248. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -18
  249. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +23 -19
  250. data/lib/ecoportal/api/graphql/input/workflow_command/edit_smart_fill_config.rb +21 -0
  251. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -18
  252. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -18
  253. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -18
  254. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_advanced_settings.rb +19 -0
  255. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_basic_settings.rb +32 -0
  256. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_container_uid.rb +45 -0
  257. data/lib/ecoportal/api/graphql/input/workflow_command/{edit_page_creator_permissions.rb → edit_template_creator_permissions.rb} +3 -2
  258. data/lib/ecoportal/api/graphql/input/workflow_command/edit_template_descriptions.rb +19 -0
  259. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -18
  260. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -18
  261. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/action_list.rb +31 -0
  262. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +28 -24
  263. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +9 -1
  264. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +15 -2
  265. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/file.rb +21 -0
  266. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -20
  267. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +3 -2
  268. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -24
  269. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +27 -3
  270. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +9 -2
  271. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +3 -2
  272. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +3 -2
  273. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -20
  274. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -25
  275. data/lib/ecoportal/api/graphql/input/workflow_command/manage_copy_page_configuration.rb +47 -0
  276. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +3 -2
  277. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -18
  278. data/lib/ecoportal/api/graphql/input/workflow_command/move_viewable_field.rb +33 -0
  279. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -18
  280. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -18
  281. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -18
  282. data/lib/ecoportal/api/graphql/input/workflow_command/remove_checklist_field_item.rb +19 -0
  283. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -18
  284. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -18
  285. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -18
  286. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -18
  287. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -18
  288. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -18
  289. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -18
  290. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -18
  291. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -18
  292. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -18
  293. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -18
  294. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -18
  295. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -18
  296. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -18
  297. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -18
  298. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -18
  299. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -18
  300. data/lib/ecoportal/api/graphql/input/workflow_command/remove_smart_fill_config.rb +19 -0
  301. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -18
  302. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -18
  303. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -18
  304. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -18
  305. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -18
  306. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -18
  307. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -18
  308. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -18
  309. data/lib/ecoportal/api/graphql/input/workflow_command/remove_viewable_field.rb +21 -0
  310. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +3 -2
  311. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +3 -2
  312. data/lib/ecoportal/api/graphql/input/workflow_command.rb +46 -5
  313. data/lib/ecoportal/api/graphql/input.rb +1 -0
  314. data/lib/ecoportal/api/graphql/interface/base_page.rb +50 -3
  315. data/lib/ecoportal/api/graphql/interface/location_structure/command.rb +2 -1
  316. data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
  317. data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
  318. data/lib/ecoportal/api/graphql/interface.rb +11 -11
  319. data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -15
  320. data/lib/ecoportal/api/graphql/logic/base_query.rb +260 -193
  321. data/lib/ecoportal/api/graphql/logic/connection.rb +17 -0
  322. data/lib/ecoportal/api/graphql/logic/input.rb +127 -0
  323. data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
  324. data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
  325. data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
  326. data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
  327. data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
  328. data/lib/ecoportal/api/graphql/logic.rb +18 -18
  329. data/lib/ecoportal/api/graphql/model/account.rb +15 -15
  330. data/lib/ecoportal/api/graphql/model/action.rb +22 -22
  331. data/lib/ecoportal/api/graphql/model/action_event.rb +14 -0
  332. data/lib/ecoportal/api/graphql/model/action_event_page.rb +10 -0
  333. data/lib/ecoportal/api/graphql/model/activity.rb +14 -0
  334. data/lib/ecoportal/api/graphql/model/activity_log.rb +31 -0
  335. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -10
  336. data/lib/ecoportal/api/graphql/model/auth_log.rb +11 -0
  337. data/lib/ecoportal/api/graphql/model/authorization_result.rb +12 -0
  338. data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
  339. data/lib/ecoportal/api/graphql/model/field.rb +10 -10
  340. data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
  341. data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
  342. data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
  343. data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
  344. data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
  345. data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
  346. data/lib/ecoportal/api/graphql/model/minimal_dashboard.rb +14 -0
  347. data/lib/ecoportal/api/graphql/model/organization.rb +36 -0
  348. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -14
  349. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
  350. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
  351. data/lib/ecoportal/api/graphql/model/page/phased.rb +17 -0
  352. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
  353. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -21
  354. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -20
  355. data/lib/ecoportal/api/graphql/model/permissions.rb +179 -0
  356. data/lib/ecoportal/api/graphql/model/person_member.rb +7 -0
  357. data/lib/ecoportal/api/graphql/model/person_member_changelog.rb +15 -0
  358. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -10
  359. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -10
  360. data/lib/ecoportal/api/graphql/model/register.rb +10 -10
  361. data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
  362. data/lib/ecoportal/api/graphql/model/template/change_log_entry.rb +19 -0
  363. data/lib/ecoportal/api/graphql/model/template.rb +4 -1
  364. data/lib/ecoportal/api/graphql/model/user.rb +14 -14
  365. data/lib/ecoportal/api/graphql/model.rb +9 -0
  366. data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
  367. data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
  368. data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
  369. data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
  370. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +21 -11
  371. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +26 -11
  372. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -13
  373. data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
  374. data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
  375. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
  376. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update_manager_settings.rb +37 -0
  377. data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +1 -0
  378. data/lib/ecoportal/api/graphql/mutation/file_container/upload.rb +78 -0
  379. data/lib/ecoportal/api/graphql/mutation/file_container.rb +15 -0
  380. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
  381. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
  382. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
  383. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
  384. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
  385. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
  386. data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
  387. data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
  388. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +1 -1
  389. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -40
  390. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +1 -1
  391. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -50
  392. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +1 -1
  393. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -43
  394. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +1 -1
  395. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +1 -1
  396. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +1 -1
  397. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +1 -1
  398. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -40
  399. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +1 -1
  400. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -40
  401. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -28
  402. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -35
  403. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +1 -1
  404. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -37
  405. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -35
  406. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -15
  407. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -35
  408. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +1 -1
  409. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -35
  410. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -14
  411. data/lib/ecoportal/api/graphql/mutation/template/update_related_page.rb +79 -0
  412. data/lib/ecoportal/api/graphql/mutation/template.rb +1 -0
  413. data/lib/ecoportal/api/graphql/mutation.rb +1 -1
  414. data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
  415. data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
  416. data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
  417. data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
  418. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -12
  419. data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
  420. data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
  421. data/lib/ecoportal/api/graphql/payload/contractor_entity/manager_settings.rb +20 -0
  422. data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
  423. data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +1 -0
  424. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +2 -2
  425. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +2 -2
  426. data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
  427. data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
  428. data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
  429. data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
  430. data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
  431. data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
  432. data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
  433. data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
  434. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +1 -1
  435. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -13
  436. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -13
  437. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -13
  438. data/lib/ecoportal/api/graphql/payload/page/draft.rb +1 -1
  439. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +1 -1
  440. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -13
  441. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -13
  442. data/lib/ecoportal/api/graphql/payload/preset_view.rb +1 -1
  443. data/lib/ecoportal/api/graphql/payload/register.rb +1 -1
  444. data/lib/ecoportal/api/graphql/payload/template/update_related_page.rb +15 -0
  445. data/lib/ecoportal/api/graphql/payload/template.rb +1 -0
  446. data/lib/ecoportal/api/graphql/payload/upload.rb +12 -0
  447. data/lib/ecoportal/api/graphql/payload.rb +1 -0
  448. data/lib/ecoportal/api/graphql/query/action.rb +33 -33
  449. data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
  450. data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
  451. data/lib/ecoportal/api/graphql/query/activity_logs.rb +78 -0
  452. data/lib/ecoportal/api/graphql/query/auth_logs.rb +51 -0
  453. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
  454. data/lib/ecoportal/api/graphql/query/dashboard_search.rb +57 -0
  455. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -76
  456. data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
  457. data/lib/ecoportal/api/graphql/query/location_structure.rb +2 -0
  458. data/lib/ecoportal/api/graphql/query/location_structures.rb +2 -0
  459. data/lib/ecoportal/api/graphql/query/page.rb +6 -1
  460. data/lib/ecoportal/api/graphql/query/page_activities.rb +56 -0
  461. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -47
  462. data/lib/ecoportal/api/graphql/query/pages.rb +59 -59
  463. data/lib/ecoportal/api/graphql/query/permissions.rb +35 -0
  464. data/lib/ecoportal/api/graphql/query/person_member_changelogs.rb +53 -0
  465. data/lib/ecoportal/api/graphql/query/person_members.rb +76 -0
  466. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +1 -1
  467. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -83
  468. data/lib/ecoportal/api/graphql/query/template_change_log.rb +118 -0
  469. data/lib/ecoportal/api/graphql/query/templates.rb +53 -53
  470. data/lib/ecoportal/api/graphql/query.rb +8 -0
  471. data/lib/ecoportal/api/graphql_version.rb +1 -1
  472. data/lib/ecoportal/api-graphql.rb +10 -10
  473. metadata +82 -19
  474. data/lib/ecoportal/api/common/graphql/CLAUDE.md +0 -36
  475. data/lib/ecoportal/api/common/graphql/model/CLAUDE.md +0 -28
  476. data/lib/ecoportal/api/graphql/CLAUDE.md +0 -37
  477. data/lib/ecoportal/api/graphql/base/CLAUDE.md +0 -50
  478. data/lib/ecoportal/api/graphql/builder/CLAUDE.md +0 -65
  479. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +0 -28
  480. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +0 -36
  481. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +0 -40
  482. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +0 -13
@@ -3,7 +3,7 @@ module Ecoportal
3
3
  class GraphQL
4
4
  module Connection
5
5
  class PersonMemberConnection < Logic::Connection
6
- class_resolver :node_class, Model::PersonMember
6
+ nodes_of Model::PersonMember
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,11 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Connection
5
+ class PersonMemberChangelog < Logic::Connection
6
+ nodes_of Model::PersonMemberChangelog
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,11 +1,11 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Connection
5
- class PresetView < Logic::Connection
6
- class_resolver :item_class, 'Ecoportal::API::GraphQL::Model::PresetView'
7
- end
8
- end
9
- end
10
- end
11
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Connection
5
+ class PresetView < Logic::Connection
6
+ class_resolver :item_class, 'Ecoportal::API::GraphQL::Model::PresetView'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -3,7 +3,7 @@ module Ecoportal
3
3
  class GraphQL
4
4
  module Connection
5
5
  class PreviewPage < Logic::Connection
6
- class_resolver :node_class, 'Ecoportal::API::GraphQL::Model::PreviewPage'
6
+ nodes_of 'Ecoportal::API::GraphQL::Model::PreviewPage'
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,19 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Connection
5
+ # `Template.commands` — a `PagesWorkflowCommandInterfaceConnection` carrying
6
+ # `totalCount` (added by `Types::CustomConnections::BaseConnection`), `pageInfo`
7
+ # and `nodes`.
8
+ #
9
+ # ★ A nil connection here means NOT PERMITTED, not "no changes" — see
10
+ # `Base::Template::ChangeLogEntry` for the two access caveats.
11
+ class TemplateChangeLog < Logic::Connection
12
+ # `nodes_of` (not `class_resolver :node_class`) — see Logic::Connection for why the
13
+ # shared dynamic collection poisons sibling connections otherwise.
14
+ nodes_of Model::Template::ChangeLogEntry
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -15,3 +15,9 @@ require_relative 'connection/page'
15
15
  require_relative 'connection/preview_page'
16
16
  require_relative 'connection/preset_view'
17
17
  require_relative 'connection/pages_workflow_command'
18
+ require_relative 'connection/activity'
19
+ require_relative 'connection/activity_log'
20
+ require_relative 'connection/auth_log'
21
+ require_relative 'connection/person_member_changelog'
22
+ require_relative 'connection/minimal_dashboard'
23
+ require_relative 'connection/template_change_log'
@@ -23,13 +23,18 @@ module Ecoportal
23
23
  # that parent_id alone cannot carry. Set for an ADDED :field (parent_id = its section id,
24
24
  # owner_id = its stage id) because addField requires BOTH sectionId and stageId (both
25
25
  # NON_NULL in the schema). nil for every other kind/op.
26
+ #
27
+ # value: for an ADDED :option, the select option's `value` (the schema's addSelectFieldOption
28
+ # requires it — see AddSelectFieldOptionInput, backend authority). Read from the source doc's
29
+ # option.value (VersionDiff#index_options); nil when the source doc did not carry one. NEVER
30
+ # defaulted to label/weight by the synthesiser — see CommandSynthesizer#option_command.
26
31
  Change = Struct.new(:op, :kind, :id, :label, :path, :attribute, :before, :after, :parent_id,
27
- :by_type, :owner_id, keyword_init: true) do
32
+ :by_type, :owner_id, :value, keyword_init: true) do
28
33
  def to_h
29
34
  {
30
35
  op: op, kind: kind, id: id, label: label, path: path,
31
36
  attribute: attribute, before: before, after: after, parent_id: parent_id,
32
- by_type: by_type, owner_id: owner_id
37
+ by_type: by_type, owner_id: owner_id, value: value
33
38
  }.compact
34
39
  end
35
40
 
@@ -277,13 +277,31 @@ module Ecoportal
277
277
 
278
278
  field_ref = ref(field_id)
279
279
  case change.op
280
- when :added then build(:addSelectFieldOption, data_field_id: field_ref, label: change.label)
280
+ when :added then add_option(change, field_ref)
281
281
  when :removed then build(:removeSelectFieldOption, data_field_id: field_ref, option_id: change.id)
282
282
  when :changed then edit_option(change, field_ref)
283
283
  else unsupported!(change)
284
284
  end
285
285
  end
286
286
 
287
+ # addSelectFieldOption requires `value` (backend: AddSelectFieldOptionInput, required: true
288
+ # — a real, distinct field from label/weight; see OptionType#value). NEVER default it to
289
+ # the label/weight (a numeric select field stores `value` as a number, so a label stand-in
290
+ # would silently persist wrong data). When the source doc's option carried no `value`
291
+ # (Change#value nil — see VersionDiff#index_options), raise loudly instead of guessing.
292
+ def add_option(change, field_ref)
293
+ if change.value.nil?
294
+ raise ArgumentError,
295
+ "CommandSynthesizer: cannot build addSelectFieldOption for option " \
296
+ "'#{change.label}' (field #{field_ref}) — Change#value is nil. The source doc's " \
297
+ "option is missing `value` (VersionDiff#index_options reads it from " \
298
+ "option['value']); supply it on the source doc, or on the Change directly when " \
299
+ "hand-assembling one."
300
+ end
301
+
302
+ build(:addSelectFieldOption, data_field_id: field_ref, label: change.label, value: change.value)
303
+ end
304
+
287
305
  def edit_option(change, field_id)
288
306
  case change.attribute
289
307
  when 'label' then build(:editSelectFieldOption, data_field_id: field_id, option_id: change.id, label: change.after)
@@ -25,13 +25,33 @@ module Ecoportal
25
25
  # MISMATCH scores 0 rather than vetoing (the field may have been re-purposed keeping its
26
26
  # genome, or genome may be absent on newer field types). Returns nil when neither side
27
27
  # carries a genome — the signal simply does not apply and is excluded from the average.
28
+ #
29
+ # LINEAGE (verified live 2026-08-05, same-org backup restore of a full template): a
30
+ # restore does NOT equal-copy the signature — it APPENDS one segment to it, for every
31
+ # membrane AND force (e.g. `2zwxkb6gns` → `2zwxkb6gns53jp`, `ktnrya` → `ktnrya877l`;
32
+ # 28/28 fields + 4/4 forces followed the rule). So an ancestor's signature is a strict
33
+ # PREFIX of its descendant's, and equality-only scoring would give the exact
34
+ # cross-object case this engine exists for (UAT backup → PROD restore) a 0.0 — worse
35
+ # than no signal. Prefix ancestry therefore scores just below an exact match.
28
36
  def genome(source, target)
29
37
  a = source['genomeSignature']
30
38
  b = target['genomeSignature']
31
39
  return nil if blank?(a) && blank?(b)
32
40
  return 0.0 if blank?(a) || blank?(b)
41
+ return 1.0 if a == b
33
42
 
34
- a == b ? 1.0 : 0.0
43
+ lineage?(a, b) ? 0.9 : 0.0
44
+ end
45
+
46
+ # True when one signature is a strict prefix of the other (restore/copy appends a
47
+ # lineage segment — see #genome). Direction is unknowable at a pairing call (either
48
+ # side may be the older document), so both directions count. Very short signatures
49
+ # are rejected as ancestry evidence — a trivial prefix can collide by chance.
50
+ def lineage?(sig_a, sig_b)
51
+ short, long = [sig_a.to_s, sig_b.to_s].minmax_by(&:length)
52
+ return false if short.length < 4
53
+
54
+ short != long && long.start_with?(short)
35
55
  end
36
56
 
37
57
  # Field type (__typename) equality. A type change is a strong DISQUALIFIER for a data
@@ -91,8 +91,11 @@ module Ecoportal
91
91
  # addStageSection.stageId), threading through a placeholder when the parent is created in
92
92
  # the same batch. nil (default) means no parent id is known/recorded — the historical
93
93
  # behaviour, unchanged.
94
- def diff_index(kind, before_idx, after_idx, label:, path:, parent: nil, owner: nil, &compare)
95
- procs = { label: label, path: path, parent: parent, owner: owner }
94
+ # `value:` (optional proc) is recorded on ADDED changes only — currently used for :option,
95
+ # whose addSelectFieldOption command requires the source doc's option.value (see
96
+ # Change#value). nil (default) means the kind has no `value` concept.
97
+ def diff_index(kind, before_idx, after_idx, label:, path:, parent: nil, owner: nil, value: nil, &compare)
98
+ procs = { label: label, path: path, parent: parent, owner: owner, value: value }
96
99
  removed = (before_idx.keys - after_idx.keys).map { |id| removed_change(kind, id, before_idx[id], procs) }
97
100
  added = (after_idx.keys - before_idx.keys).map { |id| added_change(kind, id, after_idx[id], procs) }
98
101
  matched = (before_idx.keys & after_idx.keys).flat_map { |id| Array(compare.call(id, before_idx[id], after_idx[id])) }
@@ -105,7 +108,8 @@ module Ecoportal
105
108
 
106
109
  def added_change(kind, id, info, procs)
107
110
  Change.new(op: :added, kind: kind, id: id, label: procs[:label].call(info), path: procs[:path].call(info),
108
- parent_id: procs[:parent]&.call(info), owner_id: procs[:owner]&.call(info))
111
+ parent_id: procs[:parent]&.call(info), owner_id: procs[:owner]&.call(info),
112
+ value: procs[:value]&.call(info))
109
113
  end
110
114
 
111
115
  def stage_changes
@@ -153,7 +157,7 @@ module Ecoportal
153
157
 
154
158
  def options_diff(field_id, path, before_field, after_field)
155
159
  diff_index(:option, index_options(before_field), index_options(after_field),
156
- label: ->(o) { o[:label] }, path: ->(_o) { path }) do |k, b, a|
160
+ label: ->(o) { o[:label] }, path: ->(_o) { path }, value: ->(o) { o[:value] }) do |k, b, a|
157
161
  cmp = []
158
162
  cmp << changed(:option, k, a[:label], path, 'label', b[:label], a[:label], field_id) if b[:label] != a[:label]
159
163
  cmp << changed(:option, k, a[:label], path, 'weight', b[:weight], a[:weight], field_id) if b[:weight] != a[:weight]
@@ -294,13 +298,16 @@ module Ecoportal
294
298
  end
295
299
 
296
300
  # Options keyed by id when present, else by value (primary) / name (auxiliary) — the
297
- # correct select-option identity (NOT genome).
301
+ # correct select-option identity (NOT genome). `value` is carried through separately from
302
+ # `label` (they are distinct schema fields — OptionType#value vs #label/#name) so an ADDED
303
+ # option's Change can supply the real value addSelectFieldOption requires, never a
304
+ # label/weight stand-in.
298
305
  def index_options(field)
299
306
  Array(field['options']).each_with_object({}) do |o, h|
300
307
  next unless o.is_a?(Hash)
301
308
 
302
309
  key = o['id'] || o['value'] || o['label'] || o['name']
303
- h[key] = { label: o['label'] || o['name'] || o['value'], weight: o['weight'] }
310
+ h[key] = { label: o['label'] || o['name'] || o['value'], weight: o['weight'], value: o['value'] }
304
311
  end
305
312
  end
306
313
 
@@ -1,51 +1,51 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Error
5
- class LocationsError < Logic::BaseModel
6
- module FetchNested
7
- def locations_error_doc
8
- return unless locations_error?
9
-
10
- if loc_err_conflicting_ids?
11
- {
12
- conflictingIds: loc_err_conflicting_ids.doc
13
- }
14
- elsif validationErrors?
15
- {
16
- validationErrors: validationErrors.doc
17
- }
18
- end
19
- end
20
-
21
- def locations_error?
22
- return false if error.nil?
23
-
24
- !error.empty?
25
- end
26
-
27
- def loc_err_conflicting_ids?
28
- loc_err_conflicting_ids.any?
29
- end
30
-
31
- def validationErrors?
32
- validationErrors.any?
33
- end
34
-
35
- def loc_err_conflicting_ids
36
- return [] unless (err = error)
37
-
38
- err.conflictingIds || []
39
- end
40
-
41
- def validationErrors
42
- return [] unless (err = error)
43
-
44
- err.validationErrors || []
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Error
5
+ class LocationsError < Logic::BaseModel
6
+ module FetchNested
7
+ def locations_error_doc
8
+ return unless locations_error?
9
+
10
+ if loc_err_conflicting_ids?
11
+ {
12
+ conflictingIds: loc_err_conflicting_ids.doc
13
+ }
14
+ elsif validationErrors?
15
+ {
16
+ validationErrors: validationErrors.doc
17
+ }
18
+ end
19
+ end
20
+
21
+ def locations_error?
22
+ return false if error.nil?
23
+
24
+ !error.empty?
25
+ end
26
+
27
+ def loc_err_conflicting_ids?
28
+ loc_err_conflicting_ids.any?
29
+ end
30
+
31
+ def validationErrors?
32
+ validationErrors.any?
33
+ end
34
+
35
+ def loc_err_conflicting_ids
36
+ return [] unless (err = error)
37
+
38
+ err.conflictingIds || []
39
+ end
40
+
41
+ def validationErrors
42
+ return [] unless (err = error)
43
+
44
+ err.validationErrors || []
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,28 +1,28 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Error
5
- class LocationsError < Logic::BaseModel
6
- read_only!
7
-
8
- passthrough :type, :message
9
- passarray :conflictingIds
10
- embeds_many :validationErrors, klass: LocationsValidationError
11
-
12
- def empty?
13
- return false unless conflictingIds.empty?
14
-
15
- validationErrors.empty?
16
- end
17
-
18
- def any?
19
- !empty?
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
-
27
-
28
- require_relative 'locations_error/fetch_nested'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Error
5
+ class LocationsError < Logic::BaseModel
6
+ read_only!
7
+
8
+ passthrough :type, :message
9
+ passarray :conflictingIds
10
+ embeds_many :validationErrors, klass: LocationsValidationError
11
+
12
+ def empty?
13
+ return false unless conflictingIds.empty?
14
+
15
+ validationErrors.empty?
16
+ end
17
+
18
+ def any?
19
+ !empty?
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+
28
+ require_relative 'locations_error/fetch_nested'
@@ -1,20 +1,20 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Error
5
- class LocationsValidationError < Logic::BaseModel
6
- read_only!
7
-
8
- passthrough :error, :message, :property
9
-
10
- def empty?
11
- return false unless error.nil?
12
- return false unless message.nil?
13
-
14
- property.nil?
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Error
5
+ class LocationsValidationError < Logic::BaseModel
6
+ read_only!
7
+
8
+ passthrough :error, :message, :property
9
+
10
+ def empty?
11
+ return false unless error.nil?
12
+ return false unless message.nil?
13
+
14
+ property.nil?
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,28 +1,28 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Error
5
- class ValidationErrors < Logic::BaseModel
6
- include Enumerable
7
-
8
- passthrough :details
9
- passarray :fullMessages
10
-
11
- def empty?
12
- count < 1
13
- end
14
-
15
- def any?
16
- !empty?
17
- end
18
-
19
- def each(&block)
20
- return to_enum(:each) unless block
21
-
22
- fullMessages.each(&block)
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Error
5
+ class ValidationErrors < Logic::BaseModel
6
+ include Enumerable
7
+
8
+ passthrough :details
9
+ passarray :fullMessages
10
+
11
+ def empty?
12
+ count < 1
13
+ end
14
+
15
+ def any?
16
+ !empty?
17
+ end
18
+
19
+ def each(&block)
20
+ return to_enum(:each) unless block
21
+
22
+ fullMessages.each(&block)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,12 +1,12 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Error
5
- end
6
- end
7
- end
8
- end
9
-
10
- require_relative 'error/locations_validation_error'
11
- require_relative 'error/validation_errors'
12
- require_relative 'error/locations_error'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Error
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'error/locations_validation_error'
11
+ require_relative 'error/validation_errors'
12
+ require_relative 'error/locations_error'