ecoportal-api-graphql 1.3.13 → 1.3.16

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 (275) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +87 -0
  3. data/lib/ecoportal/api/common/graphql/client.rb +0 -2
  4. data/lib/ecoportal/api/common/graphql/http_client.rb +6 -0
  5. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -17
  6. data/lib/ecoportal/api/graphql/base/file_container.rb +14 -14
  7. data/lib/ecoportal/api/graphql/base/location_classification_type.rb +15 -15
  8. data/lib/ecoportal/api/graphql/base/location_structure.rb +27 -27
  9. data/lib/ecoportal/api/graphql/base/organization.rb +15 -15
  10. data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
  11. data/lib/ecoportal/api/graphql/base/page.rb +17 -16
  12. data/lib/ecoportal/api/graphql/base/template.rb +35 -0
  13. data/lib/ecoportal/api/graphql/base.rb +37 -35
  14. data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +41 -41
  15. data/lib/ecoportal/api/graphql/compat/response.rb +35 -35
  16. data/lib/ecoportal/api/graphql/connection/action.rb +11 -11
  17. data/lib/ecoportal/api/graphql/connection/action_category.rb +11 -11
  18. data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +11 -11
  19. data/lib/ecoportal/api/graphql/connection/page.rb +11 -11
  20. data/lib/ecoportal/api/graphql/connection/person_member.rb +11 -11
  21. data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -11
  22. data/lib/ecoportal/api/graphql/connection.rb +17 -17
  23. data/lib/ecoportal/api/graphql/file_upload/client.rb +21 -10
  24. data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
  25. data/lib/ecoportal/api/graphql/fragment/force.rb +14 -10
  26. data/lib/ecoportal/api/graphql/fragment/location_node.rb +26 -26
  27. data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
  28. data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
  29. data/lib/ecoportal/api/graphql/fragment.rb +3 -0
  30. data/lib/ecoportal/api/graphql/input/contractor_entity.rb +14 -14
  31. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -16
  32. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -18
  33. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -21
  34. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -28
  35. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -18
  36. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -23
  37. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -20
  38. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -20
  39. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -24
  40. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -20
  41. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -20
  42. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -20
  43. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -18
  44. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -18
  45. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -18
  46. data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -251
  47. data/lib/ecoportal/api/graphql/input.rb +24 -24
  48. data/lib/ecoportal/api/graphql/logic/connection.rb +34 -34
  49. data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
  50. data/lib/ecoportal/api/graphql/model/page.rb +16 -15
  51. data/lib/ecoportal/api/graphql/model/person_member.rb +15 -15
  52. data/lib/ecoportal/api/graphql/model/template.rb +15 -0
  53. data/lib/ecoportal/api/graphql/model.rb +32 -30
  54. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -45
  55. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -40
  56. data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +14 -14
  57. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -40
  58. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -40
  59. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -40
  60. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -40
  61. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +7 -7
  62. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +8 -7
  63. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -40
  64. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -40
  65. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -40
  66. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -40
  67. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -35
  68. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -35
  69. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -36
  70. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -40
  71. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -13
  72. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -46
  73. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +1 -1
  74. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +1 -1
  75. data/lib/ecoportal/api/graphql/mutation.rb +20 -20
  76. data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +14 -14
  77. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -21
  78. data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -13
  79. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -13
  80. data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
  81. data/lib/ecoportal/api/graphql/payload/page.rb +20 -19
  82. data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -11
  83. data/lib/ecoportal/api/graphql/payload/register.rb +15 -11
  84. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +1 -1
  85. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +1 -1
  86. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +1 -1
  87. data/lib/ecoportal/api/graphql/payload.rb +23 -23
  88. data/lib/ecoportal/api/graphql/query/location_structures.rb +57 -57
  89. data/lib/ecoportal/api/graphql/query/page.rb +45 -45
  90. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +9 -3
  91. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +9 -3
  92. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -78
  93. data/lib/ecoportal/api/graphql/query.rb +27 -27
  94. data/lib/ecoportal/api/graphql.rb +9 -5
  95. data/lib/ecoportal/api/graphql_version.rb +1 -1
  96. metadata +9 -180
  97. data/.ai-assistance/bridge/CLAUDE.md +0 -338
  98. data/.ai-assistance/bridge/archive/.gitkeep +0 -0
  99. data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.inbox.md +0 -29
  100. data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.outbox.md +0 -18
  101. data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.inbox.md +0 -42
  102. data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.outbox.md +0 -115
  103. data/.ai-assistance/bridge/context/gemini-review-prompt.txt +0 -48
  104. data/.ai-assistance/bridge/context/gemini-review-response.md +0 -104
  105. data/.ai-assistance/bridge/context/project.md +0 -42
  106. data/.ai-assistance/bridge/inbox/.gitkeep +0 -0
  107. data/.ai-assistance/bridge/outbox/.gitkeep +0 -0
  108. data/.ai-assistance/bridge/outbox/request-for-standards-discovery.md +0 -48
  109. data/.ai-assistance/bridge/queue/.gitkeep +0 -1
  110. data/.ai-assistance/capabilities/CLAUDE.md +0 -27
  111. data/.ai-assistance/capabilities/assumptions-log.md +0 -80
  112. data/.ai-assistance/capabilities/code.md +0 -47
  113. data/.ai-assistance/capabilities/connectors.md +0 -37
  114. data/.ai-assistance/capabilities/cowork.md +0 -55
  115. data/.ai-assistance/code/OVERVIEW.md +0 -155
  116. data/.ai-assistance/code/data_fields.md +0 -242
  117. data/.ai-assistance/code/dependencies.md +0 -151
  118. data/.ai-assistance/code/diff_as_input.md +0 -234
  119. data/.ai-assistance/code/diff_pairing_engine.md +0 -243
  120. data/.ai-assistance/code/diff_service_deep_dive.md +0 -192
  121. data/.ai-assistance/code/ecoPortal_architecture/00_overview_and_index.md +0 -55
  122. data/.ai-assistance/code/ecoPortal_architecture/01_terminology_dictionary.md +0 -181
  123. data/.ai-assistance/code/ecoPortal_architecture/02_data_model.md +0 -192
  124. data/.ai-assistance/code/ecoPortal_architecture/03_api_layers.md +0 -147
  125. data/.ai-assistance/code/ecoPortal_architecture/04_graphql_queries_mutations.md +0 -277
  126. data/.ai-assistance/code/ecoPortal_architecture/05_page_workflows.md +0 -200
  127. data/.ai-assistance/code/ecoPortal_architecture/06_search_and_filters.md +0 -228
  128. data/.ai-assistance/code/ecoPortal_architecture/07_data_fields.md +0 -197
  129. data/.ai-assistance/code/ecoPortal_architecture/08_stages_sections.md +0 -243
  130. data/.ai-assistance/code/ecoPortal_architecture/09_people_contractors_locations.md +0 -196
  131. data/.ai-assistance/code/ecoPortal_architecture/10_forces_workflow_builder.md +0 -132
  132. data/.ai-assistance/code/ecoPortal_architecture/11_integration_gems.md +0 -187
  133. data/.ai-assistance/code/ecoPortal_architecture/12_ai_documentation_sources_gaps.md +0 -236
  134. data/.ai-assistance/code/ecoPortal_architecture/13_ai_infrastructure.md +0 -183
  135. data/.ai-assistance/code/ecoportal_schema_reference.md +0 -240
  136. data/.ai-assistance/code/filter_contract_matrix.md +0 -177
  137. data/.ai-assistance/code/graphql_domain_knowledge.md +0 -240
  138. data/.ai-assistance/code/refactoring/datafield-readwrite-shape-asymmetry.md +0 -71
  139. data/.ai-assistance/code/refactoring/opportunities.md +0 -251
  140. data/.ai-assistance/code/schema_analysis.md +0 -321
  141. data/.ai-assistance/code/search_filters.md +0 -868
  142. data/.ai-assistance/code/spec_coverage.md +0 -73
  143. data/.ai-assistance/code/template_diff_pairing_domain.md +0 -175
  144. data/.ai-assistance/code/workflow-command-guide.md +0 -466
  145. data/.ai-assistance/code/workflow-space.md +0 -353
  146. data/.ai-assistance/conventions/CLAUDE.md +0 -30
  147. data/.ai-assistance/conventions/code-working-tree-protocol.md +0 -199
  148. data/.ai-assistance/conventions/gitignore-rules.md +0 -42
  149. data/.ai-assistance/conventions/permission-guidance.md +0 -120
  150. data/.ai-assistance/integrations/README.md +0 -70
  151. data/.ai-assistance/integrations/gitkraken-mcp.md +0 -107
  152. data/.ai-assistance/integrations/gitlab-mcp.md +0 -123
  153. data/.ai-assistance/integrations/local-git.md +0 -60
  154. data/.ai-assistance/local_paths.example.md +0 -17
  155. data/.ai-assistance/projects/TODO.md +0 -118
  156. data/.ai-assistance/projects/api-v2-to-graphql-migration/DECISIONS.md +0 -168
  157. data/.ai-assistance/projects/api-v2-to-graphql-migration/INTENT.md +0 -60
  158. data/.ai-assistance/projects/api-v2-to-graphql-migration/TODO.md +0 -267
  159. data/.ai-assistance/projects/api-v2-to-graphql-migration/UPSTREAM.md +0 -53
  160. data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/csv-template-pipeline-design.md +0 -102
  161. data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/cutover-usecase-gap-audit.md +0 -139
  162. data/.ai-assistance/projects/compat-layer-audit/COMPAT_AUDIT.md +0 -244
  163. data/.ai-assistance/projects/dynamic-model-generation/INTENT.md +0 -93
  164. data/.ai-assistance/projects/eco-helpers-compat/INTENT.md +0 -244
  165. data/.ai-assistance/projects/eco-helpers-compat/MIGRATION_GUIDE.md +0 -266
  166. data/.ai-assistance/projects/eco-helpers-compat/TODO.md +0 -86
  167. data/.ai-assistance/projects/ecoportal-api-v2-doublemodel-review/INTENT.md +0 -101
  168. data/.ai-assistance/projects/graphql-agent/GAP_ANALYSIS.md +0 -177
  169. data/.ai-assistance/projects/ooze-graphql-native-migration/DECISIONS.md +0 -161
  170. data/.ai-assistance/projects/ooze-graphql-native-migration/INTENT.md +0 -125
  171. data/.ai-assistance/projects/ooze-graphql-native-migration/INVENTORY.md +0 -136
  172. data/.ai-assistance/projects/ooze-graphql-native-migration/RISKS.md +0 -126
  173. data/.ai-assistance/projects/ooze-graphql-native-migration/TODO.md +0 -261
  174. data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-06-30-cutover-workflow-deep-review.md +0 -122
  175. data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-07-01-forces-via-workflow-commands-miss-rca.md +0 -148
  176. data/.ai-assistance/projects/page-model/DECISIONS.md +0 -245
  177. data/.ai-assistance/projects/page-model/TODO.md +0 -190
  178. data/.ai-assistance/projects/qa-services-delivery/DECISIONS.md +0 -93
  179. data/.ai-assistance/projects/qa-services-delivery/INTENT.md +0 -76
  180. data/.ai-assistance/projects/qa-services-delivery/PHASE3-SCOPE.md +0 -115
  181. data/.ai-assistance/projects/qa-services-delivery/ROADMAP.md +0 -99
  182. data/.ai-assistance/projects/qa-services-delivery/TODO.md +0 -81
  183. data/.ai-assistance/projects/search-filter-builder/INTENT.md +0 -107
  184. data/.ai-assistance/projects/search-filter-builder/TODO.md +0 -131
  185. data/.ai-assistance/projects/template-automatic-build-maintenance/INTENT.md +0 -87
  186. data/.ai-assistance/projects/template-automatic-build-maintenance/TODO.md +0 -108
  187. data/.ai-assistance/projects/template-diff-deploy/INTENT.md +0 -12
  188. data/.ai-assistance/projects/template-diff-deploy/TODO.md +0 -9
  189. data/.ai-assistance/projects/template-maintenance/DESIGN.md +0 -134
  190. data/.ai-assistance/projects/template-maintenance/PHASE0-FINDINGS.md +0 -93
  191. data/.ai-assistance/projects/template-maintenance/README.md +0 -14
  192. data/.ai-assistance/projects/template-model-logic/CATEGORY_CATALOG.md +0 -236
  193. data/.ai-assistance/projects/template-model-logic/CLASSIFICATION_SPIKE.md +0 -243
  194. data/.ai-assistance/projects/template-model-logic/DESIGN_NOTE.md +0 -154
  195. data/.ai-assistance/projects/workflow-space/TODO.md +0 -213
  196. data/.ai-assistance/reinstall-claude-desktop-windows.md +0 -136
  197. data/.ai-assistance/scripts/CLAUDE.md +0 -150
  198. data/.ai-assistance/scripts/bridge-inbox-check.sh +0 -75
  199. data/.ai-assistance/scripts/bridge-init.sh +0 -86
  200. data/.ai-assistance/scripts/bridge-status.sh +0 -44
  201. data/.ai-assistance/scripts/capabilities-check.ts +0 -104
  202. data/.ai-assistance/scripts/check-outbox.sh +0 -43
  203. data/.ai-assistance/scripts/dep_graph.rb +0 -91
  204. data/.ai-assistance/scripts/lock-acquire.sh +0 -103
  205. data/.ai-assistance/scripts/lock-multi.sh +0 -124
  206. data/.ai-assistance/scripts/lock-queue.sh +0 -94
  207. data/.ai-assistance/scripts/setup-mcps.test.ts +0 -188
  208. data/.ai-assistance/scripts/setup-mcps.ts +0 -234
  209. data/.ai-assistance/scripts/task-complete.ts +0 -74
  210. data/.ai-assistance/scripts/task-create.ts +0 -75
  211. data/.ai-assistance/scripts/task-read.ts +0 -125
  212. data/.ai-assistance/scripts/token-logger.js +0 -220
  213. data/.ai-assistance/scripts/token-report.ts +0 -158
  214. data/.ai-assistance/scripts/token-session-start.js +0 -66
  215. data/.ai-assistance/skills/ai-instructions/SKILL.md +0 -48
  216. data/.ai-assistance/skills/code-specs/SKILL.md +0 -69
  217. data/.ai-assistance/skills/corporate-policies/SKILL.md +0 -201
  218. data/.ai-assistance/skills/dep-graph/SKILL.md +0 -139
  219. data/.ai-assistance/skills/ep-ai-manager/SKILL.md +0 -417
  220. data/.ai-assistance/skills/gemini-assist/SKILL.md +0 -63
  221. data/.ai-assistance/skills/gemini-assist/gemini-mcp-server.js +0 -205
  222. data/.ai-assistance/skills/gemini-assist/gemini_ask.py +0 -1
  223. data/.ai-assistance/skills/gemini-assist/gemini_ask.rb +0 -240
  224. data/.ai-assistance/skills/gemini-assist/prompts/cycle_end_review.txt +0 -25
  225. data/.ai-assistance/skills/graphql-schema-analysis/SKILL.md +0 -261
  226. data/.ai-assistance/skills/procedural-memory/SKILL.md +0 -319
  227. data/.ai-assistance/skills/project-cycle/SKILL.md +0 -177
  228. data/.ai-assistance/skills/project-self-docs/SKILL.md +0 -181
  229. data/.ai-assistance/skills/project-self-docs/scripts/self_docs_scan.py +0 -378
  230. data/.ai-assistance/skills/refactor/SKILL.md +0 -62
  231. data/.ai-assistance/skills/rubocop/SKILL.md +0 -93
  232. data/.ai-assistance/skills/ruby-scripting/SKILL.md +0 -215
  233. data/.ai-assistance/skills/spec-generation/SKILL.md +0 -72
  234. data/.ai-assistance/standards-version.json +0 -22
  235. data/.ai-assistance/token-budget.json +0 -32
  236. data/.ai-assistance/version.json +0 -39
  237. data/.claude/settings.json +0 -150
  238. data/.env.example +0 -18
  239. data/.gitattributes +0 -15
  240. data/.gitignore +0 -37
  241. data/.gitlab-ci.yml +0 -45
  242. data/.markdownlint.json +0 -4
  243. data/.rspec +0 -3
  244. data/.rubocop.yml +0 -121
  245. data/.ruby-version +0 -1
  246. data/.yardopts +0 -10
  247. data/CLAUDE.md +0 -243
  248. data/Gemfile +0 -30
  249. data/Rakefile +0 -90
  250. data/bin/console +0 -14
  251. data/bin/setup +0 -8
  252. data/bin/setup.ps1 +0 -6
  253. data/docs/self-docs/ARCHITECTURE.md +0 -88
  254. data/docs/self-docs/CHANGES.jsonl +0 -12
  255. data/docs/self-docs/COMPLIANCE.md +0 -79
  256. data/docs/self-docs/CONVENTIONS.md +0 -74
  257. data/docs/self-docs/INTEGRATIONS.md +0 -65
  258. data/docs/self-docs/OPERATIONS.md +0 -76
  259. data/docs/self-docs/OVERVIEW.md +0 -64
  260. data/docs/self-docs/STATUS.md +0 -73
  261. data/docs/self-docs/self-docs-index.json +0 -51
  262. data/docs/worklog.md +0 -977
  263. data/ecoportal-api-graphql.gemspec +0 -40
  264. data/scripts/auto-worker-scheduler.sh +0 -386
  265. data/tests/actions_get.rb +0 -7
  266. data/tests/contractor_entities_get.rb +0 -20
  267. data/tests/contractor_entity_create.rb +0 -19
  268. data/tests/contractor_entity_udpate.rb +0 -20
  269. data/tests/dump_page_model.rb +0 -74
  270. data/tests/dump_template_model.rb +0 -90
  271. data/tests/loc_structure_get.rb +0 -10
  272. data/tests/loc_structure_update.rb +0 -51
  273. data/tests/loc_structures_get.rb +0 -15
  274. data/tests/local_libs.rb +0 -20
  275. data/tests/validate_queries.rb +0 -127
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fba9a366d06303f179c6b7d841930a66a29b6cc3fe836e06b218b95873bbe77e
4
- data.tar.gz: 6114ba779317ec55b649e1f7df685c0140573cea073aa07c04b9e4cfa20b433a
3
+ metadata.gz: 2eada698a590c0214f8eb7a37255efe68c2573de6c73e3e1ce42ba6a8ff5accb
4
+ data.tar.gz: 316b65e4027224711711d2248ada651911b1e64ce48aeff6bffb22144e53cd11
5
5
  SHA512:
6
- metadata.gz: d867c896796e9107870a2a49e3cdc75275b0a96559a9b8fe47fedea407ef639f7ff558ce22de798f79f3f011c7d4464a3eacd01a63e764778d2e0359cd8ed4ad
7
- data.tar.gz: c29f555f19fc3d679f51cb512c417caca1e7e5f0006e9ac35a7ccf4d7f074095011ad4a59128a458b69c178dd538d79bf952d1b26b1557397e0d5fc4c41274d4
6
+ metadata.gz: f0894ce98e42628e50bb594ccbaa0050ae07518517a08745d54f5f61dc4031f959163b69caa1768ed978d0499abbb478c2dc4811867239373c324cac8008cc2a
7
+ data.tar.gz: 43e3dcf9dd61f521573a2249d26c92a571c23f06f2c742e9b19aa5554832b1195b251f0832da70f6231c68c0f94e108ff6487738a1e81e1c8c7d214944a98e0d
data/CHANGELOG.md CHANGED
@@ -2,6 +2,93 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.3.16] - 2026-08-13
6
+
7
+ ### Fixed
8
+
9
+ - Packaging-only republish of `1.3.15` with an allowlisted gemspec (backported from `2.0.0`).
10
+ Versions `1.3.9`-`1.3.15` shipped internal repository content (`.ai-assistance/` project notes,
11
+ `docs/worklog.md`, architecture docs) to rubygems.org via the old denylist `spec.files`; they
12
+ will be yanked. `1.3.16` is the identical `lib/` code (including the `1.3.15` OozeRedirect
13
+ `executeWorkflowCommands` fix) packaged clean, so the `1.x` line keeps a clean latest release.
14
+
15
+ ## [1.3.15] - 2026-07-30
16
+
17
+ **Backwards-compatible.** Every change here fixes a query or mutation document that the live
18
+ schema rejected — i.e. code paths that could not run at all — plus the CI gate that found them.
19
+ Cherry-picked onto the 1.3.x line from `main`, where they landed alongside **breaking** changes
20
+ that are deliberately NOT in this release (see "Deferred to 1.4.0" below).
21
+
22
+ ### Fixed
23
+
24
+ - **`FileUpload::Client` authenticated the v2 REST endpoints wrongly.** The ported S3
25
+ register/poll steps sent `Authorization: Bearer <oauth_token>`; those endpoints authenticate via
26
+ `X-ECOPORTAL-API-KEY`, so step 3 404'd and `#upload` never completed. `Ecoportal::API::GraphQL.new`
27
+ accepts an additive `api_key:` (independent of the GraphQL endpoint's own email/pass OAuth),
28
+ `HttpClient#api_key` is public, and the client raises a clear error when it is missing.
29
+ ⚠ **Not yet live-verified** — verify against a sandbox org before relying on it.
30
+ - **Three invalid union selections.** `Query::RegisterPresetViews` (`fieldConfigurations`),
31
+ `Query::PageWithForces` (`forces`) and `Query::PagesWorkflowCommands` (`workflow`) selected
32
+ fields directly on a union, which is invalid GraphQL ("Selections can't be made directly on
33
+ unions") — all three queries failed outright. They now select through the members' shared
34
+ interface (`FieldConfigurationInterface` / `BasePageInterface`). Response shapes are unchanged.
35
+ - **`fragment ForceFields` asked for a non-existent `id` on bindings.** `Force.bindings` is
36
+ `[BindingInterface]`, whose only fields are `name` / `referenceId` (+ per-member `reference`),
37
+ so every query spreading the fragment was invalid. Now selects on the interface directly.
38
+ NOTE the read/write asymmetry this exposes: `WorkflowEditBindingInput` / `removeBinding` require
39
+ a binding `id` that no read exposes, so `BindingCollection#delete!(binding)` has no source for it.
40
+ - **7 invalid `PageFields` spreads.** The four review-task mutations return `item: TaskInterface`
41
+ (not a page — the page is reachable via `subject`), `Template::{Create,Destroy}RelatedPage`
42
+ return `RelatedPages`, and `Template::UpdateInformation` returns the narrow `Template` type. New
43
+ `:PageTaskFields` / `:TemplateRelatedPages` / `:TemplateInformation` fragments and read-only
44
+ `Base/Model::Page::Task` + `Base/Model::Template::{RelatedPages,Information}` models; the payload
45
+ `item_class`es pointed at `Model::PageUnion`, which never matched the schema. The template
46
+ mutations that genuinely return a page (`Create`/`Publish`/`Unpublish`/`Update`) are unchanged.
47
+ - **6 payloads selected an `item` their type does not have.** `Page::CreateDraft` → `{ id }`,
48
+ `Page::{DeleteDraft,PublishDraft}` → `{ ok }`, `Page::BatchUpdateReviewTask` → `{ count }` (and
49
+ its own `Payload::Page::ReviewTaskBatch`), `Register::Destroy` → `{ ok }`, `PresetView::Destroy`
50
+ → `{ clientMutationId errors }`. `Payload::Page::Draft` gained `id`/`ok`, `Payload::Register`
51
+ gained `ok`.
52
+ - **`executeWorkflowCommands` was rendered with arguments it never accepted** — the schema takes a
53
+ single `input: ExecuteWorkflowCommandsInput!`, so the **page-level command bus could not run**.
54
+ Both classes' `#query` already built the right `input` hash; only the documents were wrong.
55
+ - **`Payload::OkPayload` now models `errors`** — it selected them but computed `success?` purely
56
+ from `ok`, silently ignoring a populated errors object.
57
+
58
+ ### Added (tooling — no runtime effect)
59
+
60
+ - **`validate-queries` CI job** (`.gitlab-ci.yml`): renders every query + mutation against a
61
+ freshly introspected schema and fails on render failures plus the always-invalid selection
62
+ classes ("must have selections", "can't be made on scalars", "can't be made directly on unions",
63
+ "can't be spread inside"). This gate is what found everything above.
64
+ - **`tests/dump_schema.rb`**: fresh introspection through the gem's own `HttpClient`. Requires
65
+ `SERVER` explicitly (the gem's default host is production). Schema dumps are never committed.
66
+
67
+ ### Deferred to 1.4.0 (breaking — intentionally absent here)
68
+
69
+ - The AI-summary rewire (`generateAiSummary` → `generatePageSummary`,
70
+ `submitAiSummaryFeedback` → `submitPageAiSummaryFeedback`, changed `#query` keywords,
71
+ `Base::AiSummaryVersion` field removals) and the removal of the `SmartFill` mutations
72
+ (`smartFillGenerate` / `smartFillSubmitFeedback` do not exist in the schema).
73
+ - The 2026-07-13 `WorkflowCommandInput` schema sync and the polymorphic read-model layer.
74
+
75
+ ## [1.3.14] - 2026-07-16
76
+
77
+ Re-issue of the **1.3.13 HttpClient resilience fix** under a fresh version. The `1.3.13`
78
+ artifact published to the gem server (2026-07-11) could not be relied upon to contain the
79
+ fix below — RubyGems versions are immutable and cannot be re-pushed, so the fix ships here
80
+ as `1.3.14`. Functionally identical to the *intended* `1.3.13` (this is `1.3.12` + the
81
+ resilience fix, nothing else). **Backwards-compatible.**
82
+
83
+ Consumers that need the 429/1015 resilience (e.g. bulk `cans-upsert` live runs) must floor
84
+ `ecoportal-api-graphql >= 1.3.14` — a `>= 1.3.13` floor is not sufficient.
85
+
86
+ ### Fixed
87
+
88
+ - Same fix as documented under `[1.3.13]` below: `Common::GraphQL::HttpClient#execute` routes
89
+ through the inherited `instrument → with_retry { rate_throttling }` pipeline, so a single
90
+ HTTP 429 (Cloudflare edge rate-limit `1015`) no longer aborts the run.
91
+
5
92
  ## [1.3.13] - 2026-07-12
6
93
 
7
94
  Reliability: the GraphQL `HttpClient` now inherits the **same request-resilience
@@ -29,8 +29,6 @@ module Ecoportal
29
29
 
30
30
  puts "Configuring GraphQL Client onto '#{url}'"
31
31
 
32
- pp email
33
-
34
32
  super(
35
33
  url,
36
34
  headers: {
@@ -21,6 +21,12 @@ module Ecoportal
21
21
 
22
22
  attr_reader :host, :version
23
23
 
24
+ # Publicly exposes the configured api_key (inherited as `private` from
25
+ # `Common::Client`) — `FileUpload::Client` needs it directly to authenticate
26
+ # against the v2 REST endpoints, independent of this client's own `@version`
27
+ # (which stays `'graphql'` and therefore always builds a Bearer `key_token`).
28
+ public :api_key
29
+
24
30
  include Ecoportal::API::Common::GraphQL::AuthService
25
31
 
26
32
  def initialize(
@@ -1,17 +1,17 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- # Represents one generation version of an AiSummary field.
6
- # Returned by generateAiSummary — tracks the prompt, output, token usage, and status.
7
- class AiSummaryVersion < Logic::BaseModel
8
- passkey :id
9
- passthrough :aiSummary, :status, :prompt
10
- passthrough :inputTokens, :outputTokens, :totalTokens
11
- passthrough :resourceType # "field" | "stage" | "page"
12
- passarray :ratings # [[user_id, score], ...]
13
- end
14
- end
15
- end
16
- end
17
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ # Represents one generation version of an AiSummary field.
6
+ # Returned by generateAiSummary — tracks the prompt, output, token usage, and status.
7
+ class AiSummaryVersion < Logic::BaseModel
8
+ passkey :id
9
+ passthrough :aiSummary, :status, :prompt
10
+ passthrough :inputTokens, :outputTokens, :totalTokens
11
+ passthrough :resourceType # "field" | "stage" | "page"
12
+ passarray :ratings # [[user_id, score], ...]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,14 +1,14 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- class FileContainer < Logic::BaseModel
6
- passkey :id
7
- passthrough :name, :activeName
8
- passthrough :fileSize, :token, :activeVersionId
9
- passarray :tags
10
- end
11
- end
12
- end
13
- end
14
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ class FileContainer < Logic::BaseModel
6
+ passkey :id
7
+ passthrough :name, :activeName
8
+ passthrough :fileSize, :token, :activeVersionId
9
+ passarray :tags
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,15 +1,15 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- class LocationClassificationType < Logic::BaseModel
6
- root!
7
-
8
- passkey :id
9
- passthrough :name
10
- passboolean :active
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ class LocationClassificationType < Logic::BaseModel
6
+ root!
7
+
8
+ passkey :id
9
+ passthrough :name
10
+ passboolean :active
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,27 +1,27 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- class LocationStructure < Interface::LocationStructure::Nodes
6
- read_only!
7
-
8
- class_resolver :location_node_class, Base::LocationNode
9
- class_resolver :draft_class, "Base::LocationStructure::Draft"
10
-
11
- passkey :id
12
- passthrough :name, :weight
13
- passboolean :archived, :published, :visitorManagementEnabled
14
- embeds_one :updatedAt, klass: Base::DateTime
15
-
16
- embeds_many :drafts, klass: :draft_class, order_key: :createdAt
17
-
18
- def draft?
19
- false
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
-
27
- require_relative 'location_structure/draft'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ class LocationStructure < Interface::LocationStructure::Nodes
6
+ read_only!
7
+
8
+ class_resolver :location_node_class, Base::LocationNode
9
+ class_resolver :draft_class, "Base::LocationStructure::Draft"
10
+
11
+ passkey :id
12
+ passthrough :name, :weight
13
+ passboolean :archived, :published, :visitorManagementEnabled
14
+ embeds_one :updatedAt, klass: Base::DateTime
15
+
16
+ embeds_many :drafts, klass: :draft_class, order_key: :createdAt
17
+
18
+ def draft?
19
+ false
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ require_relative 'location_structure/draft'
@@ -1,15 +1,15 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- class Organization < Logic::BaseModel
6
- root!
7
-
8
- passkey :id
9
- passthrough :name, :companyName
10
- passthrough :logoUrl, read_only: true
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ class Organization < Logic::BaseModel
6
+ root!
7
+
8
+ passkey :id
9
+ passthrough :name, :companyName
10
+ passthrough :logoUrl, read_only: true
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ module Page
6
+ # A page TASK — the `item` of the review-task mutations (`TaskInterface`:
7
+ # CompletePage / InComment / ReviewPage). Read-only.
8
+ #
9
+ # This is NOT a page: the page it belongs to is `subject` (a PageUnion). The
10
+ # review-task payloads used to type `item` as `Model::PageUnion`, which never
11
+ # matched the schema (see `Fragment :PageTaskFields`).
12
+ class Task < Logic::BaseModel
13
+ read_only!
14
+
15
+ passkey :id
16
+ passthrough :__typename, :stageId, :relativeStatus, :taskNotes
17
+ passboolean :complete, :overdue, :escalated
18
+ passdate :createdAt, :completedAt, :due
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,16 +1,17 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- module Page
6
- end
7
- end
8
- end
9
- end
10
- end
11
-
12
- require_relative 'page/basic'
13
- require_relative 'page/data_field'
14
- require_relative 'page/section'
15
- require_relative 'page/section_collection'
16
- require_relative 'page/phased'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ module Page
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'page/basic'
13
+ require_relative 'page/data_field'
14
+ require_relative 'page/section'
15
+ require_relative 'page/section_collection'
16
+ require_relative 'page/phased'
17
+ require_relative 'page/task'
@@ -0,0 +1,35 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ # Namespace for the narrow template-side types.
6
+ #
7
+ # ★ Note the platform asymmetry: in most of this gem a "template" IS a page (a page with
8
+ # `template: true`), which is why `Query::Templates` and most `Payload::Template::*`
9
+ # resolve to `Model::PageUnion`. The two types here are the exceptions — distinct schema
10
+ # types returned by specific template mutations.
11
+ module Template
12
+ # `item` of `updateTemplateInformation` (schema type `Template`). Read-only.
13
+ class Information < Logic::BaseModel
14
+ read_only!
15
+
16
+ passkey :id
17
+ passthrough :description, :aiDescription, :templateType, :templateContainerUid
18
+ passboolean :active, :public, :creatorEnabled, :creatorEditable
19
+ passarray :folders
20
+ end
21
+
22
+ # `item` of `createTemplateRelatedPage` / `destroyTemplateRelatedPage`
23
+ # (schema type `RelatedPages`) — a related-pages CONFIG entry, not a page. Read-only.
24
+ class RelatedPages < Logic::BaseModel
25
+ read_only!
26
+
27
+ passkey :id
28
+ passthrough :title, :registerId
29
+ passboolean :hasInaccessibleVariables
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,35 +1,37 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Base
5
- end
6
- end
7
- end
8
- end
9
-
10
- require_relative 'base/date_time'
11
- require_relative 'base/page_info'
12
- require_relative 'base/location_classification_type'
13
- require_relative 'base/location_node'
14
- require_relative 'base/location_structure'
15
- require_relative 'base/person_member'
16
- require_relative 'base/file_attachment'
17
- require_relative 'base/file_container'
18
- require_relative 'base/field'
19
- require_relative 'base/page'
20
- require_relative 'base/resource'
21
- require_relative 'base/action_category'
22
- require_relative 'base/action'
23
- require_relative 'base/contractor_entity'
24
- require_relative 'base/preview_page'
25
- require_relative 'base/delta_result'
26
- require_relative 'base/organization'
27
-
28
- require_relative 'base/register'
29
- require_relative 'base/preset_view'
30
-
31
- require_relative 'base/ai_summary_version'
32
-
33
- require_relative 'base/force'
34
- require_relative 'base/pages_workflow'
35
- require_relative 'base/kickstand'
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Base
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'base/date_time'
11
+ require_relative 'base/page_info'
12
+ require_relative 'base/location_classification_type'
13
+ require_relative 'base/location_node'
14
+ require_relative 'base/location_structure'
15
+ require_relative 'base/person_member'
16
+ require_relative 'base/file_attachment'
17
+ require_relative 'base/file_container'
18
+ require_relative 'base/field'
19
+ require_relative 'base/page'
20
+ require_relative 'base/resource'
21
+ require_relative 'base/action_category'
22
+ require_relative 'base/action'
23
+ require_relative 'base/contractor_entity'
24
+ require_relative 'base/preview_page'
25
+ require_relative 'base/delta_result'
26
+ require_relative 'base/organization'
27
+
28
+ require_relative 'base/register'
29
+ require_relative 'base/preset_view'
30
+
31
+ require_relative 'base/ai_summary_version'
32
+
33
+ require_relative 'base/force'
34
+ require_relative 'base/pages_workflow'
35
+ require_relative 'base/kickstand'
36
+
37
+ require_relative 'base/template'
@@ -1,41 +1,41 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Builder
5
- class ContractorEntity
6
- attr_reader :client
7
-
8
- def initialize(client)
9
- @client = client
10
- end
11
-
12
- def create(**kargs, &block)
13
- createMutation.query(**kargs, &block)
14
- end
15
-
16
- def update(**kargs, &block)
17
- updateMutation.query(**kargs, &block)
18
- end
19
-
20
- def destroy(**kargs, &block)
21
- destroyMutation.query(**kargs, &block)
22
- end
23
-
24
- private
25
-
26
- def createMutation
27
- Mutation::ContractorEntity::Create.new(client)
28
- end
29
-
30
- def updateMutation
31
- Mutation::ContractorEntity::Update.new(client)
32
- end
33
-
34
- def destroyMutation
35
- Mutation::ContractorEntity::Destroy.new(client)
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Builder
5
+ class ContractorEntity
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def create(**kargs, &block)
13
+ createMutation.query(**kargs, &block)
14
+ end
15
+
16
+ def update(**kargs, &block)
17
+ updateMutation.query(**kargs, &block)
18
+ end
19
+
20
+ def destroy(**kargs, &block)
21
+ destroyMutation.query(**kargs, &block)
22
+ end
23
+
24
+ private
25
+
26
+ def createMutation
27
+ Mutation::ContractorEntity::Create.new(client)
28
+ end
29
+
30
+ def updateMutation
31
+ Mutation::ContractorEntity::Update.new(client)
32
+ end
33
+
34
+ def destroyMutation
35
+ Mutation::ContractorEntity::Destroy.new(client)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,35 +1,35 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Compat
5
- # Wraps a GraphQL mutation payload to expose the v2-compatible response interface.
6
- # Scripts check .success? and .status after update/create operations.
7
- class Response
8
- def initialize(payload)
9
- @payload = payload
10
- end
11
-
12
- def success?
13
- @payload.success?
14
- end
15
-
16
- def error?
17
- @payload.error?
18
- end
19
-
20
- def status
21
- @payload.error? ? :error : :ok
22
- end
23
-
24
- def body
25
- @payload.error_doc
26
- end
27
-
28
- def item
29
- @payload.item
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Compat
5
+ # Wraps a GraphQL mutation payload to expose the v2-compatible response interface.
6
+ # Scripts check .success? and .status after update/create operations.
7
+ class Response
8
+ def initialize(payload)
9
+ @payload = payload
10
+ end
11
+
12
+ def success?
13
+ @payload.success?
14
+ end
15
+
16
+ def error?
17
+ @payload.error?
18
+ end
19
+
20
+ def status
21
+ @payload.error? ? :error : :ok
22
+ end
23
+
24
+ def body
25
+ @payload.error_doc
26
+ end
27
+
28
+ def item
29
+ @payload.item
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,11 +1,11 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Connection
5
- class Action < Logic::Connection
6
- class_resolver :node_class, Model::Action
7
- end
8
- end
9
- end
10
- end
11
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Connection
5
+ class Action < Logic::Connection
6
+ class_resolver :node_class, Model::Action
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end