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
data/.rubocop.yml DELETED
@@ -1,121 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 3.2
3
- Exclude:
4
- - 'config/routes.rb'
5
- NewCops: enable
6
-
7
- Metrics/ClassLength:
8
- Max: 350
9
- Metrics/ModuleLength:
10
- Max: 400
11
- Metrics/MethodLength:
12
- Max: 100
13
- Metrics/BlockLength:
14
- CountAsOne: ['array', 'heredoc', 'method_call']
15
- Max: 50
16
- Metrics/AbcSize:
17
- Max: 30
18
- Metrics/ParameterLists:
19
- Max: 5
20
- CountKeywordArgs: false
21
- Metrics/CyclomaticComplexity:
22
- Max: 30
23
- Metrics/PerceivedComplexity:
24
- Max: 30
25
-
26
- Layout/HashAlignment:
27
- EnforcedColonStyle: table
28
- EnforcedHashRocketStyle: table
29
-
30
- Style/BlockDelimiters:
31
- BracesRequiredMethods: ['log']
32
- AllowedMethods: ['proc', 'new']
33
- Enabled: false
34
- Style/HashSyntax:
35
- EnforcedShorthandSyntax: either
36
- EnforcedStyle: no_mixed_keys
37
- Style/ArgumentsForwarding:
38
- UseAnonymousForwarding: false
39
- Style/ClassAndModuleChildren:
40
- Enabled: false
41
- Style/FrozenStringLiteralComment:
42
- Enabled: false
43
- Style/StringLiterals:
44
- Enabled: false
45
- Style/Documentation:
46
- Enabled: false
47
- Style/CommentedKeyword:
48
- Enabled: false
49
- Layout/LeadingCommentSpace:
50
- Enabled: false
51
- AllowGemfileRubyComment: true
52
- Style/MultilineBlockChain:
53
- Enabled: false
54
- Style/StringLiteralsInInterpolation:
55
- Enabled: false
56
- Style/AndOr:
57
- Enabled: false
58
- Style/Alias:
59
- EnforcedStyle: prefer_alias_method
60
- Style/FetchEnvVar:
61
- Enabled: false
62
- Style/RegexpLiteral:
63
- EnforcedStyle: mixed
64
- AllowInnerSlashes: true
65
-
66
- Layout/LineLength:
67
- Enabled: false
68
- Layout/SpaceInsideHashLiteralBraces:
69
- Enabled: false
70
- Layout/SpaceInsideBlockBraces:
71
- Enabled: false
72
- Layout/SpaceAroundOperators:
73
- Enabled: false
74
- Layout/ExtraSpacing:
75
- AllowForAlignment: true
76
- Layout/AccessModifierIndentation:
77
- EnforcedStyle: indent
78
- Layout/DotPosition:
79
- EnforcedStyle: trailing
80
- Layout/MultilineMethodCallIndentation:
81
- EnforcedStyle: indented
82
- Layout/FirstHashElementIndentation:
83
- Enabled: false
84
- Layout/EmptyLineAfterGuardClause:
85
- Enabled: false
86
- Layout/EndOfLine:
87
- Enabled: false
88
-
89
- Naming/VariableNumber:
90
- EnforcedStyle: snake_case
91
- CheckSymbols: false
92
- Naming/MethodParameterName:
93
- # id/ids are standard entity identifiers; clientMutationId is the canonical
94
- # GraphQL/Relay mutation field name (camelCase by design — see Naming/MethodName).
95
- AllowedNames: ['x', 'y', 'i', 'j', 'id', 'ids', 'clientMutationId']
96
- Naming/VariableName:
97
- # clientMutationId mirrors the GraphQL schema field name verbatim.
98
- AllowedIdentifiers: ['clientMutationId']
99
- Naming/RescuedExceptionsVariableName:
100
- Enabled: false
101
- Naming/MethodName:
102
- Enabled: false
103
- Naming/BlockForwarding:
104
- Enabled: false
105
-
106
- # fragment.rb intentionally defines a top-level `Fragment` namespace (for client
107
- # scripts) alongside the gem's `Ecoportal::API::GraphQL::Fragment`.
108
- Style/OneClassPerFile:
109
- Exclude:
110
- - 'lib/ecoportal/api/graphql/fragment.rb'
111
-
112
- # Gem entry point mirrors the hyphenated gem name `ecoportal-api-graphql`.
113
- Naming/FileName:
114
- Exclude:
115
- - 'lib/ecoportal/api-graphql.rb'
116
-
117
- # QueryArray#each intentionally re-enters the enumerator with connection_block,
118
- # not the verbatim method arguments.
119
- Lint/ToEnumArguments:
120
- Exclude:
121
- - 'lib/ecoportal/api/graphql/logic/query_array.rb'
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.2.2
data/.yardopts DELETED
@@ -1,10 +0,0 @@
1
- --readme README.md
2
- --charset utf-8
3
- --markup-provider=redcarpet
4
- --markup=markdown
5
- --no-private
6
- --output-dir ./doc
7
- 'lib/**/*.rb'
8
- -
9
- CHANGELOG.md
10
- LICENSE
data/CLAUDE.md DELETED
@@ -1,243 +0,0 @@
1
- # CLAUDE.md — ecoportal-api-graphql
2
-
3
- AI agent instructions for working in this repository. Read this before touching any code.
4
-
5
- ---
6
-
7
- ## Read these first — every session
8
-
9
- ```
10
- docs/worklog.md ← current state, blockers, open questions
11
- .ai-assistance/projects/<slug>/TODO.md ← active project task list
12
- .ai-assistance/local/paths.json ← local paths to sibling repos (gitignored — machine-specific)
13
- .ai-assistance/bridge/CLAUDE.md ← bridge protocol: format, lifecycle, cross-repo requests
14
- .ai-assistance/bridge/inbox/ <- unread cross-project bridge messages (PENDING = unread); surfaced at session start by .ai-assistance/scripts/bridge-inbox-check.sh
15
- .ai-assistance/code/ecoPortal_architecture/ ← VERIFIED PLATFORM KNOWLEDGE — how the platform behaves
16
- (data model, API layers, page/stage workflows, fields, search).
17
- Read 00_overview_and_index first, then the area file for the
18
- task at hand, BEFORE implementing platform logic. See ADR-012.
19
- ```
20
-
21
- > Platform behaviour is documented in `ecoPortal_architecture/` for a reason: do not infer a
22
- > stage/workflow/field rule from code alone when a verified note exists. If you confirm a new
23
- > platform fact, add it to the relevant doc with its evidence (`file:line` or "confirmed by
24
- > &lt;user&gt; on &lt;date&gt;") in the same session -- that tree is the durable, shared home.
25
-
26
- ---
27
-
28
- ## Repository Role
29
-
30
- `ecoportal-api-graphql` is a **Ruby gem** that provides a GraphQL client layer on top of EcoPortal's REST API infrastructure. It sits between the upstream API gems and downstream consumer code.
31
-
32
- **Dependency chain:**
33
-
34
- ```
35
- [graphql-ruby] [graphql-client] [graphlient] (upstream, external/forked)
36
-
37
- ecoportal-api / ecoportal-api-v2 (upstream, team-managed)
38
-
39
- ecoportal-api-graphql ← THIS REPO
40
-
41
- eco-helpers (downstream, team-managed)
42
- ```
43
-
44
- Backwards compatibility with `eco-helpers` must be preserved unless explicitly broken by the developer.
45
-
46
- **For full dependency details — local paths, remotes, fork relationships, and access notes — see `.ai-assistance/code/dependencies.md`.**
47
-
48
- ---
49
-
50
- ## Key Folder Layout
51
-
52
- ```
53
- lib/ecoportal/api/graphql/ Main gem code
54
- base/ Base model classes (data structures)
55
- builder/ Builder pattern classes
56
- concerns/ Shared modules (mixins)
57
- connection/ GraphQL connection types
58
- error/ Error classes
59
- fragment/ GraphQL fragment definitions
60
- helpers/ Utility helpers
61
- input/ Mutation input objects
62
- interface/ GraphQL interface types
63
- logic/ Query/mutation execution logic
64
- model/ Domain model classes
65
- mutation/ Mutation definitions
66
- payload/ Mutation response payloads
67
- query/ Query definitions
68
-
69
- lib/ecoportal/api/common/graphql/ Shared/common GraphQL utilities
70
-
71
- spec/ecoportal/ RSpec specs (mirrors lib/ structure)
72
- tests/ Manual integration test scripts
73
- .ai-assistance/ AI agent resources (see below)
74
- ```
75
-
76
- ---
77
-
78
- ## .ai-assistance/ Resources
79
-
80
- All AI agent tooling lives under `.ai-assistance/`. **Read relevant docs before analysing code.**
81
-
82
- | Path | Purpose |
83
- |------|---------|
84
- | `.ai-assistance/skills/` | Skill definitions — see each `SKILL.md` |
85
- | `.ai-assistance/code/` | Code specs for AI (per-area markdown docs) |
86
- | `.ai-assistance/code/dependencies.md` | Full dependency map with local paths and remote URLs |
87
- | `.ai-assistance/code/refactoring/` | Refactoring opportunity log |
88
- | `.ai-assistance/projects/` | Project intent, TODOs, and decision logs |
89
- | `.ai-assistance/integrations/` | Optional dev tool integrations (GitLab MCP, GitKraken MCP, local git) |
90
-
91
- ### Commit authorship
92
-
93
- **Default: developer only.** Do not add `Co-Authored-By: Claude ...` to commits unless
94
- the developer explicitly requests it for a specific commit.
95
-
96
- ### Available Skills
97
-
98
- | Skill | SKILL.md | Purpose |
99
- |-------|----------|---------|
100
- | `ep-ai-manager` | `.ai-assistance/skills/ep-ai-manager/SKILL.md` | Check alignment with ep-ai-standards |
101
- | `ruby-scripting` | `.ai-assistance/skills/ruby-scripting/SKILL.md` | Guidelines for scripts using ecoportal gem stack |
102
- | `gemini-assist` | `.ai-assistance/skills/gemini-assist/SKILL.md` | Offload large-context tasks to Gemini |
103
- | `ai-instructions` | `.ai-assistance/skills/ai-instructions/SKILL.md` | Manage CLAUDE.md and skill files |
104
- | `code-specs` | `.ai-assistance/skills/code-specs/SKILL.md` | Write/update AI-readable code documentation |
105
- | `spec-generation` | `.ai-assistance/skills/spec-generation/SKILL.md` | Generate RSpec specs for backwards-compat |
106
- | `refactor` | `.ai-assistance/skills/refactor/SKILL.md` | Identify and log refactoring opportunities |
107
- | `project-cycle` | `.ai-assistance/skills/project-cycle/SKILL.md` | Project planning, TODOs, decisions |
108
- | `procedural-memory` | `.ai-assistance/skills/procedural-memory/SKILL.md` | Distill recurring work routines and surface likely next steps |
109
-
110
- ---
111
-
112
- ## Permissions & Autonomy
113
-
114
- Read `.ai-assistance/conventions/permission-guidance.md` to understand:
115
- - Which operations require confirmation vs. proceed autonomously (autonomy zones)
116
- - When and how to suggest new allowlist entries to the developer
117
- - Project vs. global scope for `settings.json` rules
118
- - How to handle compound `cd path && cmd` patterns in sibling repos
119
-
120
- ---
121
-
122
- ## Running Tests
123
-
124
- ```bash
125
- # Full suite
126
- bundle exec rspec
127
-
128
- # Single file
129
- bundle exec rspec spec/ecoportal/api/graphql/input/search_conf_spec.rb
130
-
131
- # Live AI tests (requires ANTHROPIC_API_KEY — loaded automatically from .env)
132
- bundle exec rspec spec/ecoportal/api/graphql/input/search_conf/ai_generator_spec.rb --tag live
133
- ```
134
-
135
- **Live tests:** `.env` is loaded via `dotenv` in `spec_helper.rb`. Add `ANTHROPIC_API_KEY=sk-ant-...` to `.env` (gitignored) — no need to export to shell.
136
-
137
- ---
138
-
139
- ## Conventions
140
-
141
- - **Namespace:** `Ecoportal::API::GraphQL` — capital G, Q, L, matching the `class GraphQL` declaration in `lib/ecoportal/api/graphql.rb`
142
- - **File/class mirroring:** File path mirrors the class namespace exactly.
143
- - **Spec mirroring:** Spec files mirror `lib/` structure under `spec/`.
144
- - **Code spec docs:** For every area analysed, a corresponding `.ai-assistance/code/<area>.md` should exist or be created/updated.
145
- - **No silent breaking changes:** Any change that affects the public interface of this gem must be noted in the active project's DECISIONS log and confirmed with the developer.
146
- - **Gemini responses must be verified** before applying — Gemini hallucinates details. Always cross-check against actual code.
147
- - **Rubocop:** All generated Ruby code must comply with `.rubocop.yml`. Run `bundle exec rubocop <file>` to verify.
148
-
149
- ---
150
-
151
- ## First Session on a New Machine
152
-
153
- If `.ai-assistance/local_paths.md` does not exist, run the collaborator setup flow from the `project-cycle` skill **before** any other work. In short:
154
-
155
- - Ask which upstream/downstream repos the developer has cloned locally.
156
- - In Cowork: offer to connect each folder. In Claude Code: ask for the path or locate it via shell.
157
- - Create `.ai-assistance/local_paths.md` from `.ai-assistance/local_paths.example.md` with their confirmed paths.
158
- - If a repo isn't available locally, offer to fetch what's needed from the remote URL instead.
159
-
160
- ---
161
-
162
- ## Before Starting Any Task
163
-
164
- 1. Check `.ai-assistance/local_paths.md` — if missing, run First Session setup above before proceeding.
165
- 2. Check `.ai-assistance/projects/` for an active project file.
166
- 3. Check `.ai-assistance/code/` for an existing spec doc covering the area you'll work in.
167
- 4. Check `.ai-assistance/code/dependencies.md` if the task touches upstream or downstream gems.
168
- 5. Check `.ai-assistance/code/refactoring/` for logged opportunities relevant to the area.
169
- 6. If none of the above exist for your area — create them as you go (see `code-specs` skill).
170
-
171
- ## Before Making Working Tree Changes (Claude Code only)
172
-
173
- If you are about to modify files outside `bridge/inbox/` or `bridge/outbox/`, follow the
174
- working tree safety protocol **before touching anything**:
175
-
176
- Full protocol: `.ai-assistance/conventions/code-working-tree-protocol.md`
177
-
178
- Summary:
179
- 1. Check for `.ai-assistance/bridge/LOCK` — stop and inform user if actively locked
180
- 2. Acquire lock (watermark: agent, user, timestamp, expiry, intent, files)
181
- 3. Check for unstaged changes that overlap with your planned files — if overlap, commit them first as `wip: <description>`; if no overlap, proceed without touching them
182
- 4. Apply your changes
183
- 5. Commit with a descriptive message
184
- 6. Release lock (`rm .ai-assistance/bridge/LOCK`)
185
-
186
- ---
187
-
188
- ## Bridge: CoWork ↔ Claude Code
189
-
190
- A file-based channel for delegating tasks between CoWork and Code.
191
- Full protocol: `.ai-assistance/bridge/CLAUDE.md`
192
-
193
- ### On every Code session startup
194
-
195
- **Before responding to the user, read the bridge status file:**
196
-
197
- ```bash
198
- cat .ai-assistance/bridge/STATUS 2>/dev/null || echo "no status yet"
199
- ```
200
-
201
- The `SessionStart` hook runs `bridge-init.sh` automatically and writes its output to
202
- `bridge/STATUS`. Reading this file tells you immediately whether there are pending tasks.
203
-
204
- If `pending > 0`: tell the user "I have N pending bridge task(s): [list]" and ask whether
205
- to process them now before starting other work.
206
-
207
- If the STATUS file is missing (first session or hook didn't run): run manually:
208
- ```bash
209
- bash .ai-assistance/scripts/bridge-init.sh
210
- ```
211
-
212
- ### Why Code doesn't report pending tasks automatically on startup
213
-
214
- Claude Code is passive — it waits for a user prompt before doing anything, regardless
215
- of what hooks run or what this file says. The `SessionStart` hook runs `bridge-init.sh`
216
- and writes `bridge/STATUS`, but Code will not speak unprompted.
217
-
218
- **The intended workflow:** at the start of each session, ask:
219
- > "Any pending tasks?"
220
-
221
- Code will read `bridge/STATUS` (already written by the hook) and report immediately.
222
- This is one short question — the right tradeoff for an interactive tool.
223
-
224
- Hook stdout is also not injected into Code's context — only the STATUS file is readable.
225
- Do not attempt to use hook output as a message source; write to a file instead.
226
-
227
- ### Before writing a bridge task
228
-
229
- Check `.ai-assistance/capabilities/[your-env].md` — only bridge what you genuinely cannot do yourself.
230
-
231
- ### Key paths
232
-
233
- | Path | Purpose |
234
- |------|---------|
235
- | `.ai-assistance/bridge/inbox/` | Tasks waiting to be processed |
236
- | `.ai-assistance/bridge/outbox/` | Completed results |
237
- | `.ai-assistance/bridge/archive/` | Completed pairs (audit trail) |
238
- | `.ai-assistance/bridge/STATUS` | Bridge status file written by bridge-init.sh on session start |
239
- | `.ai-assistance/bridge/LOCK` | Working tree lock file (never commit; gitignored) |
240
- | `.ai-assistance/capabilities/` | Per-environment capability registry |
241
- | `.ai-assistance/capabilities/assumptions-log.md` | Dated assumptions + verification status |
242
- | `.ai-assistance/conventions/` | Instruction file structure rules |
243
- | `.ai-assistance/scripts/` | Token-offload scripts (see `scripts/CLAUDE.md`) |
data/Gemfile DELETED
@@ -1,30 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in ecoportal-api.gemspec
6
- gemspec
7
-
8
- # Pin graphlient to our fork's FROZEN release branch `pre-v0.0.9` (a snapshot of the fork's
9
- # master, which carries the DSL/directive work — #115 to_query_string/spread, #116 directives
10
- # DSL / on(:Type) / fragment(:Name); lib/ is byte-identical to feature/directives-dsl-support).
11
- # Frozen so the gem (and downstream repos) pin a stable ref, not a moving feature branch.
12
- # Revisit when the fork cuts a real gem release (>= 0.8.x with these features published).
13
- # Frozen: 2026-07-02.
14
- gem 'graphlient', git: 'https://github.com/rellampec/graphlient.git',
15
- branch: 'pre-v0.0.9'
16
-
17
- # NOTE: no graphql-client override. It is a TRANSITIVE dependency of graphlient and
18
- # resolves to the published 0.26.0 — this gem does not use graphql-client directly
19
- # (queries go through the graphlient DSL; the Group-3 refactor removed `client.parse`),
20
- # so the fork's revival MRs (#79–#82, still unattended upstream) are not required here.
21
- # FUTURE: we plan to retake the graphql-client fork revival and land more graphlient +
22
- # ecoportal-api-graphql features (and downstream) — re-introduce a pin at that point.
23
- # See memory: project-fork-revival-strategy / project-graphql-client-redesign.
24
-
25
- # Optional — only needed for SearchConf::AIGenerator live tests.
26
- # Not added to gemspec; callers must install it themselves.
27
- # Uses http source to bypass local SSL inspection (e.g. Norton Antivirus).
28
- source 'http://rubygems.org' do
29
- gem 'anthropic'
30
- end
data/Rakefile DELETED
@@ -1,90 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
4
- require 'yard'
5
- require 'redcarpet'
6
-
7
- desc 'run the specs'
8
- RSpec::Core::RakeTask.new(:spec)
9
-
10
- desc 'run rspec showing backtrace'
11
- RSpec::Core::RakeTask.new(:spec_trace) do |task|
12
- task.rspec_opts = ['--backtrace']
13
- end
14
- task :rspec_trace => :spec_trace
15
-
16
- desc 'run rspec stopping on first fail, and show backtrace'
17
- RSpec::Core::RakeTask.new(:spec_fast) do |task|
18
- task.rspec_opts = ['--fail-fast', '--backtrace']
19
- end
20
- task :rspec_fast => :spec_fast
21
-
22
- desc 'run rubocop diaplying cop names'
23
- RuboCop::RakeTask.new(:rubocop) do |t|
24
- t.options = ['--display-cop-names']
25
- end
26
-
27
- # default task name is yard
28
- desc 'Yard: generate all the documentation'
29
- YARD::Rake::YardocTask.new(:doc) do |t|
30
- #t.files = ['lib/**/*.rb']
31
- end
32
-
33
- desc 'Generate JSON dependency/structure map -> .ai-assistance/code/dep-graph.json'
34
- task :dep_graph do
35
- load '.ai-assistance/scripts/dep_graph.rb'
36
- output = '.ai-assistance/code/dep-graph.json'
37
- DepGraph.run(lib_dir: 'lib', output_path: output)
38
- puts "Written -> #{output}"
39
- end
40
-
41
- desc 'Detect workflow-space schema drift: COMMAND_MAP vs stored introspection + SCHEMA_VERSION currency'
42
- task :schema_drift do
43
- require 'json'
44
-
45
- schema_glob = '.ai-assistance/tmp/*_live_ep_graphql_schema.graphql.json'
46
- schema_files = Dir[schema_glob]
47
- abort "No schema file at #{schema_glob} — re-run introspection first" if schema_files.empty?
48
-
49
- schema_path = schema_files.last
50
- puts "Schema: #{schema_path}"
51
- schema_date = File.basename(schema_path)[/\d{8}/]
52
-
53
- schema = JSON.parse(File.read(schema_path))
54
- types = schema.dig('data', '__schema', 'types').to_h { |t| [t['name'], t] }
55
- wci = types['WorkflowCommandInput'] or abort('WorkflowCommandInput not found in schema')
56
-
57
- schema_keys = Set.new(wci['inputFields'].map { |f| f['name'] })
58
-
59
- cmd_src = File.read('lib/ecoportal/api/graphql/input/workflow_command.rb')
60
- gem_keys = Set.new(cmd_src.scan(/^\s+(\w+):\s+'Ecoportal/).flatten)
61
-
62
- added = (schema_keys - gem_keys).sort
63
- removed = (gem_keys - schema_keys).sort
64
-
65
- puts "\n=== WorkflowCommandInput (#{schema_keys.size} schema / #{gem_keys.size} gem) ==="
66
- if added.empty? && removed.empty?
67
- puts "In sync — no drift"
68
- else
69
- added.each { |k| puts " + #{k} (in schema, missing from COMMAND_MAP)" }
70
- removed.each { |k| puts " - #{k} (in COMMAND_MAP, absent from schema)" }
71
- end
72
-
73
- puts "\n=== SCHEMA_VERSION constants (expected #{schema_date}) ==="
74
- mismatches = []
75
- Dir['lib/**/*.rb'].each do |f|
76
- File.read(f).scan(/SCHEMA_VERSION\s*=\s*'(\d+)'\.freeze/).each do |m|
77
- mismatches << " #{f}: '#{m[0]}'" if m[0] != schema_date
78
- end
79
- end
80
- mismatches.empty? ? puts("All match #{schema_date}") : mismatches.each { |m| puts m }
81
-
82
- abort "\nDrift detected — update gem files before bumping schema date" unless added.empty? && removed.empty?
83
- end
84
-
85
- desc 'default task: runs rubocop and rspec'
86
- task :default do
87
- Rake::Task[:rubocop].invoke
88
- ensure
89
- Rake::Task[:spec].invoke
90
- end
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "ecoportal/api-graphql"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "pry"
14
- Pry.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/bin/setup.ps1 DELETED
@@ -1,6 +0,0 @@
1
-
2
- <# For mor information on Strict-Mode, visit:
3
- https://devblogs.microsoft.com/scripting/enforce-better-script-practices-by-using-set-strictmode/ #>
4
- Set-StrictMode -Version 1.0
5
-
6
- bundle install
@@ -1,88 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: architecture
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft
8
- ---
9
-
10
- # Architecture -- ecoportal-api-graphql
11
-
12
- **Scope:** High-level structure only. Deep per-area detail lives in `.ai-assistance/code/`
13
- (`code-specs`); link to it rather than duplicating.
14
-
15
- ## Top-level structure
16
-
17
- | Directory | Role |
18
- |---|---|
19
- | `lib/` | The gem source. `lib/ecoportal/api/graphql/` holds the layered client; `lib/ecoportal/api/common/graphql/` holds shared utilities (HTTP client, base model, helpers, patches). |
20
- | `spec/` | RSpec specs, mirroring the `lib/` structure. |
21
- | `tests/` | Manual integration test scripts (live-API characterization, not the RSpec suite). |
22
- | `bin/` | Development console / helper executables. |
23
- | `scripts/` | Token-offload and tooling scripts (see `scripts/CLAUDE.md`). |
24
- | `docs/` | Human docs, worklog, and this self-docs set. |
25
- | `.ai-assistance/` | AI agent resources: code-specs, project intent/TODOs, skills, bridge, conventions. |
26
- | `.claude/` | Claude Code settings and hooks for this repo. |
27
-
28
- ## Key components
29
-
30
- Reused from `.ai-assistance/code/OVERVIEW.md` and `.ai-assistance/code/ecoPortal_architecture/`;
31
- not re-analysed here.
32
-
33
- - **Main class `Ecoportal::API::GraphQL`** (`lib/ecoportal/api/graphql.rb`) -- the public entry
34
- point, instantiated with credentials (email, pass, org_id, host). Exposes builders and
35
- convenience shortcuts per domain.
36
- - **`Common::GraphQL::Client`** (`lib/ecoportal/api/common/graphql/client.rb`) -- the HTTP layer,
37
- extending `Graphlient::Client`. Handles auth (`AuthService`), org context, and timeouts;
38
- `no_schema: true` is always passed, so schema introspection is disabled and queries are not
39
- validated against a schema at build time.
40
- - **Layered namespace** under `Ecoportal::API::GraphQL::` (folder mirrors module exactly):
41
- `Builder` (developer-facing facade per domain) -> `Query` / `Mutation` (operation definitions)
42
- -> `Logic` (execution: base_query, base_model, payload, input, connection) -> `Fragment`
43
- (fragment strings) -> `Model` (read-side response models), `Input` / `Payload` (write side) ->
44
- `Base` (shared base classes), `Interface` (GraphQL interface types) -> `Common::GraphQL::Client`.
45
- - **`Compat::` layer** -- v2 compatibility shims (`Pages`, `Registers`, `StageView`,
46
- `StageCollection`, etc.) that let `eco-helpers` treat `graphql` as a drop-in for the older `apiv2`
47
- interface.
48
- - **`Diff::` and `Builder::TemplateBuilder`** -- the template build-and-maintenance engine
49
- (self-version and cross-object diff, pairing engine + ledger, `Change`-to-`WorkflowCommand`
50
- synthesis, unified BUILD emitter). This is where current development is concentrated.
51
-
52
- ## How they fit
53
-
54
- A consumer instantiates `Ecoportal::API::GraphQL` with credentials, then calls a `Builder` for the
55
- domain it wants (page, template, action, contractor entity, location structure). The builder
56
- composes `Query`/`Mutation` operations, which the `Logic` layer executes through
57
- `Common::GraphQL::Client` over HTTP. Fragments are assembled at query build time
58
- (`BaseQuery#assemble_fragments` scans query strings for `...FragmentName` spreads). Responses parse
59
- into `Model` objects (read side); mutations take `Input` objects and return `Payload` objects
60
- (write side). The `Compat` layer re-exposes this so downstream `eco-helpers` scripts keep working
61
- unchanged.
62
-
63
- ## Entry points
64
-
65
- - `require 'ecoportal/api-graphql'` loads `ecoportal-api-v2` (and transitively `ecoportal-api`),
66
- the version file, `ecoportal/api/common.graphql`, then `ecoportal/api/graphql`.
67
- - Runtime entry is `Ecoportal::API::GraphQL.new(email:, pass:, org_id:, host:)`.
68
-
69
- ## Build / test tooling
70
-
71
- - Build: RubyGems / Bundler. Gem spec: `ecoportal-api-graphql.gemspec`. Version constant:
72
- `Ecoportal::API::GRAPQL_VERSION`.
73
- - Tests: RSpec (`bundle exec rspec`). Live AI tests are `--tag live` and require `ANTHROPIC_API_KEY`
74
- loaded from `.env` via `dotenv`.
75
- - CI: no CI config file was detected at the repo root by the scanner (`ci_files: []`).
76
- <!-- TODO(human): confirm whether CI runs elsewhere (e.g. GitLab CI defined outside root) or is absent. -->
77
-
78
- ## Links to detailed docs
79
-
80
- - `.ai-assistance/code/OVERVIEW.md` -- gem overview, entry points, namespace convention.
81
- - `.ai-assistance/code/ecoPortal_architecture/00_overview_and_index.md` -- verified platform
82
- knowledge index (data model, API layers, page/stage workflows, fields, search).
83
- - `.ai-assistance/code/ecoPortal_architecture/11_integration_gems.md` -- the integration gem stack.
84
- - `.ai-assistance/code/dependencies.md` -- full dependency map (remotes, fork relationships).
85
- - `.ai-assistance/code/diff_pairing_engine.md`, `.ai-assistance/code/diff_service_deep_dive.md`,
86
- `.ai-assistance/code/template_diff_pairing_domain.md` -- the template diff/build engine.
87
- - `.ai-assistance/code/data_fields.md`, `.ai-assistance/code/graphql_domain_knowledge.md`,
88
- `.ai-assistance/code/schema_analysis.md` -- data-field and schema detail.
@@ -1,12 +0,0 @@
1
- {"ts": "2026-07-06T11:14:43Z", "file": "docs/self-docs/OVERVIEW.md", "change": "created", "from_hash": null, "to_hash": "a43c976a85ebfad6"}
2
- {"ts": "2026-07-06T11:14:43Z", "file": "docs/self-docs/ARCHITECTURE.md", "change": "created", "from_hash": null, "to_hash": "b0989977a912aab1"}
3
- {"ts": "2026-07-06T11:14:43Z", "file": "docs/self-docs/CONVENTIONS.md", "change": "created", "from_hash": null, "to_hash": "1649159eb799a7b8"}
4
- {"ts": "2026-07-06T11:14:43Z", "file": "docs/self-docs/INTEGRATIONS.md", "change": "created", "from_hash": null, "to_hash": "bae9f91748e33af1"}
5
- {"ts": "2026-07-06T11:14:43Z", "file": "docs/self-docs/STATUS.md", "change": "created", "from_hash": null, "to_hash": "08841d1d45eea2d6"}
6
- {"ts": "2026-07-06T11:15:00Z", "file": "docs/self-docs/OVERVIEW.md", "change": "updated", "from_hash": "a43c976a85ebfad6", "to_hash": "391055c9a6a687b9"}
7
- {"ts": "2026-07-06T11:15:00Z", "file": "docs/self-docs/ARCHITECTURE.md", "change": "updated", "from_hash": "b0989977a912aab1", "to_hash": "ad05f25b95b49c00"}
8
- {"ts": "2026-07-09T07:08:00Z", "file": "docs/self-docs/OVERVIEW.md", "change": "updated", "from_hash": "391055c9a6a687b9", "to_hash": "c403012498ab9247"}
9
- {"ts": "2026-07-09T07:08:00Z", "file": "docs/self-docs/INTEGRATIONS.md", "change": "updated", "from_hash": "bae9f91748e33af1", "to_hash": "d271ac76361e4638"}
10
- {"ts": "2026-07-09T07:08:00Z", "file": "docs/self-docs/STATUS.md", "change": "updated", "from_hash": "08841d1d45eea2d6", "to_hash": "1acf51a3e7822dfb"}
11
- {"ts": "2026-07-09T07:08:00Z", "file": "docs/self-docs/COMPLIANCE.md", "change": "created", "from_hash": null, "to_hash": "1e72c2356b4e3579"}
12
- {"ts": "2026-07-09T07:08:00Z", "file": "docs/self-docs/OPERATIONS.md", "change": "created", "from_hash": null, "to_hash": "878b50d02339acb7"}