ecoportal-api-graphql 1.3.14 → 1.3.15

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ai-assistance/projects/TODO.md +170 -118
  3. data/.ai-assistance/skills/ai-instructions/SKILL.md +48 -48
  4. data/.ai-assistance/skills/code-specs/SKILL.md +69 -69
  5. data/.ai-assistance/skills/gemini-assist/SKILL.md +63 -63
  6. data/.ai-assistance/skills/project-cycle/SKILL.md +177 -177
  7. data/.ai-assistance/skills/refactor/SKILL.md +62 -62
  8. data/.ai-assistance/skills/spec-generation/SKILL.md +72 -72
  9. data/.gitlab-ci.yml +64 -12
  10. data/CHANGELOG.md +60 -0
  11. data/changelog.d/fixed-mr51-payload-item-mismatches.md +17 -0
  12. data/lib/ecoportal/api/common/graphql/http_client.rb +6 -0
  13. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -17
  14. data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
  15. data/lib/ecoportal/api/graphql/base/page.rb +17 -16
  16. data/lib/ecoportal/api/graphql/base/template.rb +35 -0
  17. data/lib/ecoportal/api/graphql/base.rb +2 -0
  18. data/lib/ecoportal/api/graphql/compat/response.rb +35 -35
  19. data/lib/ecoportal/api/graphql/file_upload/client.rb +21 -10
  20. data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
  21. data/lib/ecoportal/api/graphql/fragment/force.rb +14 -10
  22. data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
  23. data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
  24. data/lib/ecoportal/api/graphql/fragment.rb +3 -0
  25. data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
  26. data/lib/ecoportal/api/graphql/model/page.rb +16 -15
  27. data/lib/ecoportal/api/graphql/model/template.rb +15 -0
  28. data/lib/ecoportal/api/graphql/model.rb +2 -0
  29. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -45
  30. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -40
  31. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -40
  32. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -40
  33. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -40
  34. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -40
  35. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +7 -7
  36. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +8 -7
  37. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -40
  38. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -40
  39. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -40
  40. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -40
  41. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -35
  42. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -35
  43. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -36
  44. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -40
  45. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -13
  46. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -46
  47. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +1 -1
  48. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +1 -1
  49. data/lib/ecoportal/api/graphql/mutation.rb +20 -20
  50. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -21
  51. data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -13
  52. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -13
  53. data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
  54. data/lib/ecoportal/api/graphql/payload/page.rb +20 -19
  55. data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -11
  56. data/lib/ecoportal/api/graphql/payload/register.rb +15 -11
  57. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +1 -1
  58. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +1 -1
  59. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +1 -1
  60. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +9 -3
  61. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +9 -3
  62. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -78
  63. data/lib/ecoportal/api/graphql.rb +9 -5
  64. data/lib/ecoportal/api/graphql_version.rb +1 -1
  65. data/tests/dump_schema.rb +88 -0
  66. data/tests/validate_queries.rb +34 -12
  67. metadata +11 -1
@@ -1,78 +1,78 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- module Query
5
- # Lists preset views for a register.
6
- # Returns an array of PresetView objects — not paginated (server returns all at once).
7
- # Use the returned IDs as `presetViewId` in RegisterPreviewPages queries.
8
- #
9
- # Usage:
10
- # views = Query::RegisterPresetViews.new(client).query(registerId: 'REG_ID')
11
- # views.map { |v| { id: v.id, name: v.name, global: v.global? } }
12
- class RegisterPresetViews < Logic::Query
13
- field_name :presetViews
14
-
15
- accepted_params :registerId, :searchConf
16
-
17
- class_resolver :item_class, 'Ecoportal::API::GraphQL::Model::PresetView'
18
-
19
- def path
20
- %w[currentOrganization register presetViews]
21
- end
22
-
23
- def response_class
24
- # presetViews returns an array — wrap in a simple array-like response
25
- ArrayResponse
26
- end
27
-
28
- # Minimal array wrapper so callers can iterate results with .each / .map
29
- class ArrayResponse
30
- include Enumerable
31
-
32
- def initialize(raw)
33
- klass = Ecoportal::API::GraphQL::Model::PresetView
34
- @items = Array(raw).map { |d| klass.new(d) }
35
- end
36
-
37
- def each(&block)
38
- @items.each(&block)
39
- end
40
-
41
- def nodes
42
- @items
43
- end
44
- end
45
-
46
- private
47
-
48
- def basic_block(&block)
49
- view_block = block || default_block
50
- proc {
51
- query(
52
- registerId: :id!,
53
- searchConf: :Search
54
- ) {
55
- currentOrganization {
56
- register(id: :registerId) {
57
- presetViews(searchConf: :searchConf, &view_block)
58
- }
59
- }
60
- }
61
- }
62
- end
63
-
64
- def default_block
65
- proc {
66
- id
67
- name
68
- global
69
- registerId
70
- sorter { key direction missing }
71
- fieldConfigurations { id key name weight }
72
- }
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module Query
5
+ # Lists preset views for a register.
6
+ # Returns an array of PresetView objects — not paginated (server returns all at once).
7
+ # Use the returned IDs as `presetViewId` in RegisterPreviewPages queries.
8
+ #
9
+ # Usage:
10
+ # views = Query::RegisterPresetViews.new(client).query(registerId: 'REG_ID')
11
+ # views.map { |v| { id: v.id, name: v.name, global: v.global? } }
12
+ class RegisterPresetViews < Logic::Query
13
+ field_name :presetViews
14
+
15
+ accepted_params :registerId, :searchConf
16
+
17
+ class_resolver :item_class, 'Ecoportal::API::GraphQL::Model::PresetView'
18
+
19
+ def path
20
+ %w[currentOrganization register presetViews]
21
+ end
22
+
23
+ def response_class
24
+ # presetViews returns an array — wrap in a simple array-like response
25
+ ArrayResponse
26
+ end
27
+
28
+ # Minimal array wrapper so callers can iterate results with .each / .map
29
+ class ArrayResponse
30
+ include Enumerable
31
+
32
+ def initialize(raw)
33
+ klass = Ecoportal::API::GraphQL::Model::PresetView
34
+ @items = Array(raw).map { |d| klass.new(d) }
35
+ end
36
+
37
+ def each(&block)
38
+ @items.each(&block)
39
+ end
40
+
41
+ def nodes
42
+ @items
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def basic_block(&block)
49
+ view_block = block || default_block
50
+ proc {
51
+ query(
52
+ registerId: :id!,
53
+ searchConf: :Search
54
+ ) {
55
+ currentOrganization {
56
+ register(id: :registerId) {
57
+ presetViews(searchConf: :searchConf, &view_block)
58
+ }
59
+ }
60
+ }
61
+ }
62
+ end
63
+
64
+ def default_block
65
+ proc {
66
+ id
67
+ name
68
+ global
69
+ registerId
70
+ sorter { key direction missing }
71
+ fieldConfigurations { spread :FieldConfiguration }
72
+ }
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -13,7 +13,10 @@ module Ecoportal
13
13
  # @param org_id [String] the id of the target organization.
14
14
  # It defaults to the environmental variable `ORGANIZATION_ID`, if defined
15
15
  # @param logger [Logger] an object with `Logger` interface to generate logs.
16
- def initialize(email: nil, pass: nil, org_id: nil, host: "live.ecoportal.com")
16
+ # @param api_key [String] optional `X-ECOPORTAL-API-KEY`, required only for the v2 REST
17
+ # endpoints `FileUpload::Client` calls to register/poll an uploaded file — the GraphQL
18
+ # endpoint itself always authenticates via the email/pass OAuth bearer token.
19
+ def initialize(email: nil, pass: nil, org_id: nil, host: "live.ecoportal.com", api_key: nil)
17
20
  kargs = {
18
21
  email: email,
19
22
  pass: pass,
@@ -24,10 +27,11 @@ module Ecoportal
24
27
 
25
28
  @client = client_class.new(**kargs)
26
29
  @client.http_client = Ecoportal::API::Common::GraphQL::HttpClient.new(
27
- email: email,
28
- pass: pass,
29
- org_id: org_id,
30
- host: host
30
+ email: email,
31
+ pass: pass,
32
+ org_id: org_id,
33
+ host: host,
34
+ api_key: api_key
31
35
  )
32
36
  @fragments = Ecoportal::API::GraphQL::Fragment.new(client)
33
37
  end
@@ -1,5 +1,5 @@
1
1
  module Ecoportal
2
2
  module API
3
- GRAPQL_VERSION = '1.3.14'.freeze
3
+ GRAPQL_VERSION = '1.3.15'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,88 @@
1
+ require 'ecoportal/api-graphql'
2
+ require 'graphql'
3
+ require 'json'
4
+ require 'fileutils'
5
+
6
+ # Dump a FRESH GraphQL introspection schema (JSON) from a live ecoPortal endpoint.
7
+ #
8
+ # Why this exists: `tests/validate_queries.rb` (and the `graphql-schema-diff` skill) need an
9
+ # introspection snapshot, and a COMMITTED dump goes stale — a stale schema turns real findings
10
+ # into noise ("field doesn't exist") and hides new ones. The 6.3MB dump is therefore NOT
11
+ # committed; CI introspects at pipeline time instead (see the `validate-queries` job in
12
+ # `.gitlab-ci.yml`).
13
+ #
14
+ # Equivalent to eco-helpers' `-graphql-schema -format json` usecase (`graphql.client.schema.to_json`),
15
+ # but self-contained in this gem: it POSTs the introspection query through the gem's OWN
16
+ # `HttpClient#execute`, so it inherits the retry / rate-throttle pipeline and the OAuth bearer auth.
17
+ #
18
+ # Usage (run under bundler — the graphlient fork is a git dependency):
19
+ # SERVER=<host> ORGANIZATION_ID=<org> USER_EMAIL=<email> USER_PASS=<pass> \
20
+ # bundle exec ruby tests/dump_schema.rb [OUT_PATH]
21
+ #
22
+ # OUT_PATH defaults to `.ai-assistance/tmp/<stamp>_<enviro>_ep_graphql_schema.graphql.json`
23
+ # (that folder is gitignored — matches the naming the schema-diff skill parses stamps from).
24
+ #
25
+ # `SERVER` is REQUIRED on purpose: the gem's own default host is PRODUCTION, and an implicit
26
+ # prod connection is a footgun even for a read-only query.
27
+ #
28
+ # Exit codes: 0 ok · 2 configuration error (missing env) · 1 introspection failed / unusable dump
29
+
30
+ REQUIRED_ENV = %w[SERVER ORGANIZATION_ID USER_EMAIL USER_PASS].freeze
31
+
32
+ missing = REQUIRED_ENV.reject { |name| ENV[name].to_s.match?(/\S/) }
33
+ unless missing.empty?
34
+ warn "Missing required ENV: #{missing.join(', ')}"
35
+ warn "Usage: #{REQUIRED_ENV.map { |n| "#{n}=..." }.join(' ')} bundle exec ruby #{$PROGRAM_NAME} [OUT_PATH]"
36
+ exit 2
37
+ end
38
+
39
+ host = ENV.fetch('SERVER')
40
+ org_id = ENV.fetch('ORGANIZATION_ID')
41
+
42
+ def out_path(host)
43
+ enviro = host.split('.').first.to_s.gsub('-', '_')
44
+ stamp = Time.now.strftime('%Y%m%dT%H%M%S')
45
+ File.expand_path("../.ai-assistance/tmp/#{stamp}_#{enviro}_ep_graphql_schema.graphql.json", __dir__)
46
+ end
47
+
48
+ out = ARGV[0] || out_path(host)
49
+ FileUtils.mkdir_p(File.dirname(out))
50
+
51
+ api = Ecoportal::API::GraphQL.new(
52
+ email: ENV.fetch('USER_EMAIL'),
53
+ pass: ENV.fetch('USER_PASS'),
54
+ org_id: org_id,
55
+ host: host
56
+ )
57
+
58
+ # `GraphQL::Introspection::INTROSPECTION_QUERY` is the CONSERVATIVE query in graphql-ruby 2.6
59
+ # (verified: identical to `GraphQL::Introspection.query` with every `include_*` flag false — it
60
+ # does NOT ask for `isRepeatable` / `specifiedByURL` / `isOneOf` / deprecated-arg flags). That is
61
+ # what we want: no client/server version skew over introspection extras.
62
+ result =
63
+ begin
64
+ puts "Introspecting #{host} (org #{org_id})..."
65
+ api.client.http_client.execute(GraphQL::Introspection::INTROSPECTION_QUERY)
66
+ rescue Ecoportal::API::Common::GraphQL::ResponseError => e
67
+ warn "Introspection rejected by the server: #{e.message}"
68
+ nil
69
+ end
70
+
71
+ unless result&.dig('data', '__schema')
72
+ warn 'Introspection failed — no data.__schema in the response.'
73
+ exit 1
74
+ end
75
+
76
+ # Fail here rather than downstream: prove the dump is loadable by the same call
77
+ # `validate_queries.rb` and the schema-diff skill make.
78
+ begin
79
+ GraphQL::Schema.from_introspection(result)
80
+ rescue StandardError => e
81
+ warn "Dump is not a usable introspection result: #{e.class}: #{e.message}"
82
+ exit 1
83
+ end
84
+
85
+ File.write(out, JSON.generate(result))
86
+
87
+ types = result.dig('data', '__schema', 'types')&.size
88
+ puts "Wrote #{out} (#{File.size(out) / 1024}KB, #{types} types)"
@@ -3,8 +3,9 @@ require 'json'
3
3
  require 'graphql'
4
4
 
5
5
  # Validate EVERY gem query against a GraphQL schema, offline — catches the whole class of
6
- # "field must have selections" (object field selected bare) and "selections can't be made on
7
- # scalars" (scalar over-selected) bugs before they reach a client runner.
6
+ # "field must have selections" (object field selected bare), "selections can't be made on
7
+ # scalars" (scalar over-selected) and "selections can't be made directly on unions" (union
8
+ # selected without a type condition) bugs before they reach a client runner.
8
9
  #
9
10
  # This is how the 2026-07-03 LocationStructure `updatedAt` prod failure (and a sibling
10
11
  # `createdAt` over-selection in the LocationDraft fragment) were found. Those queries had no
@@ -16,17 +17,38 @@ require 'graphql'
16
17
  # Usage (run under bundler so the graphlient fork's #to_query_string is available):
17
18
  # bundle exec ruby tests/validate_queries.rb [PATH_TO_SCHEMA_INTROSPECTION_JSON]
18
19
  #
19
- # Get a fresh schema JSON via an introspection query against the org's endpoint; the default
20
- # below points at the last captured dump. Prefer a fresh dump — a stale one yields false
21
- # "field doesn't exist" noise (harmless: this script only *fails* on the two structural classes).
20
+ # With no argument it picks the NEWEST dump in `.ai-assistance/tmp/` (gitignored dumps are never
21
+ # committed, they go stale). Get a fresh one with `tests/dump_schema.rb`. Prefer a fresh dump — a
22
+ # stale one yields false "field doesn't exist" noise (harmless: this script only *fails* on the two
23
+ # structural classes and on render failures).
24
+ #
25
+ # Wired into CI as the blocking `validate-queries` job (see `.gitlab-ci.yml`), which dumps a fresh
26
+ # schema first.
27
+
28
+ SCHEMA_GLOB = File.expand_path('../.ai-assistance/tmp/*_ep_graphql_schema*.json', __dir__)
22
29
 
23
- DEFAULT_SCHEMA = File.expand_path('../.ai-assistance/tmp/20260605T101224_live_ep_graphql_schema.graphql.json', __dir__)
24
- STRUCTURAL = ['must have selections', "can't be made on scalars"].freeze
30
+ # Message fragments that are ALWAYS a real client-side bug, never schema staleness — so they can
31
+ # safely fail the build. `directly on unions` was added 2026-07-29: the 3 union findings triaged on
32
+ # 2026-07-03 (PageWithForces / PagesWorkflowCommands / RegisterPresetViews) sat in the advisory
33
+ # "OTHER" bucket and needed a human to spot them, which is exactly what this gate is meant to
34
+ # remove. Selecting on a union without a type condition is invalid GraphQL under any schema.
35
+ # `can't be spread inside` was added 2026-07-30 for the same reason as unions: the 7 invalid
36
+ # `PageFields` spreads (review tasks → TaskInterface, related pages → RelatedPages, template
37
+ # information → Template) sat in the advisory bucket until a human read the first live CI run.
38
+ # A fragment whose type condition cannot overlap its spread location is invalid under any schema.
39
+ STRUCTURAL = [
40
+ 'must have selections',
41
+ "can't be made on scalars",
42
+ "can't be made directly on unions",
43
+ "can't be spread inside"
44
+ ].freeze
25
45
 
26
- schema_path = ARGV[0] || DEFAULT_SCHEMA
27
- unless File.exist?(schema_path)
28
- warn "Schema introspection JSON not found: #{schema_path}"
29
- warn 'Pass a path: bundle exec ruby tests/validate_queries.rb <schema.json>'
46
+ schema_path = ARGV[0] || Dir[SCHEMA_GLOB].max
47
+ unless schema_path && File.exist?(schema_path)
48
+ warn "Schema introspection JSON not found (looked for the newest #{SCHEMA_GLOB})"
49
+ warn 'Get a fresh one: SERVER=... ORGANIZATION_ID=... USER_EMAIL=... USER_PASS=... \\'
50
+ warn ' bundle exec ruby tests/dump_schema.rb'
51
+ warn 'Or pass a path: bundle exec ruby tests/validate_queries.rb <schema.json>'
30
52
  exit 2
31
53
  end
32
54
 
@@ -105,7 +127,7 @@ else
105
127
  render_failures.each { |name, msgs| puts " #{name}\n - #{msgs.join("\n - ")}" }
106
128
  end
107
129
 
108
- puts "\n## STRUCTURAL BUGS (fail the build — bare object / over-selected scalar):"
130
+ puts "\n## STRUCTURAL BUGS (fail the build — bare object / over-selected scalar / union without type condition):"
109
131
  if structural_bugs.empty?
110
132
  puts ' none ✅'
111
133
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecoportal-api-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.14
4
+ version: 1.3.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -356,6 +356,7 @@ files:
356
356
  - bin/console
357
357
  - bin/setup
358
358
  - bin/setup.ps1
359
+ - changelog.d/fixed-mr51-payload-item-mismatches.md
359
360
  - docs/self-docs/ARCHITECTURE.md
360
361
  - docs/self-docs/CHANGES.jsonl
361
362
  - docs/self-docs/COMPLIANCE.md
@@ -442,6 +443,7 @@ files:
442
443
  - lib/ecoportal/api/graphql/base/page/phased/stage.rb
443
444
  - lib/ecoportal/api/graphql/base/page/section.rb
444
445
  - lib/ecoportal/api/graphql/base/page/section_collection.rb
446
+ - lib/ecoportal/api/graphql/base/page/task.rb
445
447
  - lib/ecoportal/api/graphql/base/page_info.rb
446
448
  - lib/ecoportal/api/graphql/base/pages_workflow.rb
447
449
  - lib/ecoportal/api/graphql/base/pages_workflow/action_type_selection.rb
@@ -471,6 +473,7 @@ files:
471
473
  - lib/ecoportal/api/graphql/base/preview_page.rb
472
474
  - lib/ecoportal/api/graphql/base/register.rb
473
475
  - lib/ecoportal/api/graphql/base/resource.rb
476
+ - lib/ecoportal/api/graphql/base/template.rb
474
477
  - lib/ecoportal/api/graphql/builder.rb
475
478
  - lib/ecoportal/api/graphql/builder/CLAUDE.md
476
479
  - lib/ecoportal/api/graphql/builder/action.rb
@@ -530,15 +533,18 @@ files:
530
533
  - lib/ecoportal/api/graphql/fragment/action.rb
531
534
  - lib/ecoportal/api/graphql/fragment/action_category.rb
532
535
  - lib/ecoportal/api/graphql/fragment/contractor_entity.rb
536
+ - lib/ecoportal/api/graphql/fragment/field_configuration.rb
533
537
  - lib/ecoportal/api/graphql/fragment/force.rb
534
538
  - lib/ecoportal/api/graphql/fragment/location_draft.rb
535
539
  - lib/ecoportal/api/graphql/fragment/location_node.rb
536
540
  - lib/ecoportal/api/graphql/fragment/locations_error.rb
537
541
  - lib/ecoportal/api/graphql/fragment/page.rb
542
+ - lib/ecoportal/api/graphql/fragment/page_task.rb
538
543
  - lib/ecoportal/api/graphql/fragment/pages.rb
539
544
  - lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb
540
545
  - lib/ecoportal/api/graphql/fragment/pages_workflow.rb
541
546
  - lib/ecoportal/api/graphql/fragment/pagination.rb
547
+ - lib/ecoportal/api/graphql/fragment/template.rb
542
548
  - lib/ecoportal/api/graphql/helpers.rb
543
549
  - lib/ecoportal/api/graphql/helpers/locations_tree.rb
544
550
  - lib/ecoportal/api/graphql/input.rb
@@ -728,6 +734,7 @@ files:
728
734
  - lib/ecoportal/api/graphql/model/page/phased.rb
729
735
  - lib/ecoportal/api/graphql/model/page/phased/stage.rb
730
736
  - lib/ecoportal/api/graphql/model/page/section.rb
737
+ - lib/ecoportal/api/graphql/model/page/task.rb
731
738
  - lib/ecoportal/api/graphql/model/page_union.rb
732
739
  - lib/ecoportal/api/graphql/model/pages_workflow.rb
733
740
  - lib/ecoportal/api/graphql/model/person_member.rb
@@ -735,6 +742,7 @@ files:
735
742
  - lib/ecoportal/api/graphql/model/preview_page.rb
736
743
  - lib/ecoportal/api/graphql/model/register.rb
737
744
  - lib/ecoportal/api/graphql/model/resource.rb
745
+ - lib/ecoportal/api/graphql/model/template.rb
738
746
  - lib/ecoportal/api/graphql/model/user.rb
739
747
  - lib/ecoportal/api/graphql/mutation.rb
740
748
  - lib/ecoportal/api/graphql/mutation/action.rb
@@ -834,6 +842,7 @@ files:
834
842
  - lib/ecoportal/api/graphql/payload/page/create_from_template.rb
835
843
  - lib/ecoportal/api/graphql/payload/page/draft.rb
836
844
  - lib/ecoportal/api/graphql/payload/page/review_task.rb
845
+ - lib/ecoportal/api/graphql/payload/page/review_task_batch.rb
837
846
  - lib/ecoportal/api/graphql/payload/page/unarchive.rb
838
847
  - lib/ecoportal/api/graphql/payload/page/update.rb
839
848
  - lib/ecoportal/api/graphql/payload/page/update_variable_bindings.rb
@@ -872,6 +881,7 @@ files:
872
881
  - tests/contractor_entity_create.rb
873
882
  - tests/contractor_entity_udpate.rb
874
883
  - tests/dump_page_model.rb
884
+ - tests/dump_schema.rb
875
885
  - tests/dump_template_model.rb
876
886
  - tests/loc_structure_get.rb
877
887
  - tests/loc_structure_update.rb