ecoportal-api 0.10.15 → 0.10.17

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.

Potentially problematic release.


This version of ecoportal-api might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.ai-assistance/.gitignore +2 -0
  3. data/.ai-assistance/bridge/.gitignore +10 -0
  4. data/.ai-assistance/bridge/CLAUDE.md +96 -0
  5. data/.ai-assistance/bridge/archive/.gitkeep +0 -0
  6. data/.ai-assistance/bridge/inbox/.gitkeep +0 -0
  7. data/.ai-assistance/bridge/outbox/.gitkeep +0 -0
  8. data/.ai-assistance/capabilities/assumptions-log.md +23 -0
  9. data/.ai-assistance/scripts/bridge-inbox-check.sh +119 -0
  10. data/.ai-assistance/scripts/bridge-init.sh +86 -0
  11. data/.ai-assistance/scripts/confine-to-subtree.sh +58 -0
  12. data/.ai-assistance/scripts/dirty-tree-guard.sh +96 -0
  13. data/.ai-assistance/scripts/distill_procedural.py +602 -0
  14. data/.ai-assistance/scripts/log-mcp-access.sh +24 -0
  15. data/.ai-assistance/scripts/log-skill-usage.sh +79 -0
  16. data/.ai-assistance/scripts/log_mcp_access.py +158 -0
  17. data/.ai-assistance/scripts/observe-session.sh +13 -0
  18. data/.ai-assistance/scripts/observe_session.py +287 -0
  19. data/.ai-assistance/scripts/protect-host-paths.sh +135 -0
  20. data/.ai-assistance/scripts/scrub.py +1149 -0
  21. data/.ai-assistance/scripts/scrub.py.sha256 +6 -0
  22. data/.ai-assistance/scripts/surface-procedural.sh +9 -0
  23. data/.ai-assistance/scripts/surface_procedural.py +101 -0
  24. data/.ai-assistance/skills/ep-ai-manager/SKILL.md +519 -0
  25. data/.ai-assistance/skills/project-self-docs/SKILL.md +259 -0
  26. data/.ai-assistance/skills/project-self-docs/scripts/self_docs_scan.py +378 -0
  27. data/.ai-assistance/standards-version.json +12 -0
  28. data/.ai-assistance/version.json +8 -0
  29. data/.claude/.gitignore +2 -0
  30. data/.claude/settings.json +128 -0
  31. data/CHANGELOG.md +14 -1
  32. data/CLAUDE.md +95 -0
  33. data/docs/self-docs/ARCHITECTURE.md +145 -0
  34. data/docs/self-docs/CHANGES.jsonl +7 -0
  35. data/docs/self-docs/COMPLIANCE.md +66 -0
  36. data/docs/self-docs/CONVENTIONS.md +74 -0
  37. data/docs/self-docs/INTEGRATIONS.md +62 -0
  38. data/docs/self-docs/OPERATIONS.md +64 -0
  39. data/docs/self-docs/OVERVIEW.md +61 -0
  40. data/docs/self-docs/STATUS.md +71 -0
  41. data/docs/self-docs/self-docs-index.json +51 -0
  42. data/docs/worklog.md +48 -0
  43. data/lib/ecoportal/api/common/client/with_retry.rb +6 -0
  44. data/lib/ecoportal/api/common/client.rb +12 -10
  45. data/lib/ecoportal/api/version.rb +1 -1
  46. metadata +41 -1
@@ -0,0 +1,64 @@
1
+ ---
2
+ schema_version: "1.1"
3
+ repo: "ecoportal-api"
4
+ doc: operations
5
+ last_generated: "2026-07-23"
6
+ source_head: "69bf8e3"
7
+ review_status: draft
8
+ ---
9
+
10
+ # Operations -- ecoportal-api
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
+ ## Infrastructure inventory
17
+
18
+ | Component | Type (compute/store/queue/...) | Where hosted | Notes |
19
+ |---|---|---|---|
20
+ | `ecoportal-api` gem itself | Library (no compute of its own) | Distributed via RubyGems.org; runs inside WHATEVER process requires it (no dedicated compute in this repo) | Not a deployed service -- no `Dockerfile`/`cdk.json`/`docker-compose.yml`/Terraform found in this repo |
21
+ | ecoPortal REST API (`live.ecoportal.com`) | External compute the gem calls as a CLIENT | ecoPortal's own infrastructure -- not this repo's | This repo does not own or operate this API; it only calls it. unknown -- needs owner input on which repo documents that API's own infrastructure |
22
+ | Elastic APM / Elastic Cloud | External SaaS (observability) | Elastic Cloud, `ap-southeast-2` region by default (`elastic_apm_integration.rb`) | Optional, env-var gated, fails open |
23
+
24
+ ## Public exposure
25
+
26
+ This repo has no publicly reachable domain or endpoint of its own -- it is a Ruby library, not a
27
+ hosted service (no server/Lambda entry point found; see `ARCHITECTURE.md` "Entry points"). It
28
+ makes OUTBOUND calls (as a client) to `live.ecoportal.com` and, optionally, Elastic Cloud.
29
+
30
+ | Public domain / endpoint | Behind Cloudflare? | Security rules governing the flow |
31
+ |---|---|---|
32
+ | N/A -- no inbound public endpoint in this repo | N/A | N/A |
33
+
34
+ unknown -- needs owner input on whether `live.ecoportal.com` itself sits behind Cloudflare (that is
35
+ the ecoPortal product API's own infrastructure question, out of scope for this client-gem repo).
36
+
37
+ ## DevOps audit runbook
38
+
39
+ - Run tests: `bundle install && bundle exec rspec` (`CLAUDE.md`, `README.md`).
40
+ - Run lint: `bundle exec rubocop` (or `bundle exec rake rubocop`, per `Rakefile`).
41
+ - Default task (`rake`, no args): runs RuboCop then RSpec (`Rakefile`).
42
+ - Check installed AI-standards alignment: `.ai-assistance/standards-version.json` (currently
43
+ `ep-ai-standards-version: 1.9.1`, applied 2026-07-22, installed components
44
+ `skills/ep-ai-manager@2.5.0` and `skills/project-self-docs@0.4.0`).
45
+ - Check this self-docs set for staleness: compare `source_head` in each file's frontmatter against
46
+ `git rev-parse --short HEAD`, or read `docs/self-docs/self-docs-index.json` /
47
+ `docs/self-docs/CHANGES.jsonl` (written by
48
+ `.ai-assistance/skills/project-self-docs/scripts/self_docs_scan.py --write`).
49
+ - No CI dashboard / pipeline exists to check (see `ARCHITECTURE.md` Diagrams section) -- unknown --
50
+ needs owner input if one exists outside this working tree.
51
+ - Deeper runbook: none found beyond `CLAUDE.md` and `docs/worklog.md` -- unknown -- needs owner
52
+ input on whether a separate ops runbook exists elsewhere (e.g. a wiki/Confluence page).
53
+
54
+ ## Value & KPIs
55
+
56
+ | Metric | Value (measured/estimated) | Source / dashboard |
57
+ |---|---|---|
58
+ | Gem version | `0.10.17` (`lib/ecoportal/api/version.rb`) | measured |
59
+ | Downstream consumer repos | 3 (`ecoportal-api-v2`, `ecoportal-api-graphql`, `eco-helpers`) | measured (from `CLAUDE.md` dependency chain, cross-checked against `.ai-assistance/local/paths.json` fleet registry) |
60
+ | Usage / adoption outside the known fleet chain | unknown -- needs owner input | rubygems.org download stats were not checked in this run |
61
+ | Hours saved / delivery-speed impact | unknown -- needs owner input | No KPI telemetry specific to this gem was found in this repo (KPI tooling exists at the fleet level per `ep-ai-standards`, not evidenced as wired to this repo's own usage) |
62
+
63
+ This section intentionally leaves the ROI/usage questions as `unknown -- needs owner input` rather
64
+ than estimating a number with no evidentiary basis.
@@ -0,0 +1,61 @@
1
+ ---
2
+ schema_version: "1.1"
3
+ repo: "ecoportal-api"
4
+ doc: overview
5
+ last_generated: "2026-07-23"
6
+ source_head: "69bf8e3"
7
+ review_status: draft # draft | reviewed (only a human sets 'reviewed')
8
+ ---
9
+
10
+ # Overview -- ecoportal-api
11
+
12
+ ## What this project is
13
+
14
+ `ecoportal-api` is the foundational Ruby gem in the ecoPortal Ruby stack. It provides HTTP client
15
+ infrastructure (retry, rate throttling, timeouts, APM), a shared response/model layer
16
+ (`Ecoportal::API::Common`), and REST resources for the ecoPortal `internal` and `v1` APIs (people,
17
+ schema fields, permissions, jobs). Every other gem in the chain (`ecoportal-api-v2`,
18
+ `ecoportal-api-graphql`, `eco-helpers`) depends on this one, directly or transitively.
19
+ (Evidence: `CLAUDE.md`, `lib/ecoportal/api/` tree, `ecoportal-api.gemspec`.)
20
+
21
+ ## Who it serves
22
+
23
+ Internal: ecoPortal engineers who build the downstream gems (`ecoportal-api-v2`,
24
+ `ecoportal-api-graphql`, `eco-helpers`) and any script/integration that talks to the ecoPortal API
25
+ via those gems. It is a published RubyGem (`spec.homepage = "https://www.ecoportal.com"`,
26
+ `rubygems_mfa_required: true` in the gemspec) -- unknown -- needs owner input on whether any
27
+ external (non-ecoPortal-employee) consumer currently depends on it in production.
28
+
29
+ ## Current priority
30
+
31
+ unknown -- needs owner input. `docs/worklog.md` (added 2026-07-22) records only the AI-standards
32
+ alignment and session-handoff scaffold work; it does not state a current functional/feature
33
+ priority for the gem itself. The most recent commits on `master` are all `chore(ai)`/`fix` AI-tooling
34
+ work (alignment, settings hygiene), not feature development (evidence: `git log --oneline -20`).
35
+
36
+ ## At a glance
37
+
38
+ - Repo type: Ruby gem (`ecoportal-api.gemspec` present; `rails-app`/`aws-cdk`/browser-extension
39
+ signals absent)
40
+ - Primary language / runtime: Ruby, `required_ruby_version >= 3.2.2` (`ecoportal-api.gemspec`)
41
+ - Entry points: `lib/ecoportal/api.rb` (gem root, `require 'dotenv/load'`), consumed by requiring
42
+ gem-namespaced files (`require 'ecoportal/api'`); `bin/console` and `bin/setup` for local
43
+ development (evidence: `bin/`, `README.md`)
44
+
45
+ ## Discovery & access
46
+
47
+ The gem is distributed via the `Gemfile`/Bundler mechanism (`gem 'ecoportal-api'`, per `README.md`)
48
+ and, per the gemspec, is releasable to rubygems.org via `bundle exec rake release`. Within
49
+ ecoPortal, downstream teams discover it by being in the dependency chain documented in `CLAUDE.md`
50
+ (`ecoportal-api -> ecoportal-api-v2 -> ecoportal-api-graphql -> eco-helpers`). unknown -- needs
51
+ owner input on whether it is announced/listed anywhere beyond that chain (e.g. an internal
52
+ catalogue), and on who outside the immediate dependency chain has access to the GitLab repo.
53
+
54
+ ## Related self-docs
55
+
56
+ - Architecture: `ARCHITECTURE.md`
57
+ - Conventions: `CONVENTIONS.md`
58
+ - Integrations: `INTEGRATIONS.md`
59
+ - Status: `STATUS.md`
60
+ - Compliance: `COMPLIANCE.md`
61
+ - Operations: `OPERATIONS.md`
@@ -0,0 +1,71 @@
1
+ ---
2
+ schema_version: "1.1"
3
+ repo: "ecoportal-api"
4
+ doc: status
5
+ last_generated: "2026-07-23"
6
+ source_head: "69bf8e3"
7
+ review_status: draft
8
+ # self_docs_mode (OD-008): OPTIONAL. Omit for the default (committed). Set to
9
+ # gitignored-regenerate ONLY as an explicit declared opt-out (then document the regen path
10
+ # below and gitignore docs/self-docs/). Optional key with a documented default -- does NOT
11
+ # change schema_version.
12
+ self_docs_mode: committed
13
+ ---
14
+
15
+ # Status -- ecoportal-api
16
+
17
+ **Note:** this is the most time-sensitive self-doc. Refresh it at cycle-end and after structural
18
+ changes. Staleness is detectable via `source_head` vs the current git head.
19
+
20
+ ## Active work
21
+
22
+ From the scanner's `activity_clusters` (last 50 commits) and `docs/worklog.md`:
23
+
24
+ - AI tooling / standards alignment is the dominant recent activity: `.ai-assistance` (27 touches)
25
+ is nearly as hot as `lib` (28 touches) in the last 50 commits, and `CHANGELOG.md` (16 touches)
26
+ reflects the many small AI-alignment merges. Most recent work: deploying the
27
+ `project-self-docs` skill itself (`feat/deploy-project-self-docs`, MR !9, unmerged at the time
28
+ this doc was generated -- see below) and this self-docs generation run
29
+ (`feat/self-docs-generation`).
30
+ - `lib` remains the primary code activity cluster, but this run did not analyse WHICH gem features
31
+ are in flight there -- unknown -- needs owner input on current feature-level priorities inside
32
+ `lib/`.
33
+
34
+ ## Migration state (if any)
35
+
36
+ None found for the gem's own code. The AI-tooling side has an in-flight, not-yet-merged deploy:
37
+ `feat/deploy-project-self-docs` (MR !9) adds the `project-self-docs` skill itself and is not yet on
38
+ `master` as of this run (`git ls-tree origin/master` does not contain
39
+ `.ai-assistance/skills/project-self-docs/`). This self-docs generation branch
40
+ (`feat/self-docs-generation`) is based on that unmerged branch, so its MR should merge AFTER
41
+ !9, not before.
42
+
43
+ ## Known risks
44
+
45
+ - **AI-tooling churn vs code churn:** the AI-tooling directory (`.ai-assistance`) is nearly as
46
+ active as the actual gem source (`lib`) by commit-touch count over the last 50 commits. This is
47
+ not necessarily a problem, but it means a reader of `git log` alone could over-estimate recent
48
+ feature development. Flagging as observed, not judged.
49
+ - **Changes to `Common::*` are a public API** for three downstream gems (`ecoportal-api-v2`,
50
+ `ecoportal-api-graphql`, `eco-helpers` per `CLAUDE.md`) -- any breaking change here has fleet-wide
51
+ blast radius and needs cross-repo coordination, which this self-docs run cannot verify is
52
+ currently happening in practice (process exists on paper in `CLAUDE.md`; adherence in practice is
53
+ unknown -- needs owner input).
54
+ - No CI pipeline file exists in this repo (see `ARCHITECTURE.md` "Diagrams" section) -- unknown --
55
+ needs owner input on whether tests/lint run automatically anywhere before merge, or only locally
56
+ via `bundle exec rspec` / `bundle exec rubocop`.
57
+
58
+ ## Open questions
59
+
60
+ - Is there an external (non-ecoPortal, non-fleet) consumer of the published `ecoportal-api` gem on
61
+ rubygems.org? (See `OVERVIEW.md`, `INTEGRATIONS.md`.) unknown -- needs owner input.
62
+ - What is the actual current feature priority for the gem's own code (as opposed to AI-tooling
63
+ work)? `docs/worklog.md` does not currently record one. unknown -- needs owner input.
64
+ - Does CI run via an inherited/external GitLab CI template not present as a file in this working
65
+ tree? unknown -- needs owner input.
66
+
67
+ ## Recent changes
68
+
69
+ This is the first generation of this self-doc set (`docs/self-docs/` did not exist before this
70
+ run -- scanner reported all seven files as `exists: false`). The machine-readable delta is
71
+ recorded in `CHANGES.jsonl` in this same directory.
@@ -0,0 +1,51 @@
1
+ {
2
+ "schema_version": "1.1",
3
+ "generated_at": "2026-07-23T10:50:08Z",
4
+ "repo_name": "ecoportal-api",
5
+ "repo_type": "ruby-gem",
6
+ "head": "69bf8e3",
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": "a819fa9d200c7ab7"
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": "49a7df216c5bdc07"
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": "f45075d3f3ca043c"
25
+ },
26
+ {
27
+ "file": "docs/self-docs/INTEGRATIONS.md",
28
+ "purpose": "External services + data + permissions, upstream/downstream repos",
29
+ "exists": true,
30
+ "content_hash": "b5cb184b9e829040"
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": "147657c19c13c34e"
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": "802e24afbd20f486"
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": "475c09e0348a9187"
49
+ }
50
+ ]
51
+ }
data/docs/worklog.md ADDED
@@ -0,0 +1,48 @@
1
+ # Worklog -- ecoportal-api
2
+
3
+ Session handoff log. Newest entry first -- read top-down at the start of every session.
4
+ Format: `standards/workflows/session-handoff.md` in `ep-ai-standards`.
5
+
6
+ ---
7
+
8
+ ## 2026-07-23 -- Self-docs set generated (first time)
9
+
10
+ generated by project-self-docs v0.4.0 per migration none, review_status: draft, run 2026-07-23
11
+
12
+ ### Done
13
+ - Ran `project-self-docs` for the first time in this repo: generated the full
14
+ `docs/self-docs/` set (`OVERVIEW.md`, `ARCHITECTURE.md`, `CONVENTIONS.md`, `INTEGRATIONS.md`,
15
+ `STATUS.md`, `COMPLIANCE.md`, `OPERATIONS.md`) plus `self-docs-index.json` and
16
+ `CHANGES.jsonl`. All docs carry `review_status: draft` -- pending human review before any
17
+ audit/hub use.
18
+ - Several facts were marked `unknown -- needs owner input` where no evidence existed in this
19
+ repo (see each doc): current feature priority, external gem-consumer footprint, CI existence
20
+ outside this working tree, spec coverage thresholds, and a few PII/logging edge cases in
21
+ `COMPLIANCE.md`.
22
+
23
+ ### Blocked / Pending
24
+ - Human review of the new self-docs set (`review_status: draft` on all seven files).
25
+ - Base branch `feat/deploy-project-self-docs` (MR !9, adds the `project-self-docs` skill itself)
26
+ is still unmerged -- this generation's MR should merge AFTER !9.
27
+
28
+ ### Open Questions
29
+ - See `docs/self-docs/STATUS.md` "Open questions" for the full list.
30
+
31
+ ---
32
+
33
+ ## 2026-07-22 -- AI standards alignment (session handoff scaffold)
34
+
35
+ ### Done
36
+ - **AI standards alignment** -- repo brought to `ep-ai-standards` v1.9.1 (see
37
+ `.ai-assistance/standards-version.json`). Foundation scaffold (`CLAUDE.md`,
38
+ `.claude/settings.json`, `.ai-assistance/`, `ep-ai-manager` skill) confirmed in place.
39
+ - **Session-handoff scaffold** -- created this `docs/worklog.md` and added the
40
+ "Read these first -- every session" pointer section to `CLAUDE.md`, closing the two
41
+ remaining `check-alignment.sh` residuals (`docs/worklog.md` missing, `CLAUDE.md` not
42
+ referencing it) that the earlier kit-only alignment pass deliberately left open.
43
+
44
+ ### Blocked / Pending
45
+ - None.
46
+
47
+ ### Open Questions
48
+ - None.
@@ -5,8 +5,14 @@ module Ecoportal
5
5
  module WithRetry
6
6
  DELAY_REQUEST_RETRY = 5
7
7
  RETRY_ATTEMPTS = 5
8
+ # HTTP::TimeoutError is a SIBLING of HTTP::ConnectionError in the http gem's
9
+ # hierarchy (ConnectTimeoutError < TimeoutError < Error), so it must be listed
10
+ # explicitly: without it a transient connect/read/write timeout is never retried
11
+ # and kills a whole batch mid-loop (live-confirmed on the Farmers native card,
12
+ # 2026-07-30 — see multi_org_api FARMERS_NATIVE_MIGRATION.md).
8
13
  HANDLED_CONNECTION_ERRORS = [
9
14
  HTTP::ConnectionError,
15
+ HTTP::TimeoutError,
10
16
  IOError
11
17
  ].freeze
12
18
 
@@ -62,6 +62,8 @@ module Ecoportal
62
62
 
63
63
  return unless api_key.nil? || api_key.match(/\A\W*\z/)
64
64
  return unless self.version
65
+ return if self.version == 'graphql'
66
+ return if self.version == 'http'
65
67
 
66
68
  log(:error) { 'Api-key missing!' }
67
69
  end
@@ -69,11 +71,11 @@ module Ecoportal
69
71
  # Sends an http `GET` request against the api version using `path` to complete the base url,
70
72
  # and adding the key_value pairs of `params` in the http _header_.
71
73
  # @param path [String] the tail that completes the url of the request.
72
- # @param params [Hash] the header paramters of the http request (not including the api key).
74
+ # @param params [Hash] the header parameters of the http request (not including the api key).
73
75
  # @option params [String] :page the current page we are requesting with given the `:per_page` offset.
74
76
  # @option params [String] :per_page the offset or the number of entries you get per request.
75
77
  # @option params [String] :q some text to search. Omit this parameter to target all the entries.
76
- # @return [Common::Reponse] the basic custom response object.
78
+ # @return [Common::Response] the basic custom response object.
77
79
  def get(path, params: {})
78
80
  instrument('GET', path, params) do
79
81
  request do |http|
@@ -87,9 +89,9 @@ module Ecoportal
87
89
  # @note it automatically adds the http header param `Content-Type` as `application/json`
88
90
  # @param path [String] the tail that completes the url of the request.
89
91
  # @param data [String] the body of the query in json format.
90
- # @param params [Hash] the header paramters of the http request (not including the api key).
92
+ # @param params [Hash] the header parameters of the http request (not including the api key).
91
93
  # @option params [String] URL params; will depend on he API being used.
92
- # @return [Common::Reponse] the basic custom response object.
94
+ # @return [Common::Response] the basic custom response object.
93
95
  def post(path, data:, params: {})
94
96
  instrument('POST', path, params) do
95
97
  request do |http|
@@ -107,7 +109,7 @@ module Ecoportal
107
109
  # @note it automatically adds the http header param `Content-Type` as `application/json`
108
110
  # @param path [String] the tail that completes the url of the request.
109
111
  # @param data [String] the body of the query in json format.
110
- # @return [Common::Reponse] the basic custom response object.
112
+ # @return [Common::Response] the basic custom response object.
111
113
  def patch(path, data:)
112
114
  instrument('PATCH', path, data) do
113
115
  request do |http|
@@ -118,7 +120,7 @@ module Ecoportal
118
120
 
119
121
  # Sends an http `DELETE` request against the api version using `path` to complete the base url.
120
122
  # @param path [String] the tail that completes the url of the request.
121
- # @return [Common::Reponse] the basic custom response object.
123
+ # @return [Common::Response] the basic custom response object.
122
124
  def delete(path)
123
125
  instrument('DELETE', path) do
124
126
  request do |http|
@@ -132,14 +134,14 @@ module Ecoportal
132
134
  # @yield [http] launch specific http request.
133
135
  # @yieldparam http [HTTP] the http connection.
134
136
  # @yieldreturn [Common::Response] the basic custom response object.
135
- # @return [Common::Reponse] the basic custom response object.
137
+ # @return [Common::Response] the basic custom response object.
136
138
  def request
137
139
  wrap_response yield(base_request)
138
140
  end
139
141
 
140
142
  # Wrap with basic custom object of the gem for responses.
141
143
  # @param response [HTTP::Response]
142
- # @return [Common::Reponse] the basic custom response object.
144
+ # @return [Common::Response] the basic custom response object.
143
145
  def wrap_response(response)
144
146
  Ecoportal::API::Common::Response.new(response)
145
147
  end
@@ -151,7 +153,7 @@ module Ecoportal
151
153
  def base_request
152
154
  @base_request ||=
153
155
  case @version
154
- when 'v2'
156
+ when 'v2', 'v3'
155
157
  HTTP.headers('X-ECOPORTAL-API-KEY' => api_key).accept(:json)
156
158
  else
157
159
  HTTP.headers('X-ApiKey' => api_key).accept(:json)
@@ -205,7 +207,7 @@ module Ecoportal
205
207
  # log(:info) {'General information on what's going on'}
206
208
  # log(:warn) {'This is a warning that something is likely to have gone amiss'}
207
209
  # log(:error) {'Something went wrong'}
208
- # log(:fatal) {'An unrecoverable error has happend'}
210
+ # log(:fatal) {'An unrecoverable error has happened'}
209
211
  # @param level [Symbol] the level that the message should be logged.
210
212
  # @yield [] generates the message.
211
213
  # @yieldreturn [String] the generated message.
@@ -1,5 +1,5 @@
1
1
  module Ecoportal
2
2
  module API
3
- VERSION = '0.10.15'.freeze
3
+ VERSION = '0.10.17'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecoportal-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.15
4
+ version: 0.10.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tapio Saarinen
@@ -200,6 +200,35 @@ executables: []
200
200
  extensions: []
201
201
  extra_rdoc_files: []
202
202
  files:
203
+ - ".ai-assistance/.gitignore"
204
+ - ".ai-assistance/bridge/.gitignore"
205
+ - ".ai-assistance/bridge/CLAUDE.md"
206
+ - ".ai-assistance/bridge/archive/.gitkeep"
207
+ - ".ai-assistance/bridge/inbox/.gitkeep"
208
+ - ".ai-assistance/bridge/outbox/.gitkeep"
209
+ - ".ai-assistance/capabilities/assumptions-log.md"
210
+ - ".ai-assistance/scripts/bridge-inbox-check.sh"
211
+ - ".ai-assistance/scripts/bridge-init.sh"
212
+ - ".ai-assistance/scripts/confine-to-subtree.sh"
213
+ - ".ai-assistance/scripts/dirty-tree-guard.sh"
214
+ - ".ai-assistance/scripts/distill_procedural.py"
215
+ - ".ai-assistance/scripts/log-mcp-access.sh"
216
+ - ".ai-assistance/scripts/log-skill-usage.sh"
217
+ - ".ai-assistance/scripts/log_mcp_access.py"
218
+ - ".ai-assistance/scripts/observe-session.sh"
219
+ - ".ai-assistance/scripts/observe_session.py"
220
+ - ".ai-assistance/scripts/protect-host-paths.sh"
221
+ - ".ai-assistance/scripts/scrub.py"
222
+ - ".ai-assistance/scripts/scrub.py.sha256"
223
+ - ".ai-assistance/scripts/surface-procedural.sh"
224
+ - ".ai-assistance/scripts/surface_procedural.py"
225
+ - ".ai-assistance/skills/ep-ai-manager/SKILL.md"
226
+ - ".ai-assistance/skills/project-self-docs/SKILL.md"
227
+ - ".ai-assistance/skills/project-self-docs/scripts/self_docs_scan.py"
228
+ - ".ai-assistance/standards-version.json"
229
+ - ".ai-assistance/version.json"
230
+ - ".claude/.gitignore"
231
+ - ".claude/settings.json"
203
232
  - ".gitignore"
204
233
  - ".markdownlint.json"
205
234
  - ".rspec"
@@ -207,12 +236,23 @@ files:
207
236
  - ".ruby-version"
208
237
  - ".yardopts"
209
238
  - CHANGELOG.md
239
+ - CLAUDE.md
210
240
  - Gemfile
211
241
  - LICENSE
212
242
  - README.md
213
243
  - Rakefile
214
244
  - bin/console
215
245
  - bin/setup
246
+ - docs/self-docs/ARCHITECTURE.md
247
+ - docs/self-docs/CHANGES.jsonl
248
+ - docs/self-docs/COMPLIANCE.md
249
+ - docs/self-docs/CONVENTIONS.md
250
+ - docs/self-docs/INTEGRATIONS.md
251
+ - docs/self-docs/OPERATIONS.md
252
+ - docs/self-docs/OVERVIEW.md
253
+ - docs/self-docs/STATUS.md
254
+ - docs/self-docs/self-docs-index.json
255
+ - docs/worklog.md
216
256
  - ecoportal-api.gemspec
217
257
  - lib/ecoportal/api.rb
218
258
  - lib/ecoportal/api/common.rb