ecoportal-api-graphql 1.3.4 → 1.3.9

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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/.ai-assistance/bridge/CLAUDE.md +338 -0
  3. data/.ai-assistance/bridge/archive/.gitkeep +0 -0
  4. data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.inbox.md +29 -0
  5. data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.outbox.md +18 -0
  6. data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.inbox.md +42 -0
  7. data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.outbox.md +115 -0
  8. data/.ai-assistance/bridge/context/gemini-review-prompt.txt +48 -0
  9. data/.ai-assistance/bridge/context/gemini-review-response.md +104 -0
  10. data/.ai-assistance/bridge/context/project.md +42 -0
  11. data/.ai-assistance/bridge/inbox/.gitkeep +0 -0
  12. data/.ai-assistance/bridge/outbox/.gitkeep +0 -0
  13. data/.ai-assistance/bridge/outbox/request-for-standards-discovery.md +48 -0
  14. data/.ai-assistance/bridge/queue/.gitkeep +1 -0
  15. data/.ai-assistance/capabilities/CLAUDE.md +27 -0
  16. data/.ai-assistance/capabilities/assumptions-log.md +80 -0
  17. data/.ai-assistance/capabilities/code.md +47 -0
  18. data/.ai-assistance/capabilities/connectors.md +37 -0
  19. data/.ai-assistance/capabilities/cowork.md +55 -0
  20. data/.ai-assistance/code/OVERVIEW.md +155 -0
  21. data/.ai-assistance/code/data_fields.md +242 -0
  22. data/.ai-assistance/code/dependencies.md +151 -0
  23. data/.ai-assistance/code/diff_as_input.md +234 -0
  24. data/.ai-assistance/code/diff_service_deep_dive.md +192 -0
  25. data/.ai-assistance/code/ecoPortal_architecture/00_overview_and_index.md +55 -0
  26. data/.ai-assistance/code/ecoPortal_architecture/01_terminology_dictionary.md +181 -0
  27. data/.ai-assistance/code/ecoPortal_architecture/02_data_model.md +192 -0
  28. data/.ai-assistance/code/ecoPortal_architecture/03_api_layers.md +147 -0
  29. data/.ai-assistance/code/ecoPortal_architecture/04_graphql_queries_mutations.md +277 -0
  30. data/.ai-assistance/code/ecoPortal_architecture/05_page_workflows.md +200 -0
  31. data/.ai-assistance/code/ecoPortal_architecture/06_search_and_filters.md +228 -0
  32. data/.ai-assistance/code/ecoPortal_architecture/07_data_fields.md +197 -0
  33. data/.ai-assistance/code/ecoPortal_architecture/08_stages_sections.md +243 -0
  34. data/.ai-assistance/code/ecoPortal_architecture/09_people_contractors_locations.md +196 -0
  35. data/.ai-assistance/code/ecoPortal_architecture/10_forces_workflow_builder.md +132 -0
  36. data/.ai-assistance/code/ecoPortal_architecture/11_integration_gems.md +187 -0
  37. data/.ai-assistance/code/ecoPortal_architecture/12_ai_documentation_sources_gaps.md +236 -0
  38. data/.ai-assistance/code/ecoPortal_architecture/13_ai_infrastructure.md +183 -0
  39. data/.ai-assistance/code/ecoportal_schema_reference.md +240 -0
  40. data/.ai-assistance/code/graphql_domain_knowledge.md +230 -0
  41. data/.ai-assistance/code/refactoring/datafield-readwrite-shape-asymmetry.md +71 -0
  42. data/.ai-assistance/code/refactoring/opportunities.md +251 -0
  43. data/.ai-assistance/code/schema_analysis.md +321 -0
  44. data/.ai-assistance/code/search_filters.md +868 -0
  45. data/.ai-assistance/code/spec_coverage.md +73 -0
  46. data/.ai-assistance/code/workflow-command-guide.md +438 -0
  47. data/.ai-assistance/code/workflow-space.md +353 -0
  48. data/.ai-assistance/conventions/CLAUDE.md +30 -0
  49. data/.ai-assistance/conventions/code-working-tree-protocol.md +199 -0
  50. data/.ai-assistance/conventions/gitignore-rules.md +42 -0
  51. data/.ai-assistance/conventions/permission-guidance.md +120 -0
  52. data/.ai-assistance/integrations/README.md +70 -0
  53. data/.ai-assistance/integrations/gitkraken-mcp.md +107 -0
  54. data/.ai-assistance/integrations/gitlab-mcp.md +123 -0
  55. data/.ai-assistance/integrations/local-git.md +60 -0
  56. data/.ai-assistance/local_paths.example.md +17 -0
  57. data/.ai-assistance/projects/TODO.md +97 -0
  58. data/.ai-assistance/projects/api-v2-to-graphql-migration/DECISIONS.md +168 -0
  59. data/.ai-assistance/projects/api-v2-to-graphql-migration/INTENT.md +60 -0
  60. data/.ai-assistance/projects/api-v2-to-graphql-migration/TODO.md +267 -0
  61. data/.ai-assistance/projects/api-v2-to-graphql-migration/UPSTREAM.md +53 -0
  62. data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/csv-template-pipeline-design.md +102 -0
  63. data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/cutover-usecase-gap-audit.md +139 -0
  64. data/.ai-assistance/projects/dynamic-model-generation/INTENT.md +93 -0
  65. data/.ai-assistance/projects/eco-helpers-compat/INTENT.md +244 -0
  66. data/.ai-assistance/projects/eco-helpers-compat/MIGRATION_GUIDE.md +266 -0
  67. data/.ai-assistance/projects/eco-helpers-compat/TODO.md +86 -0
  68. data/.ai-assistance/projects/ecoportal-api-v2-doublemodel-review/INTENT.md +101 -0
  69. data/.ai-assistance/projects/graphql-agent/GAP_ANALYSIS.md +177 -0
  70. data/.ai-assistance/projects/ooze-graphql-native-migration/DECISIONS.md +161 -0
  71. data/.ai-assistance/projects/ooze-graphql-native-migration/INTENT.md +125 -0
  72. data/.ai-assistance/projects/ooze-graphql-native-migration/RISKS.md +126 -0
  73. data/.ai-assistance/projects/ooze-graphql-native-migration/TODO.md +256 -0
  74. data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-06-30-cutover-workflow-deep-review.md +122 -0
  75. data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-07-01-forces-via-workflow-commands-miss-rca.md +148 -0
  76. data/.ai-assistance/projects/page-model/DECISIONS.md +245 -0
  77. data/.ai-assistance/projects/page-model/TODO.md +190 -0
  78. data/.ai-assistance/projects/search-filter-builder/INTENT.md +107 -0
  79. data/.ai-assistance/projects/search-filter-builder/TODO.md +131 -0
  80. data/.ai-assistance/projects/template-maintenance/DESIGN.md +134 -0
  81. data/.ai-assistance/projects/workflow-space/TODO.md +213 -0
  82. data/.ai-assistance/reinstall-claude-desktop-windows.md +136 -0
  83. data/.ai-assistance/scripts/CLAUDE.md +150 -0
  84. data/.ai-assistance/scripts/bridge-init.sh +86 -0
  85. data/.ai-assistance/scripts/bridge-status.sh +44 -0
  86. data/.ai-assistance/scripts/capabilities-check.ts +104 -0
  87. data/.ai-assistance/scripts/check-outbox.sh +43 -0
  88. data/.ai-assistance/scripts/dep_graph.rb +91 -0
  89. data/.ai-assistance/scripts/lock-acquire.sh +103 -0
  90. data/.ai-assistance/scripts/lock-multi.sh +124 -0
  91. data/.ai-assistance/scripts/lock-queue.sh +94 -0
  92. data/.ai-assistance/scripts/setup-mcps.test.ts +188 -0
  93. data/.ai-assistance/scripts/setup-mcps.ts +234 -0
  94. data/.ai-assistance/scripts/task-complete.ts +74 -0
  95. data/.ai-assistance/scripts/task-create.ts +75 -0
  96. data/.ai-assistance/scripts/task-read.ts +125 -0
  97. data/.ai-assistance/scripts/token-logger.js +220 -0
  98. data/.ai-assistance/scripts/token-report.ts +158 -0
  99. data/.ai-assistance/scripts/token-session-start.js +66 -0
  100. data/.ai-assistance/skills/ai-instructions/SKILL.md +48 -0
  101. data/.ai-assistance/skills/code-specs/SKILL.md +69 -0
  102. data/.ai-assistance/skills/corporate-policies/SKILL.md +201 -0
  103. data/.ai-assistance/skills/dep-graph/SKILL.md +139 -0
  104. data/.ai-assistance/skills/ep-ai-manager/SKILL.md +417 -0
  105. data/.ai-assistance/skills/gemini-assist/SKILL.md +63 -0
  106. data/.ai-assistance/skills/gemini-assist/gemini-mcp-server.js +205 -0
  107. data/.ai-assistance/skills/gemini-assist/gemini_ask.py +1 -0
  108. data/.ai-assistance/skills/gemini-assist/gemini_ask.rb +240 -0
  109. data/.ai-assistance/skills/gemini-assist/prompts/cycle_end_review.txt +25 -0
  110. data/.ai-assistance/skills/graphql-schema-analysis/SKILL.md +261 -0
  111. data/.ai-assistance/skills/project-cycle/SKILL.md +177 -0
  112. data/.ai-assistance/skills/refactor/SKILL.md +62 -0
  113. data/.ai-assistance/skills/rubocop/SKILL.md +93 -0
  114. data/.ai-assistance/skills/ruby-scripting/SKILL.md +215 -0
  115. data/.ai-assistance/skills/spec-generation/SKILL.md +72 -0
  116. data/.ai-assistance/standards-version.json +21 -0
  117. data/.ai-assistance/token-budget.json +32 -0
  118. data/.ai-assistance/version.json +39 -0
  119. data/.claude/settings.json +146 -0
  120. data/.env.example +18 -0
  121. data/.gitattributes +15 -0
  122. data/.gitignore +13 -0
  123. data/.rubocop.yml +121 -97
  124. data/CHANGELOG.md +673 -470
  125. data/CLAUDE.md +232 -0
  126. data/Gemfile +30 -6
  127. data/Rakefile +90 -38
  128. data/docs/worklog.md +574 -0
  129. data/ecoportal-api-graphql.gemspec +40 -40
  130. data/lib/ecoportal/api/common/graphql/CLAUDE.md +36 -0
  131. data/lib/ecoportal/api/common/graphql/auth_service.rb +12 -14
  132. data/lib/ecoportal/api/common/graphql/client.rb +11 -3
  133. data/lib/ecoportal/api/common/graphql/http_client.rb +117 -29
  134. data/lib/ecoportal/api/common/graphql/model/CLAUDE.md +28 -0
  135. data/lib/ecoportal/api/common/graphql/model/as_input.rb +8 -5
  136. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +3 -1
  137. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +31 -23
  138. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +54 -1
  139. data/lib/ecoportal/api/common/graphql.rb +1 -1
  140. data/lib/ecoportal/api/graphql/CLAUDE.md +37 -0
  141. data/lib/ecoportal/api/graphql/base/CLAUDE.md +50 -0
  142. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -0
  143. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -0
  144. data/lib/ecoportal/api/graphql/base/force/binding.rb +19 -0
  145. data/lib/ecoportal/api/graphql/base/force/binding_collection.rb +62 -0
  146. data/lib/ecoportal/api/graphql/base/force/collection.rb +47 -0
  147. data/lib/ecoportal/api/graphql/base/force.rb +65 -0
  148. data/lib/ecoportal/api/graphql/base/kickstand/job.rb +17 -0
  149. data/lib/ecoportal/api/graphql/base/kickstand/workflow.rb +18 -0
  150. data/lib/ecoportal/api/graphql/base/kickstand.rb +13 -0
  151. data/lib/ecoportal/api/graphql/base/page/basic.rb +38 -0
  152. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -0
  153. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -0
  154. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -0
  155. data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +112 -0
  156. data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +28 -0
  157. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +54 -0
  158. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -0
  159. data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +25 -0
  160. data/lib/ecoportal/api/graphql/base/page/data_field/gauge.rb +19 -0
  161. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -0
  162. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +24 -0
  163. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -0
  164. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -0
  165. data/lib/ecoportal/api/graphql/base/page/data_field/number.rb +20 -0
  166. data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +35 -0
  167. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -0
  168. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -0
  169. data/lib/ecoportal/api/graphql/base/page/data_field/select.rb +41 -0
  170. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -0
  171. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -0
  172. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -0
  173. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -0
  174. data/lib/ecoportal/api/graphql/base/page/data_field.rb +137 -0
  175. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +68 -0
  176. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -0
  177. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -0
  178. data/lib/ecoportal/api/graphql/base/page/section_collection.rb +79 -0
  179. data/lib/ecoportal/api/graphql/base/page.rb +7 -1
  180. data/lib/ecoportal/api/graphql/base/pages_workflow/action_type_selection.rb +17 -0
  181. data/lib/ecoportal/api/graphql/base/pages_workflow/callback_type.rb +28 -0
  182. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change.rb +17 -0
  183. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change_message.rb +15 -0
  184. data/lib/ecoportal/api/graphql/base/pages_workflow/command_es_change.rb +17 -0
  185. data/lib/ecoportal/api/graphql/base/pages_workflow/command_interface.rb +36 -0
  186. data/lib/ecoportal/api/graphql/base/pages_workflow/email_config.rb +18 -0
  187. data/lib/ecoportal/api/graphql/base/pages_workflow/escalation_level.rb +19 -0
  188. data/lib/ecoportal/api/graphql/base/pages_workflow/in_system_config.rb +16 -0
  189. data/lib/ecoportal/api/graphql/base/pages_workflow/mailbox_field_selection.rb +17 -0
  190. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -0
  191. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -0
  192. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/create_page.rb +21 -0
  193. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -0
  194. data/lib/ecoportal/api/graphql/base/pages_workflow/people_field_selection.rb +17 -0
  195. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -0
  196. data/lib/ecoportal/api/graphql/base/pages_workflow/register_field.rb +17 -0
  197. data/lib/ecoportal/api/graphql/base/pages_workflow/task_config_selection.rb +17 -0
  198. data/lib/ecoportal/api/graphql/base/pages_workflow/time_delay_config.rb +16 -0
  199. data/lib/ecoportal/api/graphql/base/pages_workflow/trigger_interface.rb +26 -0
  200. data/lib/ecoportal/api/graphql/base/pages_workflow/triggers/conditional_logic.rb +17 -0
  201. data/lib/ecoportal/api/graphql/base/pages_workflow/user_selection.rb +16 -0
  202. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -0
  203. data/lib/ecoportal/api/graphql/base/preset_view.rb +17 -0
  204. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -0
  205. data/lib/ecoportal/api/graphql/base/register.rb +18 -0
  206. data/lib/ecoportal/api/graphql/base.rb +26 -15
  207. data/lib/ecoportal/api/graphql/builder/CLAUDE.md +65 -0
  208. data/lib/ecoportal/api/graphql/builder/kickstand.rb +73 -0
  209. data/lib/ecoportal/api/graphql/builder/page.rb +210 -0
  210. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -0
  211. data/lib/ecoportal/api/graphql/builder/register.rb +49 -0
  212. data/lib/ecoportal/api/graphql/builder/template.rb +80 -0
  213. data/lib/ecoportal/api/graphql/builder.rb +7 -3
  214. data/lib/ecoportal/api/graphql/compat/filter_translator.rb +107 -0
  215. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -0
  216. data/lib/ecoportal/api/graphql/compat/pages.rb +212 -0
  217. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -0
  218. data/lib/ecoportal/api/graphql/compat/response.rb +35 -0
  219. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -0
  220. data/lib/ecoportal/api/graphql/compat/stage_collection.rb +70 -0
  221. data/lib/ecoportal/api/graphql/compat/stage_view.rb +76 -0
  222. data/lib/ecoportal/api/graphql/compat.rb +17 -0
  223. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -0
  224. data/lib/ecoportal/api/graphql/concerns/deprecation.rb +20 -0
  225. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -0
  226. data/lib/ecoportal/api/graphql/concerns/page_compat.rb +51 -0
  227. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -0
  228. data/lib/ecoportal/api/graphql/concerns.rb +14 -0
  229. data/lib/ecoportal/api/graphql/connection/page.rb +11 -0
  230. data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +13 -0
  231. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -0
  232. data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -0
  233. data/lib/ecoportal/api/graphql/connection.rb +8 -4
  234. data/lib/ecoportal/api/graphql/error.rb +3 -3
  235. data/lib/ecoportal/api/graphql/file_upload/client.rb +181 -0
  236. data/lib/ecoportal/api/graphql/file_upload.rb +10 -0
  237. data/lib/ecoportal/api/graphql/fragment/action.rb +1 -1
  238. data/lib/ecoportal/api/graphql/fragment/action_category.rb +1 -1
  239. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +1 -1
  240. data/lib/ecoportal/api/graphql/fragment/force.rb +30 -0
  241. data/lib/ecoportal/api/graphql/fragment/location_draft.rb +2 -2
  242. data/lib/ecoportal/api/graphql/fragment/location_node.rb +1 -1
  243. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +1 -1
  244. data/lib/ecoportal/api/graphql/fragment/page.rb +85 -0
  245. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +395 -0
  246. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -0
  247. data/lib/ecoportal/api/graphql/fragment/pages_workflow.rb +172 -0
  248. data/lib/ecoportal/api/graphql/fragment/pagination.rb +1 -1
  249. data/lib/ecoportal/api/graphql/fragment.rb +37 -71
  250. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +1 -0
  251. data/lib/ecoportal/api/graphql/helpers.rb +1 -1
  252. data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +25 -0
  253. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -0
  254. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -0
  255. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -0
  256. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -0
  257. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -0
  258. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -0
  259. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -0
  260. data/lib/ecoportal/api/graphql/input/page/review_task.rb +14 -0
  261. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -0
  262. data/lib/ecoportal/api/graphql/input/page/update.rb +140 -0
  263. data/lib/ecoportal/api/graphql/input/page.rb +26 -0
  264. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -0
  265. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -0
  266. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -0
  267. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -0
  268. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -0
  269. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -0
  270. data/lib/ecoportal/api/graphql/input/register.rb +13 -0
  271. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -0
  272. data/lib/ecoportal/api/graphql/input/search_conf.rb +367 -0
  273. data/lib/ecoportal/api/graphql/input/variable_binding.rb +20 -0
  274. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -0
  275. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -0
  276. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -0
  277. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -0
  278. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -0
  279. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -0
  280. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +18 -0
  281. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -0
  282. data/lib/ecoportal/api/graphql/input/workflow_command/add_gauge_field_stop.rb +19 -0
  283. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -0
  284. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -0
  285. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -0
  286. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -0
  287. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -0
  288. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -0
  289. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -0
  290. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -0
  291. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -0
  292. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -0
  293. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -0
  294. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -0
  295. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -0
  296. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +19 -0
  297. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -0
  298. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -0
  299. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -0
  300. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -0
  301. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -0
  302. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -0
  303. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -0
  304. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -0
  305. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -0
  306. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -0
  307. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -0
  308. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -0
  309. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +18 -0
  310. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -0
  311. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -0
  312. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -0
  313. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -0
  314. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -0
  315. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -0
  316. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -0
  317. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -0
  318. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -0
  319. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -0
  320. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -0
  321. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -0
  322. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -0
  323. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +19 -0
  324. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -0
  325. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -0
  326. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -0
  327. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -0
  328. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -0
  329. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +24 -0
  330. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -0
  331. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -0
  332. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -0
  333. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -0
  334. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -0
  335. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -0
  336. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -0
  337. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -0
  338. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -0
  339. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -0
  340. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -0
  341. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -0
  342. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -0
  343. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -0
  344. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -0
  345. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -0
  346. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -0
  347. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -0
  348. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -0
  349. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -0
  350. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -0
  351. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -0
  352. data/lib/ecoportal/api/graphql/input/workflow_command/remove_gauge_field_stop.rb +17 -0
  353. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_field_config.rb +17 -0
  354. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -0
  355. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -0
  356. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -0
  357. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -0
  358. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -0
  359. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -0
  360. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -0
  361. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -0
  362. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -0
  363. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -0
  364. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -0
  365. data/lib/ecoportal/api/graphql/input/workflow_command/remove_select_field_option.rb +17 -0
  366. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -0
  367. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -0
  368. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -0
  369. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -0
  370. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -0
  371. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -0
  372. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -0
  373. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -0
  374. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -0
  375. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -0
  376. data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -0
  377. data/lib/ecoportal/api/graphql/input.rb +15 -7
  378. data/lib/ecoportal/api/graphql/interface/base_page.rb +100 -58
  379. data/lib/ecoportal/api/graphql/interface/location_structure/nodes.rb +27 -28
  380. data/lib/ecoportal/api/graphql/logic/base_model.rb +2 -0
  381. data/lib/ecoportal/api/graphql/logic/base_query.rb +45 -2
  382. data/lib/ecoportal/api/graphql/logic/input.rb +15 -0
  383. data/lib/ecoportal/api/graphql/logic/mutation.rb +6 -1
  384. data/lib/ecoportal/api/graphql/logic/query_array.rb +1 -0
  385. data/lib/ecoportal/api/graphql/logic/query_connection.rb +2 -0
  386. data/lib/ecoportal/api/graphql/logic.rb +9 -9
  387. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -0
  388. data/lib/ecoportal/api/graphql/model/organization.rb +65 -52
  389. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -0
  390. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -0
  391. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -0
  392. data/lib/ecoportal/api/graphql/model/page/phased.rb +82 -0
  393. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -0
  394. data/lib/ecoportal/api/graphql/model/page.rb +6 -7
  395. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -0
  396. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -0
  397. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -0
  398. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -0
  399. data/lib/ecoportal/api/graphql/model/register.rb +10 -0
  400. data/lib/ecoportal/api/graphql/model/resource.rb +1 -1
  401. data/lib/ecoportal/api/graphql/model.rb +21 -13
  402. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -0
  403. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -0
  404. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -0
  405. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_jobs.rb +43 -0
  406. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_workflows.rb +43 -0
  407. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_job.rb +39 -0
  408. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_workflow.rb +39 -0
  409. data/lib/ecoportal/api/graphql/mutation/kickstand/start_job.rb +39 -0
  410. data/lib/ecoportal/api/graphql/mutation/kickstand/start_workflow.rb +39 -0
  411. data/lib/ecoportal/api/graphql/mutation/kickstand/stop_workflow.rb +39 -0
  412. data/lib/ecoportal/api/graphql/mutation/kickstand.rb +18 -0
  413. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +3 -3
  414. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +2 -2
  415. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +2 -2
  416. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +3 -3
  417. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +3 -3
  418. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -0
  419. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -0
  420. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +40 -0
  421. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -0
  422. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +40 -0
  423. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -0
  424. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +40 -0
  425. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +69 -0
  426. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +51 -0
  427. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +40 -0
  428. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -0
  429. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -0
  430. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -0
  431. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -0
  432. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -0
  433. data/lib/ecoportal/api/graphql/mutation/page/update_variable_bindings.rb +44 -0
  434. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -0
  435. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -0
  436. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +35 -0
  437. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -0
  438. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -0
  439. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -0
  440. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -0
  441. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -0
  442. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -0
  443. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -0
  444. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -0
  445. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -0
  446. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -0
  447. data/lib/ecoportal/api/graphql/mutation/template/create.rb +39 -0
  448. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -0
  449. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +43 -0
  450. data/lib/ecoportal/api/graphql/mutation/template/publish.rb +39 -0
  451. data/lib/ecoportal/api/graphql/mutation/template/unpublish.rb +39 -0
  452. data/lib/ecoportal/api/graphql/mutation/template/update.rb +43 -0
  453. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +43 -0
  454. data/lib/ecoportal/api/graphql/mutation/template.rb +18 -0
  455. data/lib/ecoportal/api/graphql/mutation.rb +11 -3
  456. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -0
  457. data/lib/ecoportal/api/graphql/payload/execute_workflow_commands.rb +36 -0
  458. data/lib/ecoportal/api/graphql/payload/force_commands.rb +31 -0
  459. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +36 -0
  460. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +36 -0
  461. data/lib/ecoportal/api/graphql/payload/kickstand/job.rb +13 -0
  462. data/lib/ecoportal/api/graphql/payload/kickstand/workflow.rb +13 -0
  463. data/lib/ecoportal/api/graphql/payload/kickstand.rb +15 -0
  464. data/lib/ecoportal/api/graphql/payload/location_structure/draft/create.rb +33 -34
  465. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +21 -0
  466. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -0
  467. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -0
  468. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -0
  469. data/lib/ecoportal/api/graphql/payload/page/draft.rb +13 -0
  470. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -0
  471. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -0
  472. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -0
  473. data/lib/ecoportal/api/graphql/payload/page/update_variable_bindings.rb +13 -0
  474. data/lib/ecoportal/api/graphql/payload/page.rb +19 -0
  475. data/lib/ecoportal/api/graphql/payload/preset_view.rb +11 -0
  476. data/lib/ecoportal/api/graphql/payload/register.rb +11 -0
  477. data/lib/ecoportal/api/graphql/payload/template/create.rb +13 -0
  478. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +13 -0
  479. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +13 -0
  480. data/lib/ecoportal/api/graphql/payload/template/publish.rb +13 -0
  481. data/lib/ecoportal/api/graphql/payload/template/unpublish.rb +13 -0
  482. data/lib/ecoportal/api/graphql/payload/template/update.rb +13 -0
  483. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +13 -0
  484. data/lib/ecoportal/api/graphql/payload/template.rb +18 -0
  485. data/lib/ecoportal/api/graphql/payload.rb +14 -3
  486. data/lib/ecoportal/api/graphql/query/action.rb +1 -1
  487. data/lib/ecoportal/api/graphql/query/action_categories.rb +2 -1
  488. data/lib/ecoportal/api/graphql/query/actions.rb +2 -2
  489. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +2 -1
  490. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -0
  491. data/lib/ecoportal/api/graphql/query/location_structure/draft.rb +2 -2
  492. data/lib/ecoportal/api/graphql/query/location_structure.rb +1 -1
  493. data/lib/ecoportal/api/graphql/query/location_structures.rb +1 -1
  494. data/lib/ecoportal/api/graphql/query/page.rb +45 -0
  495. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -0
  496. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +43 -0
  497. data/lib/ecoportal/api/graphql/query/pages.rb +59 -0
  498. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +59 -0
  499. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -0
  500. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -0
  501. data/lib/ecoportal/api/graphql/query/templates.rb +53 -0
  502. data/lib/ecoportal/api/graphql/query.rb +18 -7
  503. data/lib/ecoportal/api/graphql.rb +70 -2
  504. data/lib/ecoportal/api/graphql_version.rb +5 -5
  505. data/scripts/auto-worker-scheduler.sh +386 -0
  506. data/tests/contractor_entity_create.rb +19 -19
  507. data/tests/contractor_entity_udpate.rb +20 -20
  508. data/tests/dump_page_model.rb +74 -0
  509. data/tests/loc_structure_get.rb +1 -2
  510. data/tests/loc_structure_update.rb +51 -51
  511. data/tests/loc_structures_get.rb +15 -15
  512. data/tests/local_libs.rb +7 -7
  513. metadata +450 -11
data/CHANGELOG.md CHANGED
@@ -1,470 +1,673 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- ## [1.3.5] - 2025-09-xx
6
-
7
- ### Added
8
-
9
- ### Changed
10
-
11
- ### Fixed
12
-
13
- ## [1.3.4] - 2025-09-04
14
-
15
- ### Added
16
-
17
- - Command execution result: **added** command doc when there's a `results` error.
18
- - Payload improvements:
19
- - On `LocationsError.validationErrors`: fetch `property` property.
20
- - On **results**, `Command` always fetch `__typename` and the other properties.
21
-
22
- ### Changed
23
-
24
- - Changed base `error_doc`: **consistent property name**
25
-
26
- ### Fixed
27
-
28
- - Correct fetch on `ok` (sometimes it is `null`: that doesn't mean failed).
29
- - **Consistent order** on `error?` and `error_doc`.
30
- - `Draft`
31
- - **Overlapping** name `ConflictingIds` (vs `LocationsError.conflictingIds`)
32
- - **Wrong** include on `FetchNested`
33
-
34
- ## [1.3.3] - 2025-08-29
35
-
36
- ### Added
37
-
38
- - Better error handling
39
-
40
- ### Fixed
41
-
42
- - Unused parameter/variable `$includeArchivedNodes`
43
-
44
- ## [1.3.2] - 2025-08-19
45
-
46
- ### Added
47
-
48
- - `Mutation`: allow parameters other than **input**.
49
- - Location Structure `Draft` models
50
- - `Interface::LocationStructure::Nodes` for `LocationStructure` and `Draft::Structure`
51
- - `raw_response` as optional query parameter (for debugging)
52
- - `Logic::Input` (out of consistency)
53
- - Fragments:
54
- - `LocationDraft`
55
- - `LocationsError`
56
- - Query to include `draft` list when fetching an **RS**.
57
- - Location `Draft` queries:
58
- - `Draft#byId`
59
- - `Draft#create`
60
- - `Draft#delete`
61
- - `Draft#addCommands`
62
- - `Draft#publish`
63
- - `Draft#dropBadCommands`
64
- - Error tracking througout the payload models of location mutations
65
-
66
- ### Changed
67
-
68
- - Upgrade dependency (`ecoportal-api` **gem**).
69
- - Moved rescue on fragment definition to `#define` itself.
70
- - `NodeInterface` moved to `Interface::LocationStructure::Node`
71
- - Code: Shorten namespace referral.
72
- - Swap to `Logic::BaseModel`
73
- - `Mutation` to introduce `:input` required parameter by using parent class.
74
-
75
- ### Fixed
76
-
77
- - `QueryConnection`: bad code.
78
- - `conflictingIds` should be array.
79
-
80
- ## [1.3.1] - 2025-06-11
81
-
82
- ### Changed
83
-
84
- - upgraded gem dependencies
85
- - **Moded** `Ecoportal::API::GraphQL::Base::Model` to
86
- - > `Ecoportal::API::GraphQL::BaseModel`
87
- - **Added** `Interface::LocationNode`
88
- - **Added** `Interface::BasePage`
89
-
90
- ### Fixed
91
-
92
- - **Fragments**
93
- - `Action` fragment to use `PageUnion` (**upgrade**)
94
- - **Memoize** fragments.
95
- - Add what fragment failed in the **error**.
96
-
97
- ## [1.2.1] - 2025-05-16
98
-
99
- ### Changed
100
-
101
- - upgrade `ecoportal-api` gem
102
- - upgrade `ecoportal-api-v2` gem
103
-
104
- ## [1.1.1] - 2025-05-14
105
-
106
- ### Added
107
-
108
- - `MemberChanges` helpers for `Base::ContractorEntity`
109
- - Custom **Diff** logic that can be used in GraphQL content:
110
- - `Common::GraphQL::Model::Diffable::HashDiffNesting`
111
- - Reused from `HashDiffPatch` (`ecoportal-api-v2`):
112
- 1. It does not use `patch_ver`, but rather just `id` property alone.
113
- 2. The _operation_ property has been renamed to `api_operation` (to ensure no collisions). And the operation types are symbols, and renamed to: `:delete`, `:update` and `:create`. This can show up to be useful when, for instance, reusing the output of `#as_update` to generate actual input objects (i.e. `#as_input`) that feed some GraphQL query.
114
- 3. The _data_ property has been renamed to `change_data`.
115
- 4. `Hash` **keys** are of type `Symbol`.
116
- - `Common::GraphQL::Model::Diffable::DiffService`. In a GraphQL context, this aims to be able to implement a function called `#as_input` (equivalent to `#as_update`):
117
- 1. It uses the `HashDiffNesting` helpers.
118
- 2. It has capability to `ignore` certain keys.
119
- 3. It can calculate **diff** excluding nested models (i.e. those that are `root?` and, therefore, not part of the changed target model). This functionality is an optimization to `cascaded_callbacks` throughout the nested models.
120
-
121
- ### Changed
122
-
123
- - `Common::GraphQL::Model::Diffable` by using `Diffable::DiffService` (with `cascaded_callbacks` implementation).
124
- - `#as_update`
125
- - `#dirty?`
126
- - upgraded `ecoportal-api` gem
127
- - updraded `ecoportal-api-v2` gem
128
-
129
- ## [0.4.7] - 2025-04-02
130
-
131
- ### Added
132
-
133
- - `page.id` to Action linked resources.
134
-
135
- ## [0.4.6] - 2025-04-02
136
-
137
- ### Added
138
-
139
- - `Ecoportal::API::GraphQL::Logic::QueryConnection`
140
- - **Require** `default_connection_block` to child classes
141
- - This aims to **not** having have client code having to define the block for `#each`
142
-
143
- ### Changed
144
-
145
- - upgraded `ecoportal-api` gem
146
- - upgraded `ecoportal-api-v2` gem
147
-
148
- ## [0.4.5] - 2025-03-14
149
-
150
- ### Added
151
-
152
- - Query `actionCategories`
153
- - Mutation **create** `Action`
154
-
155
- ### Changed
156
-
157
- - `Action` model to have `locations` (**RS** upgrade)
158
-
159
- ## [0.4.4] - 2025-02-23
160
-
161
- ### Changed
162
-
163
- - Upgraded `ecoportal-api` gem (maintanance)
164
- - Upgraded `ecoportal-api-v2` gem (to provision `root!` class method)
165
- - Defined some models that hand on their own as `root!`
166
- - Refactored `Base::Model` by moving its loggic to `Common::GraphQL`
167
-
168
- ### Fixed
169
-
170
- - `Ecoportal::API::Common::GraphQL::HashHelpers`
171
- - Truly make the iterator generic
172
-
173
- ## [0.4.3] - 2024-11-21
174
-
175
- ### Changed
176
-
177
- - upgrade gems
178
- - `ecoportal-api`
179
- - `ecoportal-api-v2`
180
- - `Ecoportal::API::Common::GraphQL::HttpClient.new` ceased to default `version` to `v1` (now it defaults to `nil`)
181
-
182
- ## [0.4.2] - 2024-10-01
183
-
184
- ### Changed
185
-
186
- - upgrade gems
187
- - `ecoportal-api-v2`
188
- - add explicit dependency onto `ecoportal-api` gem (client)
189
-
190
- ## [0.4.1] - 2024-08-09
191
-
192
- ### Added
193
-
194
- - `ContractorEntity` added field `externalId`
195
-
196
- ### Changed
197
-
198
- - gem upgrade `ecoportal-api-v2`
199
-
200
- ## [0.4.0] - 2024-08-01
201
-
202
- ### Changed
203
-
204
- - require `ruby 3`
205
-
206
- ## [0.3.18] - 2024-05-16
207
-
208
- ### Fixed
209
-
210
- - `Ecoportal::API::GraphQL::Payload::LocationStructure::CommandExecutionResult`
211
- - Error is nullable
212
-
213
- ## [0.3.17] - 2024-05-14
214
-
215
- ### Fixed
216
-
217
- - `field_name` should add up to the path
218
-
219
- ## [0.3.16] - 2024-04-29
220
-
221
- ### Added
222
-
223
- - Exposed `graphql` `ContractorEntity` `destroy`
224
-
225
- ### Fixed
226
-
227
- - incorrect loading
228
-
229
- ### Changed
230
-
231
- - Input for ContractorEntity create moved as `update` (as it wasn't correct)
232
-
233
- ## [0.3.15] - 2024-04-13
234
-
235
- ### Added
236
-
237
- - `Ecoportal::API::GraphQL::Logic::BaseQuery`
238
- - `::base_path` class instance var.
239
- - query to retrieve `currentOrganization.classifications`
240
-
241
- ### Fixed
242
-
243
- - upgraded `ecoportal-api-v2` gem
244
-
245
- ## [0.3.14] - 2024-03-13
246
-
247
- ### Added
248
-
249
- - some benchmarking on
250
- 1. core graphql base `query`
251
- - `#parent_id` to location node model
252
-
253
- ### Changed
254
-
255
- - upgraded `ecoportal-v2-api` gem
256
-
257
- ### Fixed
258
-
259
- - Optimized `treeify` and locations structure class
260
-
261
- ## [0.3.13] - 2024-02-03
262
-
263
- ### Changed
264
-
265
- - upgrade `ecoportal-api-v2`
266
-
267
- ## [0.3.12] - 2024-01-27
268
-
269
- ### Added
270
-
271
- - Exposed `graphql` `Action` `update` and get a single `action`
272
-
273
- ## [0.3.11] - 2023-09-19
274
-
275
- ### Added
276
-
277
- - Exposed `graphql` `ContractorEntity` `create` and `update`
278
-
279
- ## [0.3.10] - 2023-08-12
280
-
281
- ### Fixed
282
-
283
- - `Ecopotal::API::GraphQL::Query::LocationStructure`
284
- - `query` in basic_block missed an explicitly declared parameter.
285
-
286
- ## [0.3.9] - 2023-08-03
287
-
288
- ### Added
289
-
290
- - `Ecoportal::API::GraphQL::Logic::BaseQuery`
291
- - Added support for **default** values.
292
-
293
- ## [0.3.8] - 2023-07-18
294
-
295
- ### Added
296
-
297
- - Integration for archiving actions.
298
- - `LocationNodeInterface` -> support for `classifications`
299
- - `Treeify` to dump more data per node (classifications)
300
-
301
- ### Fixed
302
-
303
- - Silenced waning messages when redefining `Fragment`s
304
-
305
- ## [0.3.7] - 2023-05-23
306
-
307
- ### Fixed
308
-
309
- - `Ecoportal::API::Common::GraphQL::Client` adjusted `read_timeout` and `write_timeout` to `90` seconds.
310
-
311
- ## [0.3.6] - 2023-04-17
312
-
313
- ### Changed
314
-
315
- - Softened max version of **gem** dependencies
316
-
317
- ### Fixed
318
-
319
- - `Ecoportal::API::GraphQL::Fragment#define` was not removing previous constants
320
- - Changed check method to be `::const_defined?`
321
-
322
- ## [0.3.5] - 2023-04-03
323
-
324
- ### Fixed
325
-
326
- - `Ecoportal::API::GraphQL::Helpers::LocationsTree#treeify`
327
- - Make it real id-case-insensitive (parents in lower case were being missed due to this)
328
-
329
- ## [0.3.4] - 2023-04-03
330
-
331
- ### Added
332
-
333
- - `Ecoportal::API::Common::GraphQL::AuthService`
334
- - `#session_token` added **token auto-renew** functionality (when token expires in less than 90 minutes)
335
- - `#session_token_renewed`
336
-
337
- ### Fixed
338
-
339
- - Enabled to specify `host` (other than `live.ecoportal.com`) by the user
340
-
341
- ## [0.3.3] - 2023-04-02
342
-
343
- ### Fixed
344
-
345
- - `Ecoportal::API::GraphQL::Base::LocationNode` **added** attribute `archivedToken`
346
-
347
- ## [0.3.2] - 2023-04-02
348
-
349
- ### Changed
350
-
351
- - `Ecoportal::API::GraphQL::Helpers::LocationsTree#treeify` added support for `archived_token`
352
-
353
- ## [0.3.1] - 2023-03-09
354
-
355
- ### Changed
356
-
357
- - Upgraded core gem dependency `ecoportal-api-v2`
358
-
359
- ## [0.2.3] - 2023-02-27
360
-
361
- ### Fixed
362
-
363
- - Typo in tests LocationsStructures... should read `locationStructures`
364
-
365
- ## [0.2.2] - 2023-02-24
366
-
367
- ### Fixed
368
-
369
- - Build gem correctly
370
-
371
- ## [0.2.1] - 2023-02-24
372
-
373
- ### Changed
374
-
375
- - Migrate from TagTrees to **reporting structures** (breaking change)
376
-
377
- ### Added
378
-
379
- - Basics for reporting structure mutations
380
-
381
- ## [0.1.11] - 2022-11-29
382
-
383
- ### Added
384
-
385
- - `Ecoportal::API::GraphQL::Base::Mutation`
386
- - Added `createContractorEntity`
387
-
388
- ### Changed
389
-
390
- - **upgraded** `graphlient` gem dependency (support for framents)
391
- - removed patch in this gem
392
- - Slight internal refactor of `Ecoportal::API::GraphQL::Base::Query`
393
- - Upgraded `ecoportal-api-v2` **gem** dependency
394
-
395
- ## [0.1.10] - 2022-09-29
396
-
397
- ### Changed
398
-
399
- - **upgraded** `ecoportal-api-v2` gem dependency
400
-
401
- ### Fixed
402
-
403
- - Remove debugging message
404
-
405
- ## [0.1.9] - 2022-09-26
406
-
407
- ### Added
408
-
409
- - `Ecoportal::API::GraphQL::Query::TagTree`
410
-
411
- ### Changed
412
-
413
- - **upgraded** `ecoportal-api-v2` gem dependency
414
- - added `Ecoportal::API::Common::GraphQL::QueryIntegration`
415
- - restructured `Ecoportal::API::GraphQL::Model::Organization` class
416
- - **Patch** on `Graphlient::Query` for fragments support (**pull request**: <https://github.com/ashkan18/graphlient/pull/94>)
417
-
418
- ## [0.1.8] - 2022-09-23
419
-
420
- ### Added
421
-
422
- - `currentOrganization.tagTrees` query
423
-
424
- ### Changed
425
-
426
- - **upgraded** `ecoportal-api-v2` gem dependency
427
- - Restructured the `Query` inheritance chain to make things simpler
428
-
429
- ## [0.1.6] - 2022-09-19
430
-
431
- ### Fixed
432
-
433
- - Call to **private** method `remove_const` in `Ecoportal::API::GraphQL::Fragment#define`
434
-
435
- ## [0.1.5] - 2022-09-19
436
-
437
- ### Added
438
-
439
- - Patch `GraphQL::Query#append_node` so we can use Fragments in blocks using `___` as start of the constant, and `__` for namespace separator
440
- - Issue/feature request: <https://github.com/ashkan18/graphlient/issues/93>
441
- - `Ecoportal::API::GraphQL::Fragment#define` provided that client scripts can create their own fragments in their own namespace
442
- - Exposed `Ecoportal::API::GraphQL#fragments`
443
- - It will always (re)define in the `Fragment` root namespace
444
-
445
- ## [0.1.4] - 2022-09-16
446
-
447
- ### Fixed
448
-
449
- - Able to inject connection block to `each`
450
- - Error handling delegated to parent class (`QueryConnection`)
451
- - Retrieve `id` on elements of `Array`
452
-
453
- ## [0.1.3] - 2022-09-15
454
-
455
- ### Fixed
456
-
457
- - Fixed circular reference to `org_id` in `Ecoportal::API::Common::GraphQL::Client`
458
-
459
- ## [0.1.2] - 2022-09-15
460
-
461
- ### Changed
462
-
463
- - `Ecoportal::API::GraphQL` addded `email` and `pass` parameters on initialization
464
- - This allows for integration in some client lib
465
-
466
- ## [0.1.0] - 2022-09-15
467
-
468
- ### Added
469
-
470
- - First commit with some basic structure
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [1.3.9] - 2026-07-02
6
+
7
+ APIv2→GraphQL cutover hardening (backwards-compatible). Live-validated on the maintained ooze
8
+ integrations (toocs-coding, cans-upsert).
9
+
10
+ ### Fixed
11
+
12
+ - **Faithful dry-run body** — `Compat::Pages#get_body` returns the SAME input `#update`/`#create`
13
+ would send (under the `'page'` key), incl. `dataFields.updates` (invisible to `page.as_update`
14
+ on phased pages). Create previews render as `CreateFromTemplateInput` (marker-based
15
+ `#new_draft?`) instead of mislabelling as updates.
16
+ - **Stage submit/sign-off carries `stageId`** — `Input::Page::Update.from_model` raises if a
17
+ submit/task is requested without a stage; `Compat::StageView` records the viewed stage on the
18
+ page; `compat_stage_id` resolves pinned → active(stage-view) current. People-field
19
+ permissions are stage-scoped, so a submit must name its stage.
20
+ - **`CrossReference#dirty?`** compares the reference-id SET vs `original_doc` no phantom
21
+ `referenceIds: []` clears (empty→empty / same→same is not dirty).
22
+ - **`Number`/`Gauge` blank → nil, never `0.0`** — an empty CSV cell no longer coerces to a real
23
+ zero. Shared `DataField#numeric_or_nil`.
24
+ - **`People` reader** falls back to the `people{id}` nodes when `peopleIds` is blank — an append
25
+ can't wipe existing people.
26
+ - **`Compat::Pages#create` resolves `templateId` from the get_new marker**
27
+ (`_compat_source_template_id`), matching the dry-run — fixes a live `templateId: null` failure.
28
+
29
+ ### Added
30
+
31
+ - **Exact-match register filter** `Compat::FilterTranslator` maps a v2 `type: 'exact_filter'`
32
+ (alias `'is_filter'`) → GraphQL `is_filter` (whole-value equality on a field's `.exact` keyword
33
+ subfield), deriving the `membranes.<type>` path. Fixes exact-id existence checks (partial
34
+ `match_filter` missed exact SKUs → duplicate pages). Note: case-insensitive, first-64-chars.
35
+ - **`Builder::Page#archive(clear_external_id:)`** — optionally blanks `externalId` (a separate
36
+ `updatePage`) before archiving, for cleanup of a failed/duplicate creation; default `false`
37
+ keeps it. externalId is the per-org, per-model integration pairing key.
38
+
39
+ ## [1.3.8] - 2026-06-12
40
+
41
+ ### Added
42
+
43
+ - **Template mutations** — full lifecycle for creating and updating workflow templates:
44
+ - `Mutation::Template::{Create,Update}` `createPageTemplate` / `updatePageTemplate` (both accept `WorkflowCommandInput` command bus)
45
+ - `Mutation::Template::{Publish,Unpublish}` — `publishTemplate` / `unpublishTemplate`
46
+ - `Mutation::Template::UpdateInformation` — update template `description`, `aiDescription`, `templateType`
47
+ - `Mutation::Template::{CreateRelatedPage,DestroyRelatedPage}` — manage template related-pages
48
+ - `Builder::Template` wired as `api.template`
49
+ - **`updateVariableBindings`** `Mutation::Page::UpdateVariableBindings` maps named force variable slots to data field IDs on a page; `Input::VariableBinding` value object
50
+ - **Kickstand job mutations** — `Mutation::Kickstand::{StartJob,FailJob,BulkUpdateJobs}`; `Builder::Kickstand` extended with `start_job`, `fail_job`, `bulk_update_jobs`
51
+
52
+ ## [1.3.7] - 2026-06-12
53
+
54
+ ### Added
55
+
56
+ - **PagesWorkflow space (W1–W5)**
57
+ - `Base::PagesWorkflow` + sub-model tree (`pages_workflow/`): `RegisterField`, `CallbackType`,
58
+ `OperationInterface`, `TriggerInterface`, and supporting types — read model for the
59
+ page-workflow configuration (`autoPageCreationEnabled`, `fields`, `stages`).
60
+ - `Model::PagesWorkflow` with class resolver.
61
+ - **Workflow command bus**: `Input::WorkflowCommandInput` covering ~80 command types under
62
+ `input/workflow_command/`. `Mutation::Page::ExecuteWorkflowCommands` +
63
+ `Payload::ExecuteWorkflowCommands`.
64
+ - Workflow fragments registered for assembly.
65
+ - _Note: the workflow command surface is volatile upstream — designed to absorb change._
66
+ - **Force model / ForceCompat**
67
+ - `Base::Force` (+ `force/` sub-models), Force fragment.
68
+ - `Mutation::Page::ExecuteForceCommands`, `Payload::ForceCommands`, `Query::PageWithForces`.
69
+ - **DataField type hierarchy (Phase E)**
70
+ - Full set of typed `Base::Page::DataField` subclasses: `PlainText`, `RichText`, `DateField`,
71
+ `Number`, `Gauge`, `People`, `Select`, `Checklist`, `TagField`, `Geo`, `Signature`,
72
+ `ContractorEntities`, `CrossReference`, `ImageGallery`, `FileField`, `Mailbox`,
73
+ `ActionsList`, `Law`, `AiSummary`, `Table`, `SmartFill`, dispatched via `TYPE_MAP`/`from_doc`.
74
+ - `DataField::Collection` — `dirty_inputs`, `dirty_additions`, `dirty_deletions`,
75
+ `add`, `mark_for_deletion`.
76
+ - **Register builder & models**
77
+ - `Builder::Register` (+ `register/preset_view`), `Model::Register`,
78
+ `Mutation::Register` (`create`/`update`/`destroy`), `Input::Register`, `Payload::Register`.
79
+ - **Preset views**
80
+ - `Model::PresetView`, `Mutation::PresetView` (`create`/`update`/`destroy`/`permission`),
81
+ `Query::RegisterPresetViews`, `Input::PresetView`, `Payload::PresetView`.
82
+ - **AI mutations**
83
+ - `Mutation::SmartFill` (`generate`/`submit_feedback`).
84
+ - `Mutation::AiSummary` (`generate`/`submit_feedback`), `Model::AiSummaryVersion`,
85
+ `Payload::AiSummaryGenerate`.
86
+ - **Review task & draft lifecycle mutations**
87
+ - Review tasks: `approve`/`reject`/`restart`/`undo`/`batch_update` (`Mutation::Page::*ReviewTask`),
88
+ `Payload::Page::ReviewTask`.
89
+ - Drafts: `Mutation::Page::CreateDraft`/`PublishDraft`/`DeleteDraft`, `Payload::Page::Draft`.
90
+ - Templates: `Mutation::Page::BuildFromTemplate`/`CreateFromTemplate` + payloads.
91
+ - **Queries**
92
+ - `Query::PageDelta` (+ `Base::DeltaResult`, `Input::DeltaInput`).
93
+ - `Query::RegisterPreviewPages` (+ `Base::PreviewPage`).
94
+ - `Query::FileUploadSignature` + file-upload helper.
95
+ - **`Input::SearchConf`** fluent/chainable filter DSL and `SearchConf.from_description`
96
+ (AI-assisted filter generation from natural language).
97
+ - **Compat layer for `eco-helpers`** — `Compat::Pages` (`#each` cursor-paginated full iteration),
98
+ `Compat::Registers`, `Compat::FilterTranslator`, `Compat::PageReference`,
99
+ `Compat::StageCollection`, `Compat::StageView`, `Compat::SearchResults`, `Compat::Response`.
100
+ - **Concerns** — `SnakeCamelAccess` (camelCase→snake_case delegation), `DataFieldAccess`,
101
+ `PageCompat`, `Deprecation`.
102
+ - `Payload::OkPayload` base payload.
103
+ - **Page read layer (Phase A)**
104
+ - `Fragment::PageFields` named fragment on `BasePageInterface` covering identity, state,
105
+ lifecycle, and location fields. Includes `__typename` for union dispatch.
106
+ - `Interface::BasePage` — added `passboolean :draft` and `passthrough :externalId`.
107
+ - `Base::Page::Basic < Interface::BasePage` — concrete basic page class.
108
+ - `Base::Page::Phased` `passarray :stages` (raw array until typed in Phase C).
109
+ - `Model::Page::Basic`, `Model::Page::Phased` concrete model classes with class resolvers.
110
+ - `Model::PageUnion` — factory module: dispatches `.new(doc)` to `Basic` or `Phased`
111
+ based on `__typename`. Used as `item_class` / `node_class` throughout.
112
+ - `Connection::Page < Logic::Connection` paginated page connection with `PageUnion` nodes.
113
+ - `Query::Page` (single page by ID), `Query::Pages` (paginated list), `Query::Templates`.
114
+ - `Model::Organization` wired `query :page`, `query :pages`, `query :templates`.
115
+ - **Page write layer (Phase B)**
116
+ - `Input::Page` maps `PageInput` fields; owns `PAGE_FIELD_KEYS` as single source of truth.
117
+ - `Input::Page::Update` maps `UpdatePageInput`; `from_model` builds the nested `page:`
118
+ sub-hash and always injects `patchVer` (a current `patchVer` must be fetched before update).
119
+ - `Input::Page::Archive`, `Input::Page::Unarchive`.
120
+ - `Mutation::Page::Update`/`Archive`/`Unarchive`, `Payload::Page::Update`/`Archive`/`Unarchive`
121
+ (all return a `PageUnion` item), `Builder::Page` (`update`/`archive`/`unarchive`),
122
+ `Ecoportal::API::GraphQL#page` top-level accessor.
123
+ - **Fragment infrastructure**
124
+ - `Fragment::Pages` sub-namespace with `CommonPageUnion` — customer-facing fragment covering
125
+ stages, sections, all 20 data field types, actions, files, and emails. Parametric via
126
+ `$content`, `$only_content`, `$fields`.
127
+ - `FragmentDefinitions.register_namespace(klass)` — cross-namespace fragment discovery without
128
+ polluting the parent `fragments` hash.
129
+ - `BaseQuery#assemble_fragments` resolves fragment spreads **recursively** (cycle-safe).
130
+ - **`as_input` / diff pipeline**
131
+ - `Common::GraphQL::Model::AsInput#as_input(target_class:)` — delegates to a specified
132
+ `Input` subclass for field reshaping (e.g. `IdDiffInput` for array fields).
133
+ - `Logic::Input.from_model` builds mutation input from a model diff; injects `patchVer`
134
+ and `clientMutationId`.
135
+ - `Input::ContractorEntity::Update.from_model` reshapes array fields
136
+ (`associatedPeopleIds`, `leadContractorIds`) into `IdDiffInput` format.
137
+
138
+ ### Changed
139
+
140
+ - **`Gemfile`** — override `graphlient` with the fork branch (GraphQL directives support).
141
+ - **DataField dirty detection** removed the per-field `@_dirty` flag in favour of
142
+ diff-based detection. `DataField` now uses a leaf-specific `DIFF_CLASS` (`LeafDiffService`)
143
+ so its `passarray` attributes are diffed inline instead of being stripped as cascaded keys.
144
+ - **AI generator** — compatibility with the Anthropic Ruby SDK 1.x.
145
+
146
+ ### Fixed
147
+
148
+ - **DataField array fields** (`Select`, `People`, `Checklist`, `ContractorEntities`,
149
+ `CrossReference`, `FileField`, `ImageGallery`) — were never reported dirty after a setter,
150
+ so `as_input` returned `nil`. `passarray` keys are *cascaded* attributes and the flat classic
151
+ diff strips them, expecting `diff_reduce` to re-add them by cascading into nested
152
+ `GraphQL::Model` children — but leaf-field arrays are plain hashes/strings, so they vanished.
153
+ Fixed with `DataField::LeafDiffService` (keeps cascaded keys) and by adding the missing
154
+ `array_ids` / `array_id_index` / `array_id_item` helpers to `HashDiffNesting`.
155
+ - **Live AI specs** — resilient to SSL / auth failures in offline environments (skip instead of error).
156
+ - **`HashDiffNesting#dig_path?`** — corrected to use `Hash#key?` rather than `respond_to?(:[])`,
157
+ preventing false positives on non-Hash objects.
158
+ - **`DiffService#classic_diff`** — now returns a flat changed-prop hash (no `api_operation` /
159
+ `change_data` wrapper keys). `as_input` / `as_update` return `nil` when there are no changes.
160
+ - **`assemble_fragments`** — fixed silent bug where a fragment referencing another fragment
161
+ (e.g. `PageFields → ...LocationNode`) would omit the referenced fragment from the query,
162
+ causing a server-side `unknown fragment` error.
163
+ - **`Fragment.assemble`** fixed silent bug where fragments defined in sub-namespaces
164
+ (e.g. `Fragment::Pages`) were never found, always returning empty.
165
+
166
+ ## [1.3.6] - 2026-06-05
167
+
168
+ ### Added
169
+
170
+ - **`HttpClient#execute`**: new HTTP dispatch method — POSTs `{ query, variables, operationName }` as
171
+ JSON to `/api/:org_id/graphql` and returns the parsed response hash.
172
+ - **`Common::GraphQL::ResponseError`**: typed exception raised when the GraphQL response body
173
+ contains an `errors` array.
174
+ - **`Fragment.assemble(*syms)`**: class method that returns concatenated named fragment definition
175
+ strings for the given symbols, ready to append to a query document before dispatch.
176
+ - **`Graphlient::Query#spread(name)`** _(graphlient fork)_: DSL helper that emits `...FragmentName`
177
+ in the query string. Replaces the `___Const` convention from graphql-client.
178
+ - **`Client#to_query_string(&block)`** _(graphlient fork)_: builds a full GraphQL query document
179
+ from the DSL block and returns a `String` without touching Faraday or HTTP.
180
+
181
+ ### Changed
182
+
183
+ - upgraded ecoportal upstream **gem** dependencies:
184
+ - `ecoportal-api`
185
+ - `ecoportal-api-v2`
186
+ - **`BaseQuery#graphql_query`**: wired to the new dispatch path — builds query string via
187
+ `client.to_query_string`, appends needed named fragment strings, dispatches via
188
+ `client.http_client.execute`. Removes the graphql-client/Faraday dispatch path.
189
+ - **`Common::GraphQL::Client`**: added `attr_accessor :http_client` to carry the HTTP dispatch
190
+ client alongside the DSL client.
191
+ - **`Ecoportal::API::GraphQL#initialize`**: constructs and attaches a `Common::GraphQL::HttpClient`
192
+ instance to `@client.http_client`.
193
+ - **Fragment strings**: all 7 fragment heredocs updated to use named fragment syntax
194
+ (e.g. `fragment Action on Action { ... }`), required for `Fragment.assemble` to emit
195
+ valid named fragment definitions.
196
+ - **`FragmentDefinitions`**: stripped of `client.parse` and `namespace.const_set` — fragment
197
+ strings are now stored as plain Ruby strings. No longer depends on graphql-client for
198
+ fragment loading.
199
+ - **Query/mutation blocks** (12 files): replaced `___Ecoportal__API__GraphQL__Fragment__X`
200
+ spread syntax with `spread :X` throughout all `default_block` and `default_payload_block` procs.
201
+
202
+ ### Fixed
203
+
204
+ - **`HttpClient#base_request`**: added `request ||= HTTP` guard for the unmatched `@version` case
205
+ to prevent nil errors.
206
+ - **`HttpClient#api_url`**: use `ENDPOINT_PATH` constant (`external/graphql`) consistently
207
+ instead of an inline hardcoded string.
208
+
209
+ ## [1.3.5] - 2026-05-26
210
+
211
+ ### Changed
212
+
213
+ - Moved `graphql` endpoint to `external/graphql`
214
+ - Missing env var (i.e. `ORG_ID`) will **raise** now an error (instead of just a print)
215
+
216
+ ## [1.3.4] - 2025-09-04
217
+
218
+ ### Added
219
+
220
+ - Command execution result: **added** command doc when there's a `results` error.
221
+ - Payload improvements:
222
+ - On `LocationsError.validationErrors`: fetch `property` property.
223
+ - On **results**, `Command` always fetch `__typename` and the other properties.
224
+
225
+ ### Changed
226
+
227
+ - Changed base `error_doc`: **consistent property name**
228
+
229
+ ### Fixed
230
+
231
+ - Correct fetch on `ok` (sometimes it is `null`: that doesn't mean failed).
232
+ - **Consistent order** on `error?` and `error_doc`.
233
+ - `Draft`
234
+ - **Overlapping** name `ConflictingIds` (vs `LocationsError.conflictingIds`)
235
+ - **Wrong** include on `FetchNested`
236
+
237
+ ## [1.3.3] - 2025-08-29
238
+
239
+ ### Added
240
+
241
+ - Better error handling
242
+
243
+ ### Fixed
244
+
245
+ - Unused parameter/variable `$includeArchivedNodes`
246
+
247
+ ## [1.3.2] - 2025-08-19
248
+
249
+ ### Added
250
+
251
+ - `Mutation`: allow parameters other than **input**.
252
+ - Location Structure `Draft` models
253
+ - `Interface::LocationStructure::Nodes` for `LocationStructure` and `Draft::Structure`
254
+ - `raw_response` as optional query parameter (for debugging)
255
+ - `Logic::Input` (out of consistency)
256
+ - Fragments:
257
+ - `LocationDraft`
258
+ - `LocationsError`
259
+ - Query to include `draft` list when fetching an **RS**.
260
+ - Location `Draft` queries:
261
+ - `Draft#byId`
262
+ - `Draft#create`
263
+ - `Draft#delete`
264
+ - `Draft#addCommands`
265
+ - `Draft#publish`
266
+ - `Draft#dropBadCommands`
267
+ - Error tracking througout the payload models of location mutations
268
+
269
+ ### Changed
270
+
271
+ - Upgrade dependency (`ecoportal-api` **gem**).
272
+ - Moved rescue on fragment definition to `#define` itself.
273
+ - `NodeInterface` moved to `Interface::LocationStructure::Node`
274
+ - Code: Shorten namespace referral.
275
+ - Swap to `Logic::BaseModel`
276
+ - `Mutation` to introduce `:input` required parameter by using parent class.
277
+
278
+ ### Fixed
279
+
280
+ - `QueryConnection`: bad code.
281
+ - `conflictingIds` should be array.
282
+
283
+ ## [1.3.1] - 2025-06-11
284
+
285
+ ### Changed
286
+
287
+ - upgraded gem dependencies
288
+ - **Moded** `Ecoportal::API::GraphQL::Base::Model` to
289
+ - > `Ecoportal::API::GraphQL::BaseModel`
290
+ - **Added** `Interface::LocationNode`
291
+ - **Added** `Interface::BasePage`
292
+
293
+ ### Fixed
294
+
295
+ - **Fragments**
296
+ - `Action` fragment to use `PageUnion` (**upgrade**)
297
+ - **Memoize** fragments.
298
+ - Add what fragment failed in the **error**.
299
+
300
+ ## [1.2.1] - 2025-05-16
301
+
302
+ ### Changed
303
+
304
+ - upgrade `ecoportal-api` gem
305
+ - upgrade `ecoportal-api-v2` gem
306
+
307
+ ## [1.1.1] - 2025-05-14
308
+
309
+ ### Added
310
+
311
+ - `MemberChanges` helpers for `Base::ContractorEntity`
312
+ - Custom **Diff** logic that can be used in GraphQL content:
313
+ - `Common::GraphQL::Model::Diffable::HashDiffNesting`
314
+ - Reused from `HashDiffPatch` (`ecoportal-api-v2`):
315
+ 1. It does not use `patch_ver`, but rather just `id` property alone.
316
+ 2. The _operation_ property has been renamed to `api_operation` (to ensure no collisions). And the operation types are symbols, and renamed to: `:delete`, `:update` and `:create`. This can show up to be useful when, for instance, reusing the output of `#as_update` to generate actual input objects (i.e. `#as_input`) that feed some GraphQL query.
317
+ 3. The _data_ property has been renamed to `change_data`.
318
+ 4. `Hash` **keys** are of type `Symbol`.
319
+ - `Common::GraphQL::Model::Diffable::DiffService`. In a GraphQL context, this aims to be able to implement a function called `#as_input` (equivalent to `#as_update`):
320
+ 1. It uses the `HashDiffNesting` helpers.
321
+ 2. It has capability to `ignore` certain keys.
322
+ 3. It can calculate **diff** excluding nested models (i.e. those that are `root?` and, therefore, not part of the changed target model). This functionality is an optimization to `cascaded_callbacks` throughout the nested models.
323
+
324
+ ### Changed
325
+
326
+ - `Common::GraphQL::Model::Diffable` by using `Diffable::DiffService` (with `cascaded_callbacks` implementation).
327
+ - `#as_update`
328
+ - `#dirty?`
329
+ - upgraded `ecoportal-api` gem
330
+ - updraded `ecoportal-api-v2` gem
331
+
332
+ ## [0.4.7] - 2025-04-02
333
+
334
+ ### Added
335
+
336
+ - `page.id` to Action linked resources.
337
+
338
+ ## [0.4.6] - 2025-04-02
339
+
340
+ ### Added
341
+
342
+ - `Ecoportal::API::GraphQL::Logic::QueryConnection`
343
+ - **Require** `default_connection_block` to child classes
344
+ - This aims to **not** having have client code having to define the block for `#each`
345
+
346
+ ### Changed
347
+
348
+ - upgraded `ecoportal-api` gem
349
+ - upgraded `ecoportal-api-v2` gem
350
+
351
+ ## [0.4.5] - 2025-03-14
352
+
353
+ ### Added
354
+
355
+ - Query `actionCategories`
356
+ - Mutation **create** `Action`
357
+
358
+ ### Changed
359
+
360
+ - `Action` model to have `locations` (**RS** upgrade)
361
+
362
+ ## [0.4.4] - 2025-02-23
363
+
364
+ ### Changed
365
+
366
+ - Upgraded `ecoportal-api` gem (maintanance)
367
+ - Upgraded `ecoportal-api-v2` gem (to provision `root!` class method)
368
+ - Defined some models that hand on their own as `root!`
369
+ - Refactored `Base::Model` by moving its loggic to `Common::GraphQL`
370
+
371
+ ### Fixed
372
+
373
+ - `Ecoportal::API::Common::GraphQL::HashHelpers`
374
+ - Truly make the iterator generic
375
+
376
+ ## [0.4.3] - 2024-11-21
377
+
378
+ ### Changed
379
+
380
+ - upgrade gems
381
+ - `ecoportal-api`
382
+ - `ecoportal-api-v2`
383
+ - `Ecoportal::API::Common::GraphQL::HttpClient.new` ceased to default `version` to `v1` (now it defaults to `nil`)
384
+
385
+ ## [0.4.2] - 2024-10-01
386
+
387
+ ### Changed
388
+
389
+ - upgrade gems
390
+ - `ecoportal-api-v2`
391
+ - add explicit dependency onto `ecoportal-api` gem (client)
392
+
393
+ ## [0.4.1] - 2024-08-09
394
+
395
+ ### Added
396
+
397
+ - `ContractorEntity` added field `externalId`
398
+
399
+ ### Changed
400
+
401
+ - gem upgrade `ecoportal-api-v2`
402
+
403
+ ## [0.4.0] - 2024-08-01
404
+
405
+ ### Changed
406
+
407
+ - require `ruby 3`
408
+
409
+ ## [0.3.18] - 2024-05-16
410
+
411
+ ### Fixed
412
+
413
+ - `Ecoportal::API::GraphQL::Payload::LocationStructure::CommandExecutionResult`
414
+ - Error is nullable
415
+
416
+ ## [0.3.17] - 2024-05-14
417
+
418
+ ### Fixed
419
+
420
+ - `field_name` should add up to the path
421
+
422
+ ## [0.3.16] - 2024-04-29
423
+
424
+ ### Added
425
+
426
+ - Exposed `graphql` `ContractorEntity` `destroy`
427
+
428
+ ### Fixed
429
+
430
+ - incorrect loading
431
+
432
+ ### Changed
433
+
434
+ - Input for ContractorEntity create moved as `update` (as it wasn't correct)
435
+
436
+ ## [0.3.15] - 2024-04-13
437
+
438
+ ### Added
439
+
440
+ - `Ecoportal::API::GraphQL::Logic::BaseQuery`
441
+ - `::base_path` class instance var.
442
+ - query to retrieve `currentOrganization.classifications`
443
+
444
+ ### Fixed
445
+
446
+ - upgraded `ecoportal-api-v2` gem
447
+
448
+ ## [0.3.14] - 2024-03-13
449
+
450
+ ### Added
451
+
452
+ - some benchmarking on
453
+ 1. core graphql base `query`
454
+ - `#parent_id` to location node model
455
+
456
+ ### Changed
457
+
458
+ - upgraded `ecoportal-v2-api` gem
459
+
460
+ ### Fixed
461
+
462
+ - Optimized `treeify` and locations structure class
463
+
464
+ ## [0.3.13] - 2024-02-03
465
+
466
+ ### Changed
467
+
468
+ - upgrade `ecoportal-api-v2`
469
+
470
+ ## [0.3.12] - 2024-01-27
471
+
472
+ ### Added
473
+
474
+ - Exposed `graphql` `Action` `update` and get a single `action`
475
+
476
+ ## [0.3.11] - 2023-09-19
477
+
478
+ ### Added
479
+
480
+ - Exposed `graphql` `ContractorEntity` `create` and `update`
481
+
482
+ ## [0.3.10] - 2023-08-12
483
+
484
+ ### Fixed
485
+
486
+ - `Ecopotal::API::GraphQL::Query::LocationStructure`
487
+ - `query` in basic_block missed an explicitly declared parameter.
488
+
489
+ ## [0.3.9] - 2023-08-03
490
+
491
+ ### Added
492
+
493
+ - `Ecoportal::API::GraphQL::Logic::BaseQuery`
494
+ - Added support for **default** values.
495
+
496
+ ## [0.3.8] - 2023-07-18
497
+
498
+ ### Added
499
+
500
+ - Integration for archiving actions.
501
+ - `LocationNodeInterface` -> support for `classifications`
502
+ - `Treeify` to dump more data per node (classifications)
503
+
504
+ ### Fixed
505
+
506
+ - Silenced waning messages when redefining `Fragment`s
507
+
508
+ ## [0.3.7] - 2023-05-23
509
+
510
+ ### Fixed
511
+
512
+ - `Ecoportal::API::Common::GraphQL::Client` adjusted `read_timeout` and `write_timeout` to `90` seconds.
513
+
514
+ ## [0.3.6] - 2023-04-17
515
+
516
+ ### Changed
517
+
518
+ - Softened max version of **gem** dependencies
519
+
520
+ ### Fixed
521
+
522
+ - `Ecoportal::API::GraphQL::Fragment#define` was not removing previous constants
523
+ - Changed check method to be `::const_defined?`
524
+
525
+ ## [0.3.5] - 2023-04-03
526
+
527
+ ### Fixed
528
+
529
+ - `Ecoportal::API::GraphQL::Helpers::LocationsTree#treeify`
530
+ - Make it real id-case-insensitive (parents in lower case were being missed due to this)
531
+
532
+ ## [0.3.4] - 2023-04-03
533
+
534
+ ### Added
535
+
536
+ - `Ecoportal::API::Common::GraphQL::AuthService`
537
+ - `#session_token` added **token auto-renew** functionality (when token expires in less than 90 minutes)
538
+ - `#session_token_renewed`
539
+
540
+ ### Fixed
541
+
542
+ - Enabled to specify `host` (other than `live.ecoportal.com`) by the user
543
+
544
+ ## [0.3.3] - 2023-04-02
545
+
546
+ ### Fixed
547
+
548
+ - `Ecoportal::API::GraphQL::Base::LocationNode` **added** attribute `archivedToken`
549
+
550
+ ## [0.3.2] - 2023-04-02
551
+
552
+ ### Changed
553
+
554
+ - `Ecoportal::API::GraphQL::Helpers::LocationsTree#treeify` added support for `archived_token`
555
+
556
+ ## [0.3.1] - 2023-03-09
557
+
558
+ ### Changed
559
+
560
+ - Upgraded core gem dependency `ecoportal-api-v2`
561
+
562
+ ## [0.2.3] - 2023-02-27
563
+
564
+ ### Fixed
565
+
566
+ - Typo in tests LocationsStructures... should read `locationStructures`
567
+
568
+ ## [0.2.2] - 2023-02-24
569
+
570
+ ### Fixed
571
+
572
+ - Build gem correctly
573
+
574
+ ## [0.2.1] - 2023-02-24
575
+
576
+ ### Changed
577
+
578
+ - Migrate from TagTrees to **reporting structures** (breaking change)
579
+
580
+ ### Added
581
+
582
+ - Basics for reporting structure mutations
583
+
584
+ ## [0.1.11] - 2022-11-29
585
+
586
+ ### Added
587
+
588
+ - `Ecoportal::API::GraphQL::Base::Mutation`
589
+ - Added `createContractorEntity`
590
+
591
+ ### Changed
592
+
593
+ - **upgraded** `graphlient` gem dependency (support for framents)
594
+ - removed patch in this gem
595
+ - Slight internal refactor of `Ecoportal::API::GraphQL::Base::Query`
596
+ - Upgraded `ecoportal-api-v2` **gem** dependency
597
+
598
+ ## [0.1.10] - 2022-09-29
599
+
600
+ ### Changed
601
+
602
+ - **upgraded** `ecoportal-api-v2` gem dependency
603
+
604
+ ### Fixed
605
+
606
+ - Remove debugging message
607
+
608
+ ## [0.1.9] - 2022-09-26
609
+
610
+ ### Added
611
+
612
+ - `Ecoportal::API::GraphQL::Query::TagTree`
613
+
614
+ ### Changed
615
+
616
+ - **upgraded** `ecoportal-api-v2` gem dependency
617
+ - added `Ecoportal::API::Common::GraphQL::QueryIntegration`
618
+ - restructured `Ecoportal::API::GraphQL::Model::Organization` class
619
+ - **Patch** on `Graphlient::Query` for fragments support (**pull request**: <https://github.com/ashkan18/graphlient/pull/94>)
620
+
621
+ ## [0.1.8] - 2022-09-23
622
+
623
+ ### Added
624
+
625
+ - `currentOrganization.tagTrees` query
626
+
627
+ ### Changed
628
+
629
+ - **upgraded** `ecoportal-api-v2` gem dependency
630
+ - Restructured the `Query` inheritance chain to make things simpler
631
+
632
+ ## [0.1.6] - 2022-09-19
633
+
634
+ ### Fixed
635
+
636
+ - Call to **private** method `remove_const` in `Ecoportal::API::GraphQL::Fragment#define`
637
+
638
+ ## [0.1.5] - 2022-09-19
639
+
640
+ ### Added
641
+
642
+ - Patch `GraphQL::Query#append_node` so we can use Fragments in blocks using `___` as start of the constant, and `__` for namespace separator
643
+ - Issue/feature request: <https://github.com/ashkan18/graphlient/issues/93>
644
+ - `Ecoportal::API::GraphQL::Fragment#define` provided that client scripts can create their own fragments in their own namespace
645
+ - Exposed `Ecoportal::API::GraphQL#fragments`
646
+ - It will always (re)define in the `Fragment` root namespace
647
+
648
+ ## [0.1.4] - 2022-09-16
649
+
650
+ ### Fixed
651
+
652
+ - Able to inject connection block to `each`
653
+ - Error handling delegated to parent class (`QueryConnection`)
654
+ - Retrieve `id` on elements of `Array`
655
+
656
+ ## [0.1.3] - 2022-09-15
657
+
658
+ ### Fixed
659
+
660
+ - Fixed circular reference to `org_id` in `Ecoportal::API::Common::GraphQL::Client`
661
+
662
+ ## [0.1.2] - 2022-09-15
663
+
664
+ ### Changed
665
+
666
+ - `Ecoportal::API::GraphQL` addded `email` and `pass` parameters on initialization
667
+ - This allows for integration in some client lib
668
+
669
+ ## [0.1.0] - 2022-09-15
670
+
671
+ ### Added
672
+
673
+ - First commit with some basic structure