portage-ucp-bigcommerce 0.1.2 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4f9361bb29e57f06919220ed2a975c5c36ab6a1777cb0e664dafb9b67c45587
4
- data.tar.gz: a0af7c70e6319a3e153ab7e978bad7b19de828c0c764b0376f993df256aecb3e
3
+ metadata.gz: abe1a96bd9cf583809c3dfd5eb83f1a17bfea79e2b59a56d3b12591f83376bc5
4
+ data.tar.gz: 1e8596629873156558901b60333919ea1f17a9405471f11d3e36ed6beac05692
5
5
  SHA512:
6
- metadata.gz: 3d191617b9d74d7d1026b6dfa9999d17dae90dae35ea745e20ba96801a973e787b38a51b7bae03c7fa5689aaf42206e3e94466d92578b7957ecaf76b78113c67
7
- data.tar.gz: df8a085c93246e691314ba9c0eef253f6f8c2232bc15a27bdef112b28096a16830c7c9156f2704f516ecaa7dee98d106b615b854f27e9536ad960e97d00c7301
6
+ metadata.gz: 1746834fbc6c6ebbad41e8f21b62f4036f6c302786cea915b3a1073cd6e3794cc24b9c3ff5c69f3c8b67935a52722e9f633b0fd7113656c7101a649c6ca1da22
7
+ data.tar.gz: 32bc784dd25432905e9ceaadac0f8a8d436a5f2a94b4422f6fb59b85f4972b3967ddeabca0f8d9c787f287fd8015db99b4e19025bfa3829dc51cf7636e656626
data/CHANGELOG.md CHANGED
@@ -1,203 +1,46 @@
1
1
  # Changelog
2
2
 
3
- Repo-level changes — the workspace, its shared docs, and anything spanning more
4
- than one gem. Each gem keeps its own `CHANGELOG.md` for its own API; look there
5
- for changes to `portage-ucp`, an adapter, the client, or the CLI.
6
-
7
- Format loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/);
8
- this project is pre-1.0, so APIs may still shift between minor versions.
9
-
10
- ## [0.7.0] - 2026-09-16
11
-
12
- - `portage-ucp` bumps to 0.7.0: cryptographic AP2 mandate signature
13
- verification (`Ap2::MandateSignature`, real ECDSA against a JWK trust-anchor
14
- set, plus a `require_signature:` fail-closed option on `MandateGuard`,
15
- closing the gap 0.6.0's shape-only mandate validation left open), a
16
- cross-process idempotency race fix (`FileStore#fetch_or_store`, atomic
17
- temp-file-plus-rename persistence, a poisoned-file rescue, reaped per-key/
18
- per-session locks, and a new `Configuration#idempotency_provider`), a
19
- `Rails::Railtie` + `rails g portage:ucp:install` generator, opt-in
20
- OpenTelemetry span emission alongside the existing JSON logging, and
21
- `Mcp::Server.build(journal:)` — naming the seam `portage-cli` now wires a
22
- real journal through (see below) — plus `#each_record`/`#all` on
23
- `TransactionLog`/`OrderLedger`. See `portage-ucp`'s own `CHANGELOG.md`.
24
- - `portage-cli` bumps to 0.5.0 for `portage-console` (a read-only IRB REPL
25
- over the local transaction/order/journal stores), `portage generate
26
- adapter` (scaffolds a new adapter gem), `portage doctor` (sanity-checks a
27
- seller's `Portage::Ucp.configuration`), and wiring a real
28
- `PurchaseJournal` into `portage buy`'s own-store loopback path — that path
29
- previously left the journal empty even though `portage-console` above
30
- could read one. New runtime dependency on `portage-ucp-journal` (`~> 0.1`,
31
- still unpublished — see 0.6.0's entry below).
32
- - `portage-ucp-shopify` bumps to 0.4.2 for a fix to `GraphqlError` crashing
33
- instead of surfacing Shopify's real message when `errors` comes back as a
34
- bare string, plus a new live-store buyer-journey spec.
35
- - `portage-ucp-client`, `portage-ucp-wix`, `portage-ucp-bigcommerce`,
36
- `-woocommerce`, `-etsy`, `-magento`, and `-instagram` all take pin-only
37
- patch releases (no behavior change) so each can install alongside
38
- `portage-ucp` 0.7.0: their previously-published `~> 0.6` pin is
39
- pessimistic and excludes 0.7.x. `portage-ucp-journal`'s `portage-ucp`
40
- dependency (development-only, not a runtime dependency) also widens to
41
- `~> 0.7` in its gemspec, with no release of its own needed since it
42
- remains unpublished.
43
-
44
- ## [0.6.0] - 2026-09-15
45
-
46
- - **Fix:** `portage-ucp-woocommerce`, `-bigcommerce`, `-magento`, `-etsy`, and
47
- `-instagram` all bump to 0.1.1 for a standing bug, unrelated to the
48
- `portage-ucp` work below and predating it: each `Mapper.product` built a
49
- `Portage::Ucp::Product`/`Variant` with keywords (`price:`, `available:`)
50
- `dev.ucp.shopping.catalog`'s schema-conformance work removed in favor of
51
- `price_range:`/a real `variants:` array (see that work's own changelog
52
- entries, back when only `portage-ucp-shopify` and `-wix` got their mappers
53
- migrated) — every real `search_catalog`/`get_product` call against these
54
- five adapters raised `ArgumentError: missing keyword: :price_range`. Each
55
- adapter's `#search_catalog`/`#get_product` also returned a bare
56
- `Array<Product>`/`Product` instead of the `CatalogSearchResult`/
57
- `ProductDetail` wrapper the `Adapter` contract documents, which would have
58
- failed UCP schema validation even once the first bug was fixed. Caught by
59
- running the core gem's schema-validation conformance examples (added
60
- earlier for the payment-enrollment slice below) against every adapter,
61
- not just Shopify/Wix's specs, which asserted the same wrong shape their
62
- mappers produced.
63
-
64
- - `portage-ucp` bumps to 0.6.0 for the §22/§33-§35 payment-enrollment and
65
- signature-verification slice: `PaymentEnrollmentGuard` (validates every
66
- `create_payment_enrollment`/`get_payment_enrollment` response — breaking,
67
- raises `InvalidPaymentEnrollmentError` on a malformed one), an AP2 mandate
68
- shape (`Ap2::PaymentMandate`/`Ap2::MandateGuard`, shape-only — no
69
- cryptographic verification), a `Store`/`FileStore` extraction under
70
- `Support::TransactionLog`/`Support::OrderLedger` so either can be backed
71
- by something other than a file, `app.portage-ucp.payment_method` /
72
- `saved_address` / `shopper_data` extensions, `Dispatcher.new(journal:)`
73
- wiring for the new `portage-ucp-journal` gem, RFC 9421 HTTP Message
74
- Signature verification (`Security::Signature`,
75
- `Rack::SignatureVerification`) for inbound requests, and
76
- `Confirmer::Webhook` — an out-of-band approval path for the confirmation
77
- gate (POST + poll, or a caller-supplied `wait:` callback), alongside the
78
- existing `Terminal`/`AutoApprove` confirmers. See `portage-ucp`'s own
79
- `CHANGELOG.md`.
80
- - `portage-ucp-journal` is a new gem (0.1.0, not yet published to
81
- RubyGems): a buyer-side purchase journal plus the injectable `Store`
82
- abstraction `portage-ucp`'s own `Store`/`FileStore` split now mirrors.
83
- - `portage-cli` bumps to 0.4.1, `portage-ucp-client` to 0.3.1,
84
- `portage-ucp-shopify` to 0.4.1, and `portage-ucp-wix` to 0.1.1 — pin-only
85
- releases (no behavior change) so each can install alongside `portage-ucp`
86
- 0.6.0: their previously-published `~> 0.5` (`~> 0.5` for `-wix`'s 0.1.0)
87
- pin is pessimistic and excludes 0.6.x. Every other gem's `portage-ucp` pin
88
- also widens to `~> 0.6` in its gemspec, with no release of its own needed
89
- beyond what's already covered above.
90
-
91
- ## [0.5.0] - 2026-09-14
92
-
93
- - `portage-ucp` bumps to 0.5.0 for the agentic-payments work (docs/plans/agentic-payments.md):
94
- `Adapter#create_payment_enrollment`/`#get_payment_enrollment` (card-on-file
95
- enrollment without the card touching this process), a durable
96
- `Support::TransactionLog` wired into `complete_checkout` dispatch,
97
- `PolicyGuard`/`Policy` (per-transaction/rolling caps, velocity, merchant
98
- allowlist, per-token enrollment scopes), a `Confirmer` gate
99
- (`Terminal`/`AutoApprove`) run just before dispatch, a durable
100
- `Support::OrderLedger` snapshot written after settlement, `_meta`
101
- `ucp-agent.profile` threading alongside the existing `traceparent`
102
- correlation id, and `Adapter#lookup_catalog(ids:)` for batch product
103
- fetch by id — see `portage-ucp`'s own `CHANGELOG.md`.
104
- - `portage-cli` bumps to 0.4.0 for `portage payment list/enroll/set-default/
105
- remove/freeze/revoke` (Keychain / Secret Service / env-var-only storage)
106
- and `portage policy show/set`, both driving the new `portage-ucp` policy
107
- and enrollment capabilities.
108
- - `portage-ucp-client` bumps to 0.3.0 for `Session#create_payment_enrollment`/
109
- `#get_payment_enrollment` and an optional `meta:` kwarg threaded through
110
- every transport.
111
- - `portage-ucp-shopify` bumps to 0.4.0 for `Adapter#lookup_catalog(ids:)`,
112
- fetching several known product ids in one round trip via the Admin API's
113
- `nodes(ids:)` field.
114
- - Every adapter gemspec and `portage-cli` widen their `portage-ucp` pin to
115
- `~> 0.5` (and `portage-cli`'s `portage-ucp-client` pin to `~> 0.3`) for the
116
- capabilities above; only `portage-ucp`, `portage-ucp-shopify`,
117
- `portage-ucp-client`, and `portage-cli` have ever been published to
118
- RubyGems.
119
-
120
- ## [0.4.0] - 2026-08-28
121
-
122
- - `portage-cli` bumps to 0.3.0 for `portage compare` (§22's "find this same
123
- item elsewhere" mode) and `portage history` (local purchase/search log),
124
- plus a fix for a `search_catalog` envelope-unwrapping bug that had been
125
- producing malformed offers against every real store since 0.2.0 — see
126
- `portage-cli`'s own `CHANGELOG.md`.
127
- - `portage-ucp` bumps to 0.4.0 for the `app.portage-ucp.reorder` capability,
128
- per-request correlation ids threaded through `Dispatcher`/`Mcp::Server`/
129
- `CheckoutState` for observability, and a widened `Observability::REDACTED_KEYS`
130
- covering the PII fields that actually flow through logged events — see
131
- `portage-ucp`'s own `CHANGELOG.md`.
132
- - `portage-ucp-shopify` bumps to 0.3.1 to widen its `portage-ucp` dependency
133
- pin from `~> 0.3` to `~> 0.4` — no code change of its own. Every other
134
- adapter gemspec and `portage-ucp-client` got the same pin widened, but
135
- none has published a version yet, so there's no install-breakage to fix
136
- for them beyond keeping the constraint correct ahead of their first
137
- release.
138
- - `portage-cli` and `portage-ucp` are the only two gems in this release with
139
- behavior changes; `portage-ucp` and `portage-ucp-shopify` remain the only
140
- two gems ever published to RubyGems.
141
-
142
- ## [0.3.0] - 2026-08-27
143
-
144
- - All seven adapter gems now run the core gem's conformance kit against their
145
- real `Adapter` through a real `Dispatcher`
146
- (`spec/portage/ucp/<platform>/conformance_spec.rb`), closing the follow-up
147
- design-log §17 left open when the kit shipped. No adapter needed
148
- body-matching stubs: the kit's reachable surface stops at `create_checkout`.
149
- - Core gem's `~> 0.2` dependency pin widened to `~> 0.3` in every adapter,
150
- `portage-cli`, and `portage-ucp-client` gemspec.
151
- - `portage-ucp` and `portage-ucp-shopify` both bump to 0.3.0 — see each
152
- gem's own `CHANGELOG.md` for `Support::Retry`, `Support::SessionLock`, the
153
- Shopify metadata_field config DSL, and the Shopify GraphQL shape fixes
154
- driving the bump. `portage-cli` and `portage-ucp-client` are unchanged and
155
- stay at 0.2.0.
156
-
157
- ## [0.2.0] - 2026-08-21
158
-
159
- ### Added
160
-
161
- - `~/.portage/` — the first state anything here keeps outside the project
162
- directory. `stores.yml` is the store allowlist you curate; the CLI writes
163
- `discovery-cache.json` to remember which origins answered
164
- `/.well-known/ucp`, so a URL-less search doesn't re-probe the same hosts on
165
- every run. Both are the CLI's, and both are documented in
166
- [`portage-cli`](portage-cli/README.md).
167
- - Search-backend credentials as configuration that belongs to no adapter:
168
- `BRAVE_SEARCH_API_KEY`, `GOOGLE_CSE_KEY` / `GOOGLE_CSE_CX`, and
169
- `PORTAGE_STORES`. The per-adapter variables in the root README's
170
- Requirements table decide which platforms the CLI can buy from; these decide
171
- which stores it can propose in the first place, so they sit outside that
172
- table.
173
- - Root `CHANGELOG.md` (this file) — every gem already had one, the workspace
174
- itself didn't.
175
- - `docs/walkthrough.md` and `docs/well-known-ucp.md`: the agent-buys-a-snowboard
176
- walkthrough and the `/.well-known/ucp` rationale, moved out of the root README
177
- so it opens on how to install and run the thing.
178
- - A `## License` section in every adapter gem's README — all seven shipped a
179
- `LICENSE` file without pointing at it.
180
- - `docs/design-log.md` §15: how the CLI finds a store when the user has no URL,
181
- and why the search step uses documented APIs rather than a scraped results
182
- page. Ships alongside `portage find` in `portage-cli`.
183
-
184
- ### Changed
185
-
186
- - Root README's gem table describes both ways into the CLI — `portage buy
187
- <url>` when you know the shop, and `portage find --query "..."` when you
188
- don't.
189
- - Root README follows the `bundle gem` section order: Installation and Usage
190
- come first, then the gem table, then everything else. The table of contents
191
- now matches the rendered order (Requirements had been listed last and rendered
192
- second).
193
- - Root README's Requirements section is a per-adapter env-var table linking each
194
- adapter's own README, instead of restating credential setup those READMEs
195
- already own.
196
- - Every README names its how-to-run section `## Usage`, replacing the mix of
197
- `Quickstart` (core, client) and `Using the adapter directly` (adapters).
198
-
199
- ## [0.1.0] - 2026-08-14
200
-
201
- - Initial release: ten gems, published to RubyGems. See each gem's own
202
- `CHANGELOG.md` for what it ships, and the [design log](docs/design-log.md)
203
- for the rationale behind the split.
3
+ All notable changes to this project are documented here. Format loosely follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.0.0/); this project is
5
+ pre-1.0, so APIs may still shift between minor versions.
6
+
7
+ ## [0.1.4] - 2026-09-17
8
+
9
+ - No behavior change — widens the `portage-ucp` dependency pin to `~> 0.8`
10
+ so this gem can install alongside `portage-ucp` 0.8.0 (the `~> 0.7` pin
11
+ published with 0.1.3 is pessimistic and excludes it).
12
+
13
+ ## [0.1.3] - 2026-09-16
14
+
15
+ - No behavior change — 0.1.2 was built and pushed with `gem build` run from
16
+ the workspace root instead of this gem's own directory, so `spec.files =
17
+ Dir[...]` resolved against the wrong working directory and packaged an
18
+ empty gem. 0.1.2 has been yanked; 0.1.3 repackages the exact same 0.1.2
19
+ code correctly.
20
+
21
+ ## [0.1.2] - 2026-09-16
22
+
23
+ - No behavior change — widens the `portage-ucp` dependency pin to `~> 0.7`
24
+ so this gem can install alongside `portage-ucp` 0.7.0 (the pessimistic
25
+ `~> 0.6` pin published with 0.1.1 excludes it).
26
+
27
+ ## [0.1.1] - 2026-09-15
28
+
29
+ - **Fix:** `Mapper.product`/`.variants` built `Portage::Ucp::Product`/`Variant`
30
+ with the pre-schema `price:`/`available:` keywords core dropped when
31
+ `dev.ucp.shopping.catalog` became schema-conformant — every real
32
+ `search_catalog`/`get_product` call raised `ArgumentError: missing keyword:
33
+ :price_range`. Now builds `Description`/`Price`/`PriceRange` objects and a
34
+ real `Variant` array, matching `Shopify`/`Wix`'s mappers.
35
+ - **Fix:** `Adapter#search_catalog` returned a bare `Array<Product>` instead
36
+ of the `CatalogSearchResult` the `Adapter` contract documents — its wire
37
+ form has no `products` wrapper, so it never validated against UCP's
38
+ `catalog_search.json` response schema.
39
+ - **Fix:** `Adapter#get_product` returned a bare `Product` instead of
40
+ `ProductDetail`, so its wire form had no `product` wrapper either, for the
41
+ same reason as `search_catalog` above.
42
+
43
+ ## [0.1.0] - Unreleased
44
+
45
+ - Initial pre-release. BigCommerce adapter against the v3 Catalog/Carts/
46
+ Checkouts APIs and v2 Orders API.