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
@@ -1,79 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: compliance
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft # audit answers MUST come from 'reviewed' docs only -- a human sets this
8
- ---
9
-
10
- # Compliance -- ecoportal-api-graphql
11
-
12
- **Purpose:** the audit / privacy / ISO-27001 surface for this project. It lets ROVO (over the EP Projects
13
- Register) answer compliance questions across the fleet. **Trust rule:** everything here separates
14
- EVIDENCE (a fact or link) from INTENT (planned); a reviewer must set `review_status: reviewed` before an
15
- answer built on this doc is used for audit or re-certification -- a confident answer on unreviewed content
16
- would mislead an auditor.
17
-
18
- > This document is DRAFT and was composed from the repo's own context (CLAUDE.md, the
19
- > `.ai-assistance/code/` specs, and the active project INTENT). Fields marked PLANNED or "human to
20
- > confirm" MUST be verified by the repo owner before any audit use.
21
-
22
- ## ISO 27001
23
-
24
- This is a Ruby client library (a gem), not a hosted service; it holds no infrastructure of its own and
25
- introduces no independent ISO-27001 control surface. Its compliance posture is inherited from (a) the
26
- ecoPortal platform it authenticates against and (b) the consuming project's runtime environment. The
27
- control this repo DOES own is access-scoping of the automation that uses it.
28
-
29
- | Control area | Status (evidence / planned) | Evidence link |
30
- |---|---|---|
31
- | Access control / least privilege (A.9) | EVIDENCE: the template-automation work is required to run under a per-org SERVICE ACCOUNT scoped to templates/org-config only, with page records structurally out of scope by credential grant (ep-ai-standards `security/ai-service-account-scope`). | `.ai-assistance/projects/template-automatic-build-maintenance/INTENT.md`; `security/ai-service-account-scope` standard |
32
- | Change control (A.12.1) | EVIDENCE: no silent breaking changes -- public-interface changes are recorded in the active project's DECISIONS log and confirmed with the developer; semver + CHANGELOG. | `CLAUDE.md`; `CHANGELOG.md` |
33
- | Input validation (A.14.2) | EVIDENCE: `no_schema: true` disables build-time schema validation; the compensating control is a query validator now covering mutations. | `.ai-assistance/code/` (query validator); `ARCHITECTURE.md` |
34
- | Auditability of automated changes | PLANNED / human to confirm: template BUILD/diff emits an ordered `WorkflowCommand` batch and a pairing ledger; whether that stream is retained as an audit trail for re-certification needs owner confirmation. | `.ai-assistance/code/diff_pairing_engine.md` |
35
-
36
- ## Data handled
37
-
38
- The gem can read and write live ecoPortal domain objects through the API. Data classification is by
39
- CAPABILITY (what the client can touch), then narrowed by the credential scope in use at runtime.
40
-
41
- | Data class (none/team/customer/PII) | What / where | Treatment + retention | Exposed? (how) |
42
- |---|---|---|---|
43
- | Customer data + PII | Page records read/written via the GraphQL API (can contain personal data). | In-memory only during a client session; the gem persists nothing itself. Retention lives in the ecoPortal platform, not here. | Not exposed by the gem beyond the authenticated API call. Read/write capability is gated by the runtime credential; template-automation deliberately excludes page records by service-account scope. |
44
- | Customer/org config (non-PII) | Templates, location structures, org configuration. | In-memory during a session; changes applied via `WorkflowCommand` batches. Retention in the platform. | Only via the authenticated API; this is the scope the template-automation service account is limited to. |
45
- | Team-only | `.env` credentials for live tests (`ANTHROPIC_API_KEY`, ecoPortal creds via dotenv). | Local `.env`, gitignored; loaded only for `--tag live` specs. | Not committed; not exposed. |
46
-
47
- ## Third-party vendors in the data path
48
-
49
- | Vendor | What data | Disclosed to end users? | Notes |
50
- |---|---|---|---|
51
- | Anthropic (Claude) | Only for `--tag live` AI tests, gated by `ANTHROPIC_API_KEY`. No customer page data is sent as part of normal gem operation. | N/A -- development-time only, not a production data path. | Live AI tests are opt-in; the gem's runtime API client does not call any LLM. Human to confirm no PII appears in live-test fixtures. |
52
-
53
- No customer/PII data leaves the ecoPortal boundary through this gem in normal operation: it is a client
54
- for ecoPortal's own API, not a bridge to an external SaaS.
55
-
56
- ## PII / data-leak controls
57
-
58
- - **Credential scope (primary control):** the template-automation service account is scoped to
59
- templates/org-config only, so page records (customer data + PII) are out of reach by GRANT, not by
60
- instruction (ep-ai-standards `security/ai-service-account-scope`). This is the load-bearing leak
61
- control.
62
- - **`org_id` scoping:** every client session is bound to a single org context; cross-org reads require
63
- distinct credentials.
64
- - **No local persistence:** the gem holds data in memory for the session and writes nothing to disk;
65
- there is no cache or log of customer records to leak.
66
- - **`.env` gitignored:** credentials for live tests never enter version control.
67
- - **Query validator:** compensates for `no_schema: true` by catching malformed queries/mutations before
68
- they hit the live API.
69
-
70
- ## AI-generated content
71
-
72
- - Externally-exposed AI content: **no.** The gem produces no customer-facing or publicly-exposed AI
73
- content. AI assistance is confined to development (code generation, template-automation planning) and
74
- `--tag live` AI tests; its output is reviewed code and internal artefacts, not exposed to end users.
75
- - Marked as AI-generated: **N/A** for external content. Internally, AI-assisted commits follow the
76
- developer-only authorship convention (no `Co-Authored-By` unless requested), and Gemini responses must
77
- be verified against actual code before applying.
78
- - Review process: standard MR review; public-interface changes additionally logged in the active
79
- project's DECISIONS log and confirmed with the developer.
@@ -1,74 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: conventions
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft
8
- ---
9
-
10
- # Conventions -- ecoportal-api-graphql
11
-
12
- **Source of truth:** `.rubocop.yml` (repo root) and `CLAUDE.md`. There is no `ai-discovery`
13
- `conventions.md` in this repo; the below is composed from `.rubocop.yml`, `CLAUDE.md`, and observed
14
- git history, not re-derived from code.
15
-
16
- ## Code style
17
-
18
- - Indentation: 2 spaces (Ruby default; no override in `.rubocop.yml`).
19
- - Quotes: not enforced -- `Style/StringLiterals` is disabled, so single and double quotes are both
20
- accepted.
21
- - Line length: unlimited -- `Layout/LineLength` is disabled.
22
- - Frozen string literal comment: not required (`Style/FrozenStringLiteralComment` disabled).
23
- - Hash alignment: table style for both colon and hash-rocket (`Layout/HashAlignment`).
24
- - Dot position: trailing (`Layout/DotPosition`).
25
- - Alias: prefer `alias_method` (`Style/Alias`).
26
- - Notable relaxed metrics: `ClassLength` 350, `ModuleLength` 400, `MethodLength` 100,
27
- `AbcSize` 30, `CyclomaticComplexity`/`PerceivedComplexity` 30, `ParameterLists` 5.
28
- - Naming exceptions: camelCase method/variable names are allowed where they mirror GraphQL/Relay
29
- schema fields verbatim (`Naming/MethodName` disabled; `clientMutationId` allow-listed). This is
30
- intentional -- the client mirrors the schema.
31
- - Rubocop compliance is required for all generated Ruby: run `bundle exec rubocop <file>` to verify.
32
-
33
- ## Branch naming
34
-
35
- Type-prefixed, slash-separated. Observed prefixes in the branch list and history:
36
- `feat/<slug>`, `fix/<slug>`, `docs/<slug>`, `chore/<slug>`, and longer-lived `feature/<slug>`
37
- branches for multi-phase work. Note: `pages` is a long-running primary development branch that
38
- predates the prefix convention.
39
-
40
- ## Commit message style
41
-
42
- Conventional Commits: `type(scope): message`. Observed types include `feat`, `fix`, `docs`,
43
- `chore`, and `merge`. Scopes are area-based, e.g. `feat(diff/builder):`, `docs(worklog):`,
44
- `chore(release):`, `docs(template-automation):`. Release commits follow
45
- `chore(release): vX.Y.Z ...`.
46
-
47
- ## Test conventions
48
-
49
- - Runner: RSpec (`bundle exec rspec`).
50
- - Placement: spec files mirror the `lib/` structure under `spec/` (e.g.
51
- `spec/ecoportal/api/graphql/input/search_conf_spec.rb`).
52
- - Live tests: tagged `--tag live`; `.env` is loaded via `dotenv` in `spec_helper.rb`
53
- (needs `ANTHROPIC_API_KEY` for live AI tests).
54
- - Manual integration scripts live under `tests/` (separate from the RSpec suite).
55
- - Coverage is known to be sparse in subdirectories (see `.ai-assistance/code/spec_coverage.md`).
56
-
57
- ## Project-specific rules
58
-
59
- From `CLAUDE.md`:
60
-
61
- - Namespace: `Ecoportal::API::GraphQL` (capital G, Q, L); file paths use lowercase `graphql/`.
62
- - File/class mirroring: file path mirrors the class namespace exactly.
63
- - Code-spec docs: for every area analysed, a corresponding `.ai-assistance/code/<area>.md` should
64
- exist or be created/updated.
65
- - No silent breaking changes: any change to the gem's public interface must be noted in the active
66
- project's DECISIONS log and confirmed with the developer. Backwards compatibility with
67
- `eco-helpers` must be preserved unless explicitly broken.
68
- - Gemini responses must be verified against actual code before applying.
69
- - Commit authorship: developer only by default; do not add `Co-Authored-By: Claude ...` unless the
70
- developer explicitly requests it.
71
- - Verified Platform Knowledge: consult `.ai-assistance/code/ecoPortal_architecture/` before
72
- implementing platform logic; record newly confirmed platform facts there with evidence (ADR-012).
73
- - Working-tree safety: follow `.ai-assistance/conventions/code-working-tree-protocol.md` (bridge
74
- LOCK, commit overlapping unstaged changes as `wip:` first) before modifying files.
@@ -1,65 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: integrations
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft
8
- ---
9
-
10
- # Integrations -- ecoportal-api-graphql
11
-
12
- **Purpose:** the ties this project has to other systems and repos. This is the section the central
13
- hub uses to trace inter-project dependencies and surface reuse (ADR-015 Section 5). It records, per
14
- tie, the DATA that flows and the PERMISSIONS required -- feeding the compliance (vendor/PII) and the
15
- cross-project-permissions questions. Detailed data-handling lives in `COMPLIANCE.md`.
16
-
17
- ## External services
18
-
19
- | Service | Purpose | Data sent (class + PII?) | Auth / permissions (scopes) |
20
- |---|---|---|---|
21
- | ecoPortal GraphQL API | The API this gem is a client for -- reads/writes pages, templates, location structures, contractor entities, actions, organizations. | Customer data + PII: page records can contain personal data. Also template/org-config data (non-PII). The gem is a full-access client by capability; the active template-automation work restricts itself to templates/org-config only by SERVICE-ACCOUNT grant. | OAuth via `Common::GraphQL::AuthService`, scoped by `org_id`; per-environment host (e.g. live.ecoportal.com). `no_schema: true` (no introspection). Credential scope is the load-bearing control -- see COMPLIANCE.md. |
22
- | ecoPortal REST API (v2) | Underlying REST infrastructure the GraphQL layer builds on and stays compatible with via the `Compat` layer. | Same classes as above (indirect, via `ecoportal-api-v2`). | Same OAuth / org-scoped runtime credentials; provided through the upstream `ecoportal-api-v2` gem. |
23
-
24
- ## Upstream dependencies (repos we depend on)
25
-
26
- | Repo / package | What we use it for | Permission/scope required (if any) |
27
- |---|---|---|
28
- | `ecoportal-api` | REST API base: auth, org context, base models, and the `Ecoportal::API::Common` namespace this gem extends. Team-managed. | None beyond the runtime ecoPortal API credentials (email/pass/org_id/host) passed at instantiation. |
29
- | `ecoportal-api-v2` | REST API v2 layer (Page, Register, etc.); required by the entry point. Team-managed. Being retired over time. | Same runtime ecoPortal API credentials. |
30
- | `graphlient` | Friendly GraphQL DSL/client wrapper; `Common::GraphQL::Client` inherits from `Graphlient::Client`. Active fork owned by the team (upstream: `ashkan18/graphlient`). | None (library dependency). |
31
- | `graphql-client` | Low-level GraphQL HTTP + parsing, pulled in transitively via graphlient. Fork for upstream contribution only (upstream: `github-community-projects/graphql-client`); not team-maintained. | None (library dependency). |
32
- | `graphql` (graphql-ruby) | Schema definition/execution engine (`rmosolgo/graphql-ruby`); external, read-only reference. Used server-side by ecoPortal; client-side usage here is indirect. | None (library dependency). |
33
-
34
- ## Downstream consumers (who depends on us)
35
-
36
- - `eco-helpers` -- the primary consumer; an integration-script framework for the ecoPortal
37
- Integrations Team. It requires this gem (`ecoportal-api-graphql ~> 1.3, >= 1.3.4`) and relies on
38
- the `Compat` layer to treat `graphql` as a drop-in for the older `apiv2` interface. Backwards
39
- compatibility with `eco-helpers` must be preserved unless explicitly broken.
40
- - `ecoportal-qa` -- consumes the gem to verify template deploys (the "verify" step of the template
41
- build-and-maintenance pipeline; a `DryRunClient` and `Publisher` were built there). The
42
- template-automation project aims to tighten `ecoportal-qa` to consume the gem's page-model.
43
-
44
- ## Key package dependencies
45
-
46
- From `ecoportal-api-graphql.gemspec` (runtime):
47
-
48
- - `ecoportal-api` `~> 0.10, >= 0.10.16`
49
- - `ecoportal-api-v2` `~> 3.3, >= 3.3.3`
50
- - `graphlient` `>= 0.8.0, < 0.9`
51
-
52
- Development: `rspec`, `rubocop` (+ `rubocop-rake`), `rake`, `pry`, `yard`, `redcarpet`.
53
- Required Ruby: `>= 3.2.2`.
54
-
55
- ## Feature-request-not-rebuild note
56
-
57
- - The template build-and-maintenance capability is developed here in the gem (mechanics: read
58
- model, command vocabulary, BUILD emitter, diff, apply, pairing engine + ledger). Orchestration
59
- (interactive assisted-resolution UX, session flows) belongs in `eco-helpers`, and verification in
60
- `ecoportal-qa`. Before building template/diff/deploy mechanics elsewhere, raise a feature request
61
- against this gem rather than duplicating the emission layer.
62
- - The active template automation is a concrete consumer of the ep-ai-standards
63
- `security/ai-service-account-scope` standard: it must authenticate as a dedicated per-org SERVICE
64
- ACCOUNT scoped to templates/org-config only, with page records (customer data + PII) structurally
65
- out of scope by credential grant. See `.ai-assistance/projects/template-automatic-build-maintenance/INTENT.md`.
@@ -1,76 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: operations
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft
8
- ---
9
-
10
- # Operations -- ecoportal-api-graphql
11
-
12
- **Purpose:** the infrastructure / exposure / value surface for DevOps and Engineering. It lets ROVO answer
13
- "what infrastructure is involved, is it behind Cloudflare, what governs its flows, and is it worth it?"
14
- Same trust rule as COMPLIANCE.md: separate EVIDENCE from INTENT; audit answers use `reviewed` docs only.
15
-
16
- > This document is DRAFT and composed from the repo's own context. It is a client LIBRARY (a gem): it has
17
- > no infrastructure or public exposure of its own. Value/KPI figures below are unmeasured placeholders for
18
- > the repo owner to fill; do not cite them as measured until reviewed.
19
-
20
- ## Infrastructure inventory
21
-
22
- This project is a Ruby gem distributed as source/package -- it runs INSIDE whatever process requires it
23
- (e.g. an `eco-helpers` integration script). It owns no compute, storage, or queue of its own.
24
-
25
- | Component | Type (compute/store/queue/...) | Where hosted | Notes |
26
- |---|---|---|---|
27
- | The gem itself | library (no runtime infra) | Consumer's process / developer machine / CI | No servers, no data stores; loaded via Bundler into a host process. |
28
- | ecoPortal GraphQL API | external service (dependency) | ecoPortal platform, per-environment host (e.g. live.ecoportal.com) | The gem is a CLIENT of this; the API's infrastructure is owned by the platform, not this repo. |
29
- | RubyGems / Bundler | package distribution | RubyGems (or team gem source) | Distribution channel for the gem. |
30
-
31
- ## Public exposure
32
-
33
- **Nothing in this repo is publicly exposed.** It is a client library with no listening endpoint, no
34
- domain, and no inbound surface. It makes OUTBOUND authenticated calls to the ecoPortal GraphQL API; the
35
- public-exposure and Cloudflare/WAF posture of that API belongs to the ecoPortal platform's own OPERATIONS
36
- doc, not to this gem.
37
-
38
- | Public domain / endpoint | Behind Cloudflare? | Security rules governing the flow |
39
- |---|---|---|
40
- | (none -- library, no inbound surface) | N/A | Outbound only: OAuth-authenticated, `org_id`-scoped calls to the ecoPortal GraphQL API over HTTPS. |
41
-
42
- ## DevOps audit runbook
43
-
44
- How to check/verify this project autonomously:
45
-
46
- - **Build / install:** `bundle install`; gem spec is `ecoportal-api-graphql.gemspec`; version constant
47
- `Ecoportal::API::GRAPQL_VERSION`.
48
- - **Tests:** `bundle exec rspec` for the unit suite; `bundle exec rspec --tag live` for live-API/AI tests
49
- (requires `.env` with `ANTHROPIC_API_KEY` and ecoPortal credentials, loaded via dotenv).
50
- - **Lint:** `bundle exec rubocop <file>` -- rubocop compliance is required for all generated Ruby
51
- (config in `.rubocop.yml`).
52
- - **CI:** no CI config file was detected at the repo root by the scanner (`ci_files: []`). Human to
53
- confirm whether CI runs elsewhere (e.g. a GitLab CI defined outside the root) or is absent.
54
- - **Version / release check:** `CHANGELOG.md` is authoritative; releases follow
55
- `chore(release): vX.Y.Z`. Recent releases raised the `ecoportal-api-v2` floor to fix version-drift
56
- crashes -- verify the dependency floors in the gemspec match the CHANGELOG.
57
- - **Deeper docs:** `.ai-assistance/code/` (code-specs, dependency map, diff/build engine, schema
58
- analysis) is the detailed runbook for engineers; `.ai-assistance/code/ecoPortal_architecture/` is the
59
- verified platform knowledge base.
60
-
61
- ## Value & KPIs
62
-
63
- No usage KPIs are instrumented in this repo today. The value narrative below is qualitative /
64
- estimated; the repo owner should replace estimates with measured figures (or a dashboard link) before
65
- these are treated as evidence.
66
-
67
- | Metric | Value (measured/estimated) | Source / dashboard |
68
- |---|---|---|
69
- | Templates targeted for programmatic build/maintenance | ~300+ (estimated, project scope) | `.ai-assistance/projects/template-automatic-build-maintenance/INTENT.md` |
70
- | Hours saved / delivery-speed gain | Not measured | -- (owner to instrument) |
71
- | Active monitoring | None in-repo; staleness of these self-docs is detectable via `source_head` vs git head | `self-docs-index.json` |
72
- | Cost-vs-return | Not measured | -- (owner to instrument) |
73
-
74
- **Coverage-on-neglect:** these self-docs carry a `source_head` and a per-doc `content_hash` in
75
- `self-docs-index.json`, so the hub and `project-review` can flag them stale rather than silently trusting
76
- them.
@@ -1,64 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: overview
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft # draft | reviewed (only a human sets 'reviewed')
8
- ---
9
-
10
- # Overview -- ecoportal-api-graphql
11
-
12
- ## What this project is
13
-
14
- `ecoportal-api-graphql` is a Ruby gem that provides a GraphQL client layer for the ecoPortal
15
- GraphQL API. It wraps `graphlient` (which itself wraps `graphql-client`) and builds a structured
16
- layer of models, queries, mutations, fragments, inputs, payloads, and builders on top of it. It
17
- sits between the upstream ecoPortal REST API gems and downstream consumer code, exposing a
18
- developer-facing facade for reading and writing ecoPortal domain objects (pages, templates,
19
- location structures, contractor entities, actions, and organizations).
20
-
21
- ## Who it serves
22
-
23
- Team members -- specifically the ecoPortal Integrations Team and internal script authors. The gem
24
- is a developer-facing library, not a customer-facing product; its primary consumer is the
25
- `eco-helpers` integration-script framework. Because it can read and write live customer data
26
- (page records) through the API, AI caution levels are elevated: the active template-automation
27
- work is deliberately scoped to a service account covering templates/org-config only, keeping page
28
- records (customer data + PII) structurally out of scope.
29
-
30
- ## Current priority
31
-
32
- Template Automatic Build and Maintenance (the #1-priority project). This merges the former
33
- `template-diff-deploy` and `template-maintenance` efforts into one lifecycle: build/maintain 300+
34
- templates programmatically (a CSV-to-templates pipeline, deadline approximately September 2026)
35
- and make UAT-to-PROD change replication smooth via a diff/pairing/deploy/verify pipeline. Both
36
- halves share one emission layer (an ordered `WorkflowCommand` batch with `placeholderId`
37
- threading).
38
-
39
- ## At a glance
40
-
41
- - Repo type: ruby-gem
42
- - Primary language / runtime: Ruby (>= 3.2.2)
43
- - Entry points: `require 'ecoportal/api-graphql'` -> `lib/ecoportal/api-graphql.rb` ->
44
- `Ecoportal::API::GraphQL` (`lib/ecoportal/api/graphql.rb`)
45
-
46
- ## Discovery & access
47
-
48
- Access model: **on-request, developer-scoped** -- this is a Ruby gem, not a self-serve product. It
49
- reaches its users (the ecoPortal Integrations Team and internal script authors) by being declared as
50
- a dependency in a consuming project's Gemfile/gemspec (e.g. `eco-helpers ~> 1.3, >= 1.3.4`), not by
51
- a public listing or an end-user-facing install. Developers learn it exists through the team's
52
- integration-gem stack documentation (`.ai-assistance/code/ecoPortal_architecture/11_integration_gems.md`),
53
- the repo README, and this self-docs set once mirrored to the EP Projects Register. There is no
54
- customer-facing discovery surface: end customers never interact with the gem directly; they see only
55
- the ecoPortal platform it talks to.
56
-
57
- ## Related self-docs
58
-
59
- - Architecture: `ARCHITECTURE.md`
60
- - Conventions: `CONVENTIONS.md`
61
- - Integrations: `INTEGRATIONS.md`
62
- - Status: `STATUS.md`
63
- - Compliance: `COMPLIANCE.md`
64
- - Operations: `OPERATIONS.md`
@@ -1,73 +0,0 @@
1
- ---
2
- schema_version: "1.1"
3
- repo: "ecoportal-api-graphql"
4
- doc: status
5
- last_generated: "2026-07-09"
6
- source_head: "3f7b877"
7
- review_status: draft
8
- ---
9
-
10
- # Status -- ecoportal-api-graphql
11
-
12
- **Note:** this is the most time-sensitive self-doc. Refresh it at cycle-end and after structural
13
- changes. Staleness is detectable via `source_head` vs the current git head.
14
-
15
- ## Active work
16
-
17
- Hot paths from the scanner (`lib`, `.ai-assistance`, `spec`, `docs`) plus the active project
18
- intent. The #1-priority project is Template Automatic Build and Maintenance (see
19
- `.ai-assistance/projects/template-automatic-build-maintenance/INTENT.md`), which merges the former
20
- `template-diff-deploy` and `template-maintenance` projects into one lifecycle sharing a single
21
- `WorkflowCommand` emission layer:
22
-
23
- - BUILD: build/maintain 300+ templates programmatically (CSV-to-templates pipeline, deadline
24
- approximately September 2026) via a declarative spec -> `Builder::TemplateBuilder` -> ordered
25
- command batch -> apply -> verify. Emitter is ready; live characterization is pending sandbox
26
- service-account credentials.
27
- - MAINTAIN / DIFF-DEPLOY: UAT-to-PROD change replication -- detect (diff) -> review -> deploy
28
- (delta commands) -> verify -> monitor. Self-version diff, the pairing engine + ledger, diff
29
- modalities/`Diff::Strategy`, the cross-object diff path, and `Change`-to-`WorkflowCommand`
30
- synthesis are done; the interactive assisted-pairing UX (in `eco-helpers`) is pending.
31
- - Recent fragment-convention work: Action/ContractorEntity mutations migrated to the spread
32
- convention; the query validator now covers mutations.
33
-
34
- ## Migration state (if any)
35
-
36
- - ooze/pages GraphQL-native migration and the api-v2-to-graphql migration are ongoing themes (see
37
- `.ai-assistance/projects/ooze-graphql-native-migration/` and `.../api-v2-to-graphql-migration/`).
38
- `ecoportal-api-v2` is being retired over time; the `Compat` layer preserves the v2 interface for
39
- `eco-helpers` during the transition.
40
- - Recent releases addressed stale-release drift: v1.3.11 raised the `ecoportal-api-v2` floor to
41
- `>= 3.3.3` to fix a Ruby-3.x cascade after three live crashes were traced to version drift.
42
-
43
- ## Known risks
44
-
45
- - Live customer data exposure: the gem can read/write page records (PII). The template automation
46
- is the mitigation lever -- it MUST run under a service account scoped to templates/org-config
47
- only, enforced by credential grant, not by instruction (ep-ai-standards
48
- `security/ai-service-account-scope`). Provisioning that concrete grant is now this repo's work,
49
- not a platform blocker.
50
- - Backwards compatibility with `eco-helpers` is a hard constraint; public-interface changes must be
51
- logged in the active project's DECISIONS log and confirmed with the developer.
52
- - `no_schema: true` means queries are not validated against a schema at build time -- a query
53
- validator (now covering mutations) is the compensating control.
54
- - Spec coverage is sparse in subdirectories (`.ai-assistance/code/spec_coverage.md`).
55
-
56
- ## Open questions
57
-
58
- - No CI config was detected at the repo root; whether CI runs elsewhere or is absent needs human
59
- confirmation.
60
- - The cross-object equivalence-matching (pairing) problem has no stable identity across independent
61
- Mongo objects; it depends partly on Product's forthcoming template-entity-id, which this gem
62
- bridges and feeds but does not own.
63
- - Workflow-config-per-stage diff is out of scope until the `PagesWorkflow.stages` read model is
64
- completed.
65
-
66
- ## Recent changes
67
-
68
- Upgraded the self-docs set to schema 1.1 (audit/compliance surface): added `COMPLIANCE.md` and
69
- `OPERATIONS.md`, enriched `INTEGRATIONS.md` (data class + PII + permissions per tie) and `OVERVIEW.md`
70
- (Discovery & access), and bumped all docs to `source_head` `3f7b877`. Everything remains
71
- `review_status: draft` -- a human must set `reviewed` before any audit use. Prior state: first
72
- generation at git head `2abd6fc` (EP Projects Register pilot). The machine-readable delta is in
73
- `CHANGES.jsonl`.
@@ -1,51 +0,0 @@
1
- {
2
- "schema_version": "1.1",
3
- "generated_at": "2026-07-09T07:08:00Z",
4
- "repo_name": "ecoportal-api-graphql",
5
- "repo_type": "ruby-gem",
6
- "head": "3f7b877",
7
- "docs": [
8
- {
9
- "file": "docs/self-docs/OVERVIEW.md",
10
- "purpose": "What the project is, who it serves, current priority, discovery & access",
11
- "exists": true,
12
- "content_hash": "c403012498ab9247"
13
- },
14
- {
15
- "file": "docs/self-docs/ARCHITECTURE.md",
16
- "purpose": "Top-level structure, key components, how they fit",
17
- "exists": true,
18
- "content_hash": "ad05f25b95b49c00"
19
- },
20
- {
21
- "file": "docs/self-docs/CONVENTIONS.md",
22
- "purpose": "Coding style, branch naming, commit style, test conventions",
23
- "exists": true,
24
- "content_hash": "1649159eb799a7b8"
25
- },
26
- {
27
- "file": "docs/self-docs/INTEGRATIONS.md",
28
- "purpose": "External services + data + permissions, upstream/downstream repos",
29
- "exists": true,
30
- "content_hash": "d271ac76361e4638"
31
- },
32
- {
33
- "file": "docs/self-docs/STATUS.md",
34
- "purpose": "Active work, migration state, known risks, open questions",
35
- "exists": true,
36
- "content_hash": "1acf51a3e7822dfb"
37
- },
38
- {
39
- "file": "docs/self-docs/COMPLIANCE.md",
40
- "purpose": "ISO-27001/audit, data classes + PII, vendors, AI content, leak controls",
41
- "exists": true,
42
- "content_hash": "1e72c2356b4e3579"
43
- },
44
- {
45
- "file": "docs/self-docs/OPERATIONS.md",
46
- "purpose": "Infrastructure, public exposure + Cloudflare, DevOps audit, usage KPIs",
47
- "exists": true,
48
- "content_hash": "878b50d02339acb7"
49
- }
50
- ]
51
- }