activeadmin-graphql 0.3.0 → 0.3.2
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/docs/changelogs/20260818111600_rfc-0002-problems.md +25 -0
- data/docs/changelogs/20260818114000_rfc-as-built-coverage.md +27 -0
- data/docs/changelogs/20260818114700_rfc-design-not-version.md +27 -0
- data/docs/changelogs/20260907141000_advisory-lockfile-refresh.md +21 -0
- data/docs/changelogs/20260921103000_mutation-attribute-allowlists.md +24 -0
- data/docs/changelogs/20260921111000_release-0-3-0.md +42 -0
- data/docs/changelogs/20260921112800_drop-standard-rubocop-direct.md +35 -0
- data/docs/changelogs/20260921120000_graphql-floor-and-activeadmin-4.md +41 -0
- data/docs/changelogs/20261010101500_nonconventional-id-fields.md +48 -0
- data/docs/changelogs/20261010103800_release-0-3-1.md +39 -0
- data/docs/changelogs/20261010110600_graphql-identity-dsl.md +34 -0
- data/docs/changelogs/20261010111800_release-0-3-2.md +46 -0
- data/docs/dependencies/20260907141000_json-cve-2026-71847.md +68 -0
- data/docs/dependencies/20260907141000_sqlite3-ghsa-mwm8-39rw-8826.md +62 -0
- data/docs/dependencies/20260921114000_rails-json-parse-kwargs.md +61 -0
- data/docs/dependencies/20260921114500_graphql-ghsa-rmxg-5p3r-j6hh.md +69 -0
- data/docs/dependencies/20261007161308_association-list-combobox.md +23 -0
- data/docs/graphql-api.md +49 -6
- data/docs/issues/20260907141000_engineering-and-dependency-audit.md +30 -0
- data/docs/issues/20260917123253_ci-drop-automatic-dependency-audit.md +29 -0
- data/docs/issues/20260921103000_mutation-attribute-allowlists.md +40 -0
- data/docs/issues/20260921104400_convention-alignment-audit.md +60 -0
- data/docs/issues/20260921114500_dependency-audit.md +90 -0
- data/docs/issues/20260921115500_file-length-metrics.md +31 -0
- data/docs/issues/20261010111159_rails-composite-primary-keys-alignment.md +81 -0
- data/docs/issues/20261010111300_partitions-and-shards-support.md +55 -0
- data/docs/issues/20261010111500_graphql-federation-support.md +46 -0
- data/docs/plan/20260817201500_rfc-starter.md +31 -0
- data/lib/active_admin/graphql/policy_set_cache.rb +10 -3
- data/lib/active_admin/graphql/record_source.rb +3 -2
- data/lib/active_admin/graphql/resource_config.rb +4 -0
- data/lib/active_admin/graphql/resource_definition_dsl.rb +9 -0
- data/lib/active_admin/graphql/resource_identity.rb +98 -0
- data/lib/active_admin/graphql/resource_methods.rb +1 -1
- data/lib/active_admin/graphql/resource_query_proxy/identity.rb +38 -0
- data/lib/active_admin/graphql/resource_query_proxy.rb +16 -10
- data/lib/active_admin/graphql/schema_builder/mutation_update_destroy.rb +2 -2
- data/lib/active_admin/graphql/schema_builder/query_type_member.rb +4 -2
- data/lib/active_admin/graphql/schema_builder/types_object.rb +23 -4
- data/lib/active_admin/graphql/version.rb +1 -1
- data/lib/active_admin/graphql.rb +1 -0
- data/lib/active_admin/primary_key.rb +13 -4
- metadata +30 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 95e56a00a0c78ea55f44c186012af72c1ba6ff80ada2adbf905ce9b2d190c47d
|
|
4
|
+
data.tar.gz: 1e1dc89e1ffd41d05c6f2962a83857188a239ba677e6f492dbc304a09bb123b9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 02533503de4c86355e28bc7212115b043a9d7da293db40d1134251f7892539fca8257d6c03140c110d12da8e4de1b4112668c7e6fc2d721273c990d9fff930e3
|
|
7
|
+
data.tar.gz: 6e13f9a69b6cc7df900cf9883ab60600be21bfea50196209c7324306030d74784cb3e66082ffc3ec225192c3c0c385fffb3f24840061e9f12415b60479de9d3c
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.3.2 (2026-10-10)
|
|
6
|
+
|
|
7
|
+
- Add `graphql { identity ... }` so keyless views can declare GraphQL id columns, optional `separator`, and `encode` / `decode` (RFC 0007).
|
|
8
|
+
- Fail schema build when a registered model has neither a primary key nor an `id` column and no `identity` declaration; set `self.primary_key`, use `identity`, or `graphql { disable! }`.
|
|
9
|
+
|
|
10
|
+
## 0.3.1 (2026-10-10)
|
|
11
|
+
|
|
12
|
+
- Fix GraphQL identity handling for database views and nonconventional primary keys: keep one `id` field, support inferred `id` lookups, reject ambiguous identifiers, and honor attribute filters.
|
|
13
|
+
|
|
5
14
|
## 0.3.0 (2026-09-21)
|
|
6
15
|
|
|
7
16
|
- BREAKING: omit `created_at` and `updated_at` from default create and update inputs. List them on `permit_params` to keep them writable.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# RFC 0002 problems and process motivation
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
RFC 0002 is the as-built problem statement: concrete operator or implementer failures, the shipped solution, rejected alternatives, and which surfaces still need a later Standards Track RFC.
|
|
10
|
+
|
|
11
|
+
RFC 0001 Motivation names those same surfaces as the reason a numbered process exists here.
|
|
12
|
+
|
|
13
|
+
## Effects
|
|
14
|
+
|
|
15
|
+
rfcs/0002-problem-and-positioning.md rewritten. rfcs/0001-rfc-process.md Motivation updated. Unreleased changelog line expanded.
|
|
16
|
+
|
|
17
|
+
## Next
|
|
18
|
+
|
|
19
|
+
Discuss RFC 0001 until 2026-08-31. Commit when asked.
|
|
20
|
+
|
|
21
|
+
## Source
|
|
22
|
+
|
|
23
|
+
Upstream: README, CHANGELOG, and (where present) SPEC.md or docs/graphql-api.md in this tree.
|
|
24
|
+
|
|
25
|
+
Downstream: rfcs/0001-rfc-process.md, rfcs/0002-problem-and-positioning.md.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# As-built RFC coverage
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
Starter pack RFC 0001 and RFC 0002 is not enough. Each public contract named in RFC 0002 gets its own Informational Stable RFC with Describes pinned to the current version.
|
|
10
|
+
|
|
11
|
+
As-built Informational RFCs are Stable. A later change to those contracts is a new Standards Track RFC.
|
|
12
|
+
|
|
13
|
+
## Effects
|
|
14
|
+
|
|
15
|
+
Wrote RFC 0003 HTTP endpoint, RFC 0004 schema and DSL, RFC 0005 authorization and filters. Claimed ids/0003 through ids/0005. Updated rfcs/README.md Current set, RFC 0002 Relates and Unresolved, and CHANGELOG Unreleased.
|
|
16
|
+
|
|
17
|
+
Later pass 2026-08-18: RFC 0003 and later rewritten as Standards Track design specifications. Describes dropped. Version numbers belong in changelogs. The Informational Describes dump from this file is reversed.
|
|
18
|
+
|
|
19
|
+
## Next
|
|
20
|
+
|
|
21
|
+
Discuss RFC 0001 until 2026-08-31. Commit when asked. Schema layout and cap registrar remain later Standards Track candidates.
|
|
22
|
+
|
|
23
|
+
## Source
|
|
24
|
+
|
|
25
|
+
Upstream: docs/graphql-api.md, CHANGELOG 0.2.1, lib/active_admin/graphql/integration.rb.
|
|
26
|
+
|
|
27
|
+
Downstream: rfcs/0003-http-endpoint.md, rfcs/0004-schema-and-dsl.md, rfcs/0005-authorization-and-filters.md.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# RFCs specify design
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
An RFC proposes a design: suggestion, motivation, specification, effects, alternatives, and prior art. Version numbers belong in changelogs. Implementation notes stay optional evidence.
|
|
10
|
+
|
|
11
|
+
RFC 0002 stays Informational positioning. RFC 0003 and later are Standards Track. Shipped design specified after the fact is Stable.
|
|
12
|
+
|
|
13
|
+
## Effects
|
|
14
|
+
|
|
15
|
+
Rewrote product RFCs 0002 and later, RFC 0001 process text, rfcs/README.md, and the template. Dropped Describes. Updated CHANGELOG Unreleased.
|
|
16
|
+
|
|
17
|
+
Later pass 2026-08-18: dropped fence tags that only blocked a misreading in process text. Contract negation stayed.
|
|
18
|
+
|
|
19
|
+
## Next
|
|
20
|
+
|
|
21
|
+
Discuss RFC 0001 until 2026-08-31. Commit when asked.
|
|
22
|
+
|
|
23
|
+
## Source
|
|
24
|
+
|
|
25
|
+
Upstream: conversation on RFC shape for product libraries.
|
|
26
|
+
|
|
27
|
+
Downstream: rfcs/.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## Participants
|
|
2
|
+
|
|
3
|
+
- amkisko
|
|
4
|
+
|
|
5
|
+
## Decisions
|
|
6
|
+
|
|
7
|
+
- Relock json to 2.21.2 in Gemfile.lock and appraisal lockfiles that still carried a vulnerable pin.
|
|
8
|
+
- Relock sqlite3 to 2.9.6 where the test graph still pinned an affected line, and raise the development gemspec floor to >= 2.9.6 when this gemspec declared sqlite3.
|
|
9
|
+
- Keep json on the 2.x line in library and appraisal locks because rubocop declares json ~> 2.3.
|
|
10
|
+
- Leave Dependabot bundler at directory /. Appraisal lockfiles stay on the CI security matrix.
|
|
11
|
+
|
|
12
|
+
## Effects
|
|
13
|
+
|
|
14
|
+
- CI bundler-audit jobs that failed on CVE-2026-71847 and GHSA-mwm8-39rw-8826 now have patched pins in the lockfiles touched this pass.
|
|
15
|
+
- CHANGELOG.md was not given an Unreleased bullet. This is a lockfile and development-graph refresh, not a public gem contract change.
|
|
16
|
+
|
|
17
|
+
## Source
|
|
18
|
+
|
|
19
|
+
- usr/docs/issues/20260907141000_engineering-and-dependency-audit.md
|
|
20
|
+
- usr/docs/dependencies/20260907141000_json-cve-2026-71847.md
|
|
21
|
+
- usr/docs/dependencies/20260907141000_sqlite3-ghsa-mwm8-39rw-8826.md
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Mutation attribute allowlists
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
Ship RFC 0006 as Proposed with running request specs. CHANGELOG Unreleased names the four graphql DSL methods and the RFC number.
|
|
10
|
+
|
|
11
|
+
## Effects
|
|
12
|
+
|
|
13
|
+
Consumers can keep query fields such as timestamps and derived columns while listing authored keys on create and update inputs. Default schema is unchanged.
|
|
14
|
+
|
|
15
|
+
Later pass 2026-09-21: CHANGELOG Unreleased names permit_params and nested create / update, not create_only.
|
|
16
|
+
|
|
17
|
+
## Next
|
|
18
|
+
|
|
19
|
+
0.3.0 metadata includes the graphql 2.6.9 floor and ActiveAdmin 4 Rails 8 matrix. Downstream apps replace initializer patches with graphql permit_params and keep their introspection regression spec after the gem is tagged.
|
|
20
|
+
|
|
21
|
+
## Source
|
|
22
|
+
|
|
23
|
+
usr/docs/issues/20260921103000_mutation-attribute-allowlists.md
|
|
24
|
+
rfcs/0006-mutation-permit-params.md
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Release 0.3.0 metadata
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
Cut 0.3.0, not 0.2.2. Default create and update inputs omit created_at and updated_at unless listed on permit_params. That is a GraphQL schema break for clients that sent those fields on 0.2.1.
|
|
10
|
+
|
|
11
|
+
CHANGELOG 0.3.0 dated 2026-09-21. Version constant is 0.3.0. Path gem pins in Gemfile.lock and appraisal lockfiles match.
|
|
12
|
+
|
|
13
|
+
RFC 0006 stays Proposed until 2026-10-05 lazy consensus. Shipping the implementation does not close that window.
|
|
14
|
+
|
|
15
|
+
make release (usr/bin/release.rb) still owns gem build, gem push, git tag, and GitHub release. This pass only prepares metadata.
|
|
16
|
+
|
|
17
|
+
## Effects
|
|
18
|
+
|
|
19
|
+
lib/active_admin/graphql/version.rb VERSION is 0.3.0.
|
|
20
|
+
|
|
21
|
+
CHANGELOG Unreleased bullets moved under 0.3.0. BREAKING line names the timestamp omission.
|
|
22
|
+
|
|
23
|
+
PATH specs for activeadmin-graphql in Gemfile.lock, gemfiles/rails72.gemfile.lock, gemfiles/rails8ruby4.gemfile.lock, and gemfiles/rails8ruby34.gemfile.lock are 0.3.0.
|
|
24
|
+
|
|
25
|
+
## Next
|
|
26
|
+
|
|
27
|
+
Run make release from a clean tree when ready to push the gem and tag 0.3.0.
|
|
28
|
+
|
|
29
|
+
## Later pass 2026-09-21
|
|
30
|
+
|
|
31
|
+
0.3.0 is still unpublished. RubyGems latest is 0.2.1. Git tags stop at 0.2.1. Fold the post-cut Unreleased work into 0.3.0 instead of cutting 0.3.1.
|
|
32
|
+
|
|
33
|
+
CHANGELOG 0.3.0 now also names BREAKING graphql-ruby 2.6.9 and the ActiveAdmin 4.0.0.beta23 Rails 8 test matrix. Lockfile graphql is 2.6.10. Gemspec floor is graphql >= 2.6.9. Development lint (drop standard, Metrics/FileLength) stays out of CHANGELOG.md.
|
|
34
|
+
|
|
35
|
+
## Source
|
|
36
|
+
|
|
37
|
+
usr/docs/issues/20260921103000_mutation-attribute-allowlists.md
|
|
38
|
+
usr/docs/issues/20260921104400_convention-alignment-audit.md
|
|
39
|
+
usr/docs/changelogs/20260921103000_mutation-attribute-allowlists.md
|
|
40
|
+
usr/docs/changelogs/20260921120000_graphql-floor-and-activeadmin-4.md
|
|
41
|
+
rfcs/0006-mutation-permit-params.md
|
|
42
|
+
usr/bin/release.rb
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## Participants
|
|
2
|
+
|
|
3
|
+
Andrei Makarov
|
|
4
|
+
|
|
5
|
+
## Decisions
|
|
6
|
+
|
|
7
|
+
Drop the standard gem. Lint stays on rubocop with a snapshot of standard 1.56.0 config/base.yml plus standard-custom, standard-performance, and standard-rails.
|
|
8
|
+
|
|
9
|
+
Raise the development rubocop floor to ~> 1.91. That gem allows json >= 2.3.
|
|
10
|
+
|
|
11
|
+
Keep json on 2.21.2. Rails 8.1.3.1 and 7.2.3.2 ActiveSupport::JSON.decode still pass a positional options hash to JSON.parse, which json 3 rejects. Pin development json >= 2.21.2, < 3 until a Rails release includes rails/rails#58601.
|
|
12
|
+
|
|
13
|
+
## Effects
|
|
14
|
+
|
|
15
|
+
make lint: bundle exec rubocop, 86 files inspected, 5 Metrics/FileLength info offenses, no failing offenses. bundle exec rbs validate succeeded.
|
|
16
|
+
|
|
17
|
+
bundle exec rspec: 106 examples, 0 failures on json 2.21.2.
|
|
18
|
+
|
|
19
|
+
bundle-audit check --gemfile-lock on Gemfile.lock, gemfiles/rails72.gemfile.lock, gemfiles/rails8ruby34.gemfile.lock, and gemfiles/rails8ruby4.gemfile.lock: No vulnerabilities found.
|
|
20
|
+
|
|
21
|
+
json 3.0.2 in the same graphs made GraphQL request specs fail with Invalid JSON (ParseError wrapping ArgumentError given 2, expected 1). Relocked 2.21.2.
|
|
22
|
+
|
|
23
|
+
CHANGELOG.md Unreleased was not given a bullet. This is development lint and lockfile work.
|
|
24
|
+
|
|
25
|
+
## Next
|
|
26
|
+
|
|
27
|
+
Drop the json < 3 development pin after a Rails release that includes rails/rails#58601, then bundle update json.
|
|
28
|
+
|
|
29
|
+
## Source
|
|
30
|
+
|
|
31
|
+
usr/docs/dependencies/20260907141000_json-cve-2026-71847.md
|
|
32
|
+
usr/docs/dependencies/20260921114000_rails-json-parse-kwargs.md
|
|
33
|
+
usr/docs/issues/20260921114500_dependency-audit.md
|
|
34
|
+
https://github.com/standardrb/standard/blob/v1.56.0/config/base.yml
|
|
35
|
+
https://github.com/rails/rails/pull/58601
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## Participants
|
|
2
|
+
|
|
3
|
+
Andrei Makarov
|
|
4
|
+
|
|
5
|
+
## Decisions
|
|
6
|
+
|
|
7
|
+
Raise the published graphql-ruby floor from >= 2.3 to >= 2.6.9 so consumers cannot resolve GHSA-rmxg-5p3r-j6hh. Lock graphql 2.6.10.
|
|
8
|
+
|
|
9
|
+
Pin ActiveAdmin 4.0.0.beta23 on the Rails 8 appraisal gemfiles. Keep ActiveAdmin 3.5.2 on Rails 7.2 and on the root Gemfile.lock. Hosts must pin the ActiveAdmin 4 prerelease themselves.
|
|
10
|
+
|
|
11
|
+
Apply patch-level lockfile updates: rack 3.2.7, zeitwerk 2.8.3, responders 3.2.1, net-imap 0.6.7, net-protocol 0.4.0 (with net-imap), bigdecimal 4.1.3, erb 6.0.7, unicode-display_width 3.3.0, unicode-emoji 4.3.0, polyrun 2.2.4, parallel_tests 5.8.0, sprockets 4.4.1, rbs 4.2.0, parallel 2.2.0, io-console 0.9.4, reline 0.7.0.
|
|
12
|
+
|
|
13
|
+
Leave json 2.21.2. Standard 1.56.0 still pins rubocop ~> 1.88.0, which pins json ~> 2.3.
|
|
14
|
+
|
|
15
|
+
## Effects
|
|
16
|
+
|
|
17
|
+
bundle-audit check --gemfile-lock on Gemfile.lock, gemfiles/rails72.gemfile.lock, gemfiles/rails8ruby34.gemfile.lock, and gemfiles/rails8ruby4.gemfile.lock: No vulnerabilities found.
|
|
18
|
+
|
|
19
|
+
make lint: bundle exec rubocop, 84 files inspected, no offenses detected. bundle exec rbs validate succeeded.
|
|
20
|
+
|
|
21
|
+
bundle exec rspec: 102 examples, 0 failures (ActiveAdmin 3.5.2). BUNDLE_GEMFILE=gemfiles/rails72.gemfile bundle exec rspec: 102 examples, 0 failures. BUNDLE_GEMFILE=gemfiles/rails8ruby34.gemfile bundle exec rspec: 102 examples, 0 failures (ActiveAdmin 4.0.0.beta23). BUNDLE_GEMFILE=gemfiles/rails8ruby4.gemfile bundle exec rspec: 102 examples, 0 failures (ActiveAdmin 4.0.0.beta23).
|
|
22
|
+
|
|
23
|
+
CHANGELOG Unreleased names the graphql floor and the ActiveAdmin 4 test matrix. Lockfile-only patches stay out of CHANGELOG.md.
|
|
24
|
+
|
|
25
|
+
## Next
|
|
26
|
+
|
|
27
|
+
Wait for a Rails release that includes rails/rails#58601 before json 3. The standard gem is no longer in the graph.
|
|
28
|
+
|
|
29
|
+
Folded into unpublished 0.3.0. Tag and gem push wait on make release.
|
|
30
|
+
|
|
31
|
+
## Later pass 2026-09-21
|
|
32
|
+
|
|
33
|
+
Dropped standard. Locked rubocop 1.91.0. json stayed 2.21.2 because Rails decode still uses positional JSON.parse options. See usr/docs/changelogs/20260921112800_drop-standard-rubocop-direct.md.
|
|
34
|
+
|
|
35
|
+
## Source
|
|
36
|
+
|
|
37
|
+
usr/docs/issues/20260921114500_dependency-audit.md
|
|
38
|
+
usr/docs/dependencies/20260921114500_graphql-ghsa-rmxg-5p3r-j6hh.md
|
|
39
|
+
https://github.com/rmosolgo/graphql-ruby/security/advisories/GHSA-rmxg-5p3r-j6hh
|
|
40
|
+
https://github.com/activeadmin/activeadmin/blob/master/UPGRADING.md
|
|
41
|
+
https://github.com/standardrb/standard/blob/main/standard.gemspec
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Nonconventional id fields
|
|
2
|
+
|
|
3
|
+
## Effects
|
|
4
|
+
|
|
5
|
+
Schema build no longer raises `GraphQL::Schema::DuplicateNamesError` when a
|
|
6
|
+
registered model has an `id` column that is not the ActiveRecord primary key
|
|
7
|
+
(`self.primary_key = nil`) or uses a non-`id` primary key.
|
|
8
|
+
|
|
9
|
+
`ActiveAdmin::PrimaryKey` falls back to an `id` column when the declared
|
|
10
|
+
primary key is blank. Object types skip emitting a column field named `id`
|
|
11
|
+
(interface owns GraphQL `id`) and expose a single non-`id` primary-key column
|
|
12
|
+
as a readable scalar unless the resource's attribute configuration omits it.
|
|
13
|
+
Models with neither a primary key nor an `id` column fail schema build with an
|
|
14
|
+
`ArgumentError` that asks for `self.primary_key`. On 0.3.0 those models could
|
|
15
|
+
still enter the schema with a broken GraphQL `id`. Apps that keep such a
|
|
16
|
+
resource registered must set `self.primary_key` or use `graphql { disable! }`
|
|
17
|
+
so the rest of the namespace schema still builds. Inferred `id` values must be
|
|
18
|
+
unique and non-null; ambiguous member and batched lookups fail closed.
|
|
19
|
+
|
|
20
|
+
Member lookup uses the inferred column while preserving an explicitly
|
|
21
|
+
configured ActiveAdmin finder. Request-local policy caching keeps separate
|
|
22
|
+
entries for distinct records when ActiveRecord has no declared primary key.
|
|
23
|
+
|
|
24
|
+
Dummy coverage includes SQLite views that project `code AS id` and
|
|
25
|
+
`id AS row_key`, plus a table with an `id` column and no primary key.
|
|
26
|
+
|
|
27
|
+
## Later pass 2026-10-10
|
|
28
|
+
|
|
29
|
+
Downstream check: a database view with neither primary key nor `id` column
|
|
30
|
+
could stay GraphQL-disabled via `graphql { disable! }`. Spec covers that
|
|
31
|
+
escape hatch next to the ArgumentError path.
|
|
32
|
+
|
|
33
|
+
Later the same day: RFC 0007 adds `graphql { identity ... }` so those views
|
|
34
|
+
can stay enabled when columns (and optional separator) are declared. See
|
|
35
|
+
docs/changelogs/20261010110600_graphql-identity-dsl.md.
|
|
36
|
+
|
|
37
|
+
## Next
|
|
38
|
+
|
|
39
|
+
Core fix shipped in 0.3.1. Identity DSL follow-on is 0.3.2.
|
|
40
|
+
|
|
41
|
+
## Source
|
|
42
|
+
|
|
43
|
+
- Specs: `spec/requests/graphql_identity_columns_spec.rb`,
|
|
44
|
+
`spec/unit/primary_key_identity_spec.rb`,
|
|
45
|
+
`spec/unit/resource_query_proxy_identity_spec.rb`,
|
|
46
|
+
`spec/unit/policy_set_cache_spec.rb`
|
|
47
|
+
- Views: `spec/dummy/db/schema.rb` (`string_id_records`, `alternate_key_records`)
|
|
48
|
+
- Follow-on: docs/changelogs/20261010110600_graphql-identity-dsl.md
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Release 0.3.1 metadata
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
Cut 0.3.1 after published 0.3.0. User-visible work: GraphQL identity for
|
|
10
|
+
database views and nonconventional primary keys; fail-closed when a model has
|
|
11
|
+
neither a primary key nor an `id` column without configuration; and
|
|
12
|
+
`graphql { identity ... }` (RFC 0007) for keyless views with a virtual
|
|
13
|
+
composite id.
|
|
14
|
+
|
|
15
|
+
CHANGELOG 0.3.1 dated 2026-10-10. Version constant is 0.3.1. Path gem pins in Gemfile.lock and appraisal lockfiles match.
|
|
16
|
+
|
|
17
|
+
Docs-only and pray-tooling commits since 0.3.0 stay out of CHANGELOG.md.
|
|
18
|
+
|
|
19
|
+
make release (usr/bin/release.rb) still owns gem build, gem push, git tag, and GitHub release. This pass only prepares metadata.
|
|
20
|
+
|
|
21
|
+
## Effects
|
|
22
|
+
|
|
23
|
+
lib/active_admin/graphql/version.rb VERSION is 0.3.1.
|
|
24
|
+
|
|
25
|
+
CHANGELOG Unreleased bullet moved under 0.3.1.
|
|
26
|
+
|
|
27
|
+
PATH specs for activeadmin-graphql in Gemfile.lock, gemfiles/rails72.gemfile.lock, gemfiles/rails8ruby4.gemfile.lock, and gemfiles/rails8ruby34.gemfile.lock are 0.3.1.
|
|
28
|
+
|
|
29
|
+
## Next
|
|
30
|
+
|
|
31
|
+
0.3.1 tagged and published on RubyGems. Post-tag identity DSL work ships in
|
|
32
|
+
0.3.2; see docs/changelogs/20261010111800_release-0-3-2.md.
|
|
33
|
+
|
|
34
|
+
## Source
|
|
35
|
+
|
|
36
|
+
docs/changelogs/20261010101500_nonconventional-id-fields.md
|
|
37
|
+
docs/changelogs/20261010110600_graphql-identity-dsl.md
|
|
38
|
+
rfcs/0007-graphql-identity.md
|
|
39
|
+
usr/bin/release.rb
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# GraphQL identity DSL (RFC 0007)
|
|
2
|
+
|
|
3
|
+
## Decisions
|
|
4
|
+
|
|
5
|
+
Ship `graphql { identity *columns, separator:, encode:, decode: }` so resources
|
|
6
|
+
without an ActiveRecord primary key and without an `id` column can stay in the
|
|
7
|
+
schema. Prefer resource configuration over forcing `self.primary_key`.
|
|
8
|
+
|
|
9
|
+
Separator form matches HTML admins that use a virtual `id` method such as
|
|
10
|
+
`[entry_type, entry_id, event_type].join(":")`. Without separator, multi-column
|
|
11
|
+
identity keeps the existing composite JSON string.
|
|
12
|
+
|
|
13
|
+
## Effects
|
|
14
|
+
|
|
15
|
+
Schema build, member lookup, mutations that resolve by where/id, and policy
|
|
16
|
+
cache keys go through `ActiveAdmin::GraphQL::ResourceIdentity` when identity is
|
|
17
|
+
configured. Ambiguous matches still fail closed.
|
|
18
|
+
|
|
19
|
+
Dummy coverage: view `alert_events` / model `AlertEvent` with virtual composite
|
|
20
|
+
`id`.
|
|
21
|
+
|
|
22
|
+
## Next
|
|
23
|
+
|
|
24
|
+
Folded into 0.3.2 release metadata (0.3.1 already published without this DSL).
|
|
25
|
+
Tag and gem push wait on make release.
|
|
26
|
+
|
|
27
|
+
## Source
|
|
28
|
+
|
|
29
|
+
rfcs/0007-graphql-identity.md
|
|
30
|
+
docs/changelogs/20261010101500_nonconventional-id-fields.md
|
|
31
|
+
docs/issues/20261010111159_rails-composite-primary-keys-alignment.md
|
|
32
|
+
https://guides.rubyonrails.org/active_record_composite_primary_keys.html
|
|
33
|
+
spec/unit/resource_identity_spec.rb
|
|
34
|
+
spec/requests/graphql_identity_dsl_spec.rb
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Release 0.3.2 metadata
|
|
2
|
+
|
|
3
|
+
## Participants
|
|
4
|
+
|
|
5
|
+
Andrei Makarov
|
|
6
|
+
|
|
7
|
+
## Decisions
|
|
8
|
+
|
|
9
|
+
Cut 0.3.2 after published 0.3.1. User-visible work since the 0.3.1 tag:
|
|
10
|
+
`graphql { identity ... }` (RFC 0007) for keyless views, and schema-build
|
|
11
|
+
error text that names `identity` alongside `self.primary_key` and `disable!`.
|
|
12
|
+
|
|
13
|
+
CHANGELOG 0.3.1 restored to the published one-bullet text. Identity DSL bullets
|
|
14
|
+
live under 0.3.2 dated 2026-10-10.
|
|
15
|
+
|
|
16
|
+
Version constant is 0.3.2. Path gem pins in Gemfile.lock and appraisal
|
|
17
|
+
lockfiles match.
|
|
18
|
+
|
|
19
|
+
Docs-only notes (Rails composite PK alignment, partitions/shards unsupported,
|
|
20
|
+
federation unsupported) stay out of CHANGELOG.md.
|
|
21
|
+
|
|
22
|
+
make release (usr/bin/release.rb) still owns gem build, gem push, git tag, and
|
|
23
|
+
GitHub release. This pass only prepares metadata.
|
|
24
|
+
|
|
25
|
+
## Effects
|
|
26
|
+
|
|
27
|
+
lib/active_admin/graphql/version.rb VERSION is 0.3.2.
|
|
28
|
+
|
|
29
|
+
CHANGELOG identity DSL bullets moved from the post-tag 0.3.1 draft under 0.3.2.
|
|
30
|
+
|
|
31
|
+
PATH specs for activeadmin-graphql in Gemfile.lock,
|
|
32
|
+
gemfiles/rails72.gemfile.lock, gemfiles/rails8ruby4.gemfile.lock, and
|
|
33
|
+
gemfiles/rails8ruby34.gemfile.lock are 0.3.2.
|
|
34
|
+
|
|
35
|
+
## Next
|
|
36
|
+
|
|
37
|
+
Run make release from a clean tree when ready to push the gem and tag 0.3.2.
|
|
38
|
+
|
|
39
|
+
## Source
|
|
40
|
+
|
|
41
|
+
docs/changelogs/20261010110600_graphql-identity-dsl.md
|
|
42
|
+
rfcs/0007-graphql-identity.md
|
|
43
|
+
docs/issues/20261010111159_rails-composite-primary-keys-alignment.md
|
|
44
|
+
docs/issues/20261010111300_partitions-and-shards-support.md
|
|
45
|
+
docs/issues/20261010111500_graphql-federation-support.md
|
|
46
|
+
usr/bin/release.rb
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
## Dependency
|
|
2
|
+
|
|
3
|
+
- json (was below 2.21.2 on the 2.x line, now 2.21.2 in library and appraisal locks)
|
|
4
|
+
- Constraint in this repo: development gemspec json >= 2.21.2, < 3. Transitive via activesupport. rubocop 1.91 allows json >= 2.3.
|
|
5
|
+
- Lockfiles: Gemfile.lock and gemfiles/*.gemfile.lock where present
|
|
6
|
+
|
|
7
|
+
## Symptom
|
|
8
|
+
|
|
9
|
+
bundler-audit matches json 2.20.0 through 2.21.1 against CVE-2026-71847 / GHSA-9hj4-r449-hfvc. CI security jobs fail while that pin remains.
|
|
10
|
+
|
|
11
|
+
## Evidence
|
|
12
|
+
|
|
13
|
+
- Advisory: JSON::ResumableParser#partial_value use-after-free on truncated duplicate-key streams. Affected 2.20.0 through 2.21.1. Patched >= 2.21.2.
|
|
14
|
+
- This library does not call JSON::ResumableParser or partial_value.
|
|
15
|
+
|
|
16
|
+
## Suggested fix
|
|
17
|
+
|
|
18
|
+
Upgrade lockfiles to json 2.21.2. Stay on 2.x while Rails ActiveSupport::JSON.decode still calls JSON.parse with a positional options hash.
|
|
19
|
+
|
|
20
|
+
## Trigger
|
|
21
|
+
|
|
22
|
+
- bundler-audit scanner match during the 2026-09-07 CI failure review.
|
|
23
|
+
|
|
24
|
+
## Assessment target
|
|
25
|
+
|
|
26
|
+
- CI and test graphs: Gemfile.lock and appraisal locks.
|
|
27
|
+
- Published gem runtime: json is not a runtime gemspec dependency.
|
|
28
|
+
|
|
29
|
+
## Advisory
|
|
30
|
+
|
|
31
|
+
- CVE-2026-71847
|
|
32
|
+
- GHSA-9hj4-r449-hfvc
|
|
33
|
+
- CVSS 8.7 availability (CVSS:4.0). CISA KEV: not listed at the time of this record.
|
|
34
|
+
|
|
35
|
+
## Status
|
|
36
|
+
|
|
37
|
+
- CI and test graphs: fixed after lockfiles pin json 2.21.2.
|
|
38
|
+
- Published gem execute path: not_affected. The advisory names ResumableParser#partial_value.
|
|
39
|
+
|
|
40
|
+
## Applicability
|
|
41
|
+
|
|
42
|
+
- Vulnerable component present in the pre-fix lockfiles below 2.21.2.
|
|
43
|
+
- Exploit conditions require streaming parse through ResumableParser#partial_value on truncated duplicate-key input.
|
|
44
|
+
|
|
45
|
+
## Priority
|
|
46
|
+
|
|
47
|
+
- CI graph: high because bundler-audit fails the security job on version match.
|
|
48
|
+
- Published gem execute path: low. Exploit conditions do not hold on JSON.parse paths.
|
|
49
|
+
|
|
50
|
+
## Disposition
|
|
51
|
+
|
|
52
|
+
- Upgrade to 2.21.2. Pin development json < 3 until Rails decode accepts json 3 keyword options.
|
|
53
|
+
|
|
54
|
+
## Next
|
|
55
|
+
|
|
56
|
+
- Keep the runtime gemspec free of json unless a later feature streams JSON through ResumableParser.
|
|
57
|
+
- json 3.0.2 is blocked by Rails 8.1.3.1 and 7.2.3.2 ActiveSupport::JSON.decode (positional JSON.parse options). Drop the development json < 3 pin after a Rails release that includes rails/rails#58601, then bundle update json.
|
|
58
|
+
|
|
59
|
+
## Later pass 2026-09-21
|
|
60
|
+
|
|
61
|
+
Dropped the standard gem so rubocop 1.91 can resolve. That unblocked json 3 at the Bundler level. Dummy GraphQL request specs then failed: ActionDispatch::Http::Parameters::ParseError wrapping ArgumentError wrong number of arguments (given 2, expected 1). Relocked json 2.21.2 and added development gemspec json >= 2.21.2, < 3. See usr/docs/dependencies/20260921114000_rails-json-parse-kwargs.md.
|
|
62
|
+
|
|
63
|
+
## Source
|
|
64
|
+
|
|
65
|
+
- https://github.com/ruby/json/security/advisories/GHSA-9hj4-r449-hfvc
|
|
66
|
+
- https://www.cve.org/CVERecord?id=CVE-2026-71847
|
|
67
|
+
- usr/docs/issues/20260907141000_engineering-and-dependency-audit.md
|
|
68
|
+
- usr/docs/dependencies/20260921114000_rails-json-parse-kwargs.md
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
## Dependency
|
|
2
|
+
|
|
3
|
+
- sqlite3 (was at or below 2.9.5, now 2.9.6)
|
|
4
|
+
- Development gemspec floor now >= 2.9.6 where this gemspec declared sqlite3
|
|
5
|
+
- Dummy-app and test graph only. The published gem does not require sqlite3 at runtime.
|
|
6
|
+
|
|
7
|
+
## Symptom
|
|
8
|
+
|
|
9
|
+
bundler-audit matches sqlite3 <= 2.9.5 against GHSA-mwm8-39rw-8826. CI security jobs fail while that pin remains.
|
|
10
|
+
|
|
11
|
+
## Evidence
|
|
12
|
+
|
|
13
|
+
- Advisory: use-after-free in custom aggregate arguments when Database#create_aggregate, #create_aggregate_handler, or #define_aggregator takes two or more arguments over TEXT or BLOB values. Affected >= 1.4.0, <= 2.9.5. Patched 2.9.6.
|
|
14
|
+
- This repository has no create_aggregate, create_aggregate_handler, or define_aggregator callers.
|
|
15
|
+
|
|
16
|
+
## Suggested fix
|
|
17
|
+
|
|
18
|
+
Upgrade lockfiles to sqlite3 2.9.6 and raise the development gemspec floor so later resolves stay on the patched line.
|
|
19
|
+
|
|
20
|
+
## Trigger
|
|
21
|
+
|
|
22
|
+
- bundler-audit scanner match during the 2026-09-07 CI failure review.
|
|
23
|
+
|
|
24
|
+
## Assessment target
|
|
25
|
+
|
|
26
|
+
- CI and test graphs: dummy SQLite used by specs and appraisal.
|
|
27
|
+
- Published gem runtime: sqlite3 is a development dependency only.
|
|
28
|
+
|
|
29
|
+
## Advisory
|
|
30
|
+
|
|
31
|
+
- GHSA-mwm8-39rw-8826
|
|
32
|
+
- Maintainers: Medium, CVSS 4.0 score 6.3
|
|
33
|
+
- CISA KEV: not listed at the time of this record.
|
|
34
|
+
|
|
35
|
+
## Status
|
|
36
|
+
|
|
37
|
+
- CI and test graphs: fixed after lockfiles pin sqlite3 2.9.6.
|
|
38
|
+
- Published gem runtime: not_affected. Component not present in the published gem runtime.
|
|
39
|
+
|
|
40
|
+
## Applicability
|
|
41
|
+
|
|
42
|
+
- Vulnerable component present in the pre-fix development lockfiles at or below 2.9.5.
|
|
43
|
+
- Exploit conditions require custom multi-arg aggregates. Those APIs are absent from this tree.
|
|
44
|
+
|
|
45
|
+
## Priority
|
|
46
|
+
|
|
47
|
+
- CI graph: medium because bundler-audit fails the security job on version match.
|
|
48
|
+
- Published gem runtime: none. sqlite3 is not shipped to consumers of the gem.
|
|
49
|
+
|
|
50
|
+
## Disposition
|
|
51
|
+
|
|
52
|
+
- Upgrade. Prefer bundle lock --update=sqlite3 --conservative. Raise the development gemspec floor to >= 2.9.6 when sqlite3 is declared there.
|
|
53
|
+
|
|
54
|
+
## Next
|
|
55
|
+
|
|
56
|
+
- Keep sqlite3 as a development dependency.
|
|
57
|
+
|
|
58
|
+
## Source
|
|
59
|
+
|
|
60
|
+
- https://github.com/sparklemotion/sqlite3-ruby/security/advisories/GHSA-mwm8-39rw-8826
|
|
61
|
+
- https://github.com/sparklemotion/sqlite3-ruby/releases/tag/v2.9.6
|
|
62
|
+
- usr/docs/issues/20260907141000_engineering-and-dependency-audit.md
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
## Dependency
|
|
2
|
+
|
|
3
|
+
- activesupport / rails (locked 8.1.3.1 on Rails 8 appraisals and the root Gemfile.lock; 7.2.3.2 on rails72)
|
|
4
|
+
- json 3.0.2 (RubyGems latest as of 2026-09-09) versus development pin json >= 2.21.2, < 3
|
|
5
|
+
- Constraint in this repo: development gemspec only. json is not a runtime gemspec dependency.
|
|
6
|
+
|
|
7
|
+
## Symptom
|
|
8
|
+
|
|
9
|
+
With json 3.0.2, dummy GraphQL request specs that POST application/json fail with HTTP 400 and body errors message Invalid JSON. Rails raises ActionDispatch::Http::Parameters::ParseError. The cause is ArgumentError: wrong number of arguments (given 2, expected 1) from JSON.parse.
|
|
10
|
+
|
|
11
|
+
## Evidence
|
|
12
|
+
|
|
13
|
+
- json 3.0.0.rc1 (2026-08-11): JSON methods take keyword options, or options checked like keywords. A positional second Hash is no longer accepted by JSON.parse.
|
|
14
|
+
- ActiveSupport::JSON.decode in Rails 8.1.3.1 and 7.2.3.2 still calls JSON.parse(json, options) with a positional Hash. ActionDispatch JSON parameter parsing uses that decoder.
|
|
15
|
+
- This library's controller uses JSON.parse(body) with one argument. That call works on json 3. The dummy app fails before execute because Rails parses the request first.
|
|
16
|
+
- rails/rails#58601 merged 2026-08-28 (commit 0ca2c2c4cfbe7f0a709bca0589d2d74c1853ef27). It is not in 8.1.3.1 or 7.2.3.2.
|
|
17
|
+
|
|
18
|
+
## Suggested fix
|
|
19
|
+
|
|
20
|
+
Keep json on 2.21.2 in this repo's lockfiles until a Rails release includes the decode kwargs change. Then drop the development json < 3 pin and bundle update json.
|
|
21
|
+
|
|
22
|
+
Do not monkeypatch JSON.parse or ActiveSupport::JSON.decode in this library.
|
|
23
|
+
|
|
24
|
+
## Trigger
|
|
25
|
+
|
|
26
|
+
- bundle exec rspec after dropping the standard gem and resolving json 3.0.2. 71 request examples failed with Invalid JSON.
|
|
27
|
+
|
|
28
|
+
## Assessment target
|
|
29
|
+
|
|
30
|
+
- CI and test graphs: dummy Rails app used by spec/requests.
|
|
31
|
+
- Published gem execute path: JSON.parse of the request body with one argument.
|
|
32
|
+
|
|
33
|
+
## Status
|
|
34
|
+
|
|
35
|
+
- CI and test graphs: affected on json 3 with Rails 8.1.3.1 and 7.2.3.2. fixed after the development pin json < 3 and lockfiles at 2.21.2.
|
|
36
|
+
- Published gem execute path: not_affected for this ArgumentError. The one-argument JSON.parse path does not pass a positional options hash.
|
|
37
|
+
|
|
38
|
+
## Applicability
|
|
39
|
+
|
|
40
|
+
- Vulnerable component present: json 3 plus unreleased Rails decode.
|
|
41
|
+
- Exploit conditions: not a security advisory. Dummy JSON POST cannot complete parameter parsing.
|
|
42
|
+
|
|
43
|
+
## Priority
|
|
44
|
+
|
|
45
|
+
- CI graph: high because request specs fail on every GraphQL POST.
|
|
46
|
+
- Published gem execute path: low until a host on json 3 and unpatched Rails hits the same decoder.
|
|
47
|
+
|
|
48
|
+
## Disposition
|
|
49
|
+
|
|
50
|
+
- Pin. development gemspec json >= 2.21.2, < 3. Wait for a Rails patch release that includes rails/rails#58601.
|
|
51
|
+
|
|
52
|
+
## Next
|
|
53
|
+
|
|
54
|
+
- Watch Rails 8.1 / 7.2 patch notes for the json 3 decode kwargs fix. Then drop the json < 3 development pin and lock json 3.0.2 or newer.
|
|
55
|
+
|
|
56
|
+
## Source
|
|
57
|
+
|
|
58
|
+
- https://github.com/rails/rails/pull/58601
|
|
59
|
+
- https://github.com/ruby/json/blob/v3.0.2/CHANGES.md
|
|
60
|
+
- usr/docs/dependencies/20260907141000_json-cve-2026-71847.md
|
|
61
|
+
- usr/docs/issues/20260921114500_dependency-audit.md
|