fix(adr0034): Post implementation fixes - #1223
Merged
Merged
Conversation
gtema
commented
Sep 8, 2026
Collaborator
- fix(policy): Restrict assignment domain-config group to cloud admins
- fix(assignment): Rebuild domain-config resolver on config reload
- fix(assignment-openfga): Apply a default request timeout
- fix(assignment-openfga): Read stored tuples for actor-only listings
- fix(auth): Gate the system-role check with a system_id filter
- fix(domain-config): Warn when a bound assignment driver is inert
- fix(config): Redact api_key from OpenFGAAssignmentDriver Debug
- docs(test): Note the assignment-group policy coverage split
ADR 0034 §6: binding a domain to an assignment backend mints roles and must not be reachable by a domain-scoped token. The domain-scoped `admin` and `manager` allow rules now exclude the `assignment` group; writing it requires a configured admin SVID or a system-scoped `admin`. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
The resolver was frozen at construction, so turning `domain_specific_drivers_enabled` on, or switching `[domain_config]` sources, never took effect until a restart. Capture the fs and sql domain-config backend handles and recompute the resolver from them on every reload, gated on the dispatch switch and an active source. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
An unset `timeout` left the OpenFGA HTTP client with no cap, so a stalled store wedges an assignment call and its caller's token issuance indefinitely. Default to 30s when the configuration omits it. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
A non-effective actor-only listing was rejected (`ListingActorWithoutScopeRequiresEffective`), which broke SCIM group deprovisioning. Issue a type-scoped `read` with a `user` filter per target type instead -- the actor-keyed counterpart of a target-scoped listing. SCIM group delete reverts to the plain non-effective listing. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
`target_holds_system_role` listed a user's assignments unfiltered and scanned the result in memory. Pass `system_id` so the query is narrowed at the driver and routed to the global driver, and re-check the assignment type as a defence-in-depth gate. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
A domain bound to a non-sql, non-global assignment driver that no `[assignment.domains]` block maps to silently resolves to the global driver. Emit a warning at bind time so the misconfiguration is visible. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
The derived `Debug` printed the OpenFGA API key in cleartext wherever the assignment config was logged. Hand-write `Debug` to render it as `<redacted>`. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
Record in the api_v3 domain_config test module that the project-scoped `admin` refusal and the domain-scoped `admin` / `manager` carve-out are covered by the rego tests and the real-opa handler tests. Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
gtema
force-pushed
the
claude/per-domain-assignments-provider-k0tp5e
branch
from
September 8, 2026 14:07
23ecd16 to
dfa7e96
Compare
|
| Project | keystone |
| Branch | claude/per-domain-assignments-provider-k0tp5e |
| Testbed | ubuntu-latest |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result nanoseconds (ns) (Result Δ%) | Upper Boundary nanoseconds (ns) (Limit %) |
|---|---|---|---|
| Command_Serde/apply/remove | 📈 view plot 🚷 view threshold | 136,920.00 ns(-47.25%)Baseline: 259,559.34 ns | 1,311,031.97 ns (10.44%) |
| Command_Serde/apply/set | 📈 view plot 🚷 view threshold | 158,350.00 ns(-62.24%)Baseline: 419,380.38 ns | 3,209,879.64 ns (4.93%) |
| Command_Serde/pack/delete | 📈 view plot 🚷 view threshold | 122.67 ns(+4.81%)Baseline: 117.04 ns | 154.97 ns (79.16%) |
| Command_Serde/pack/delete_index | 📈 view plot 🚷 view threshold | 108.85 ns(+4.28%)Baseline: 104.38 ns | 137.27 ns (79.30%) |
| Command_Serde/pack/set | 📈 view plot 🚷 view threshold | 213.51 ns(+12.66%)Baseline: 189.52 ns | 244.82 ns (87.21%) |
| Command_Serde/pack/set_index | 📈 view plot 🚷 view threshold | 108.80 ns(+4.26%)Baseline: 104.36 ns | 137.62 ns (79.06%) |
| Command_Serde/unpack/delete | 📈 view plot 🚷 view threshold | 194.23 ns(+4.34%)Baseline: 186.16 ns | 270.92 ns (71.69%) |
| Command_Serde/unpack/delete_index | 📈 view plot 🚷 view threshold | 160.62 ns(+3.74%)Baseline: 154.83 ns | 219.24 ns (73.26%) |
| Command_Serde/unpack/set | 📈 view plot 🚷 view threshold | 289.77 ns(+10.28%)Baseline: 262.77 ns | 365.10 ns (79.37%) |
| Command_Serde/unpack/set_index | 📈 view plot 🚷 view threshold | 159.64 ns(+4.71%)Baseline: 152.46 ns | 213.79 ns (74.67%) |
| Payload_encryption/pack/remove_cmd | 📈 view plot 🚷 view threshold | 115.28 ns(+3.47%)Baseline: 111.42 ns | 150.97 ns (76.36%) |
| Payload_encryption/pack/set_cmd | 📈 view plot 🚷 view threshold | 200.78 ns(+1.27%)Baseline: 198.26 ns | 266.03 ns (75.47%) |
| Payload_encryption/unpack/remove_cmd | 📈 view plot 🚷 view threshold | 211.01 ns(+8.25%)Baseline: 194.94 ns | 285.15 ns (74.00%) |
| Payload_encryption/unpack/set_cmd | 📈 view plot 🚷 view threshold | 300.71 ns(+10.63%)Baseline: 271.81 ns | 380.92 ns (78.94%) |
| Raft_1Node_Latency/prefix/1node | 📈 view plot 🚷 view threshold | 2,574,600.00 ns(-16.35%)Baseline: 3,077,917.80 ns | 7,920,498.52 ns (32.51%) |
| Raft_1Node_Latency/read/1node | 📈 view plot 🚷 view threshold | 40,270.00 ns(+8.12%)Baseline: 37,245.34 ns | 52,144.08 ns (77.23%) |
| Raft_1Node_Latency/remove/1node | 📈 view plot 🚷 view threshold | 389,900.00 ns(-66.27%)Baseline: 1,156,037.97 ns | 11,478,282.95 ns (3.40%) |
| Raft_1Node_Latency/write/1node | 📈 view plot 🚷 view threshold | 426,470.00 ns(-55.76%)Baseline: 963,920.94 ns | 7,540,733.87 ns (5.66%) |
| build_snapshot/default | 📈 view plot 🚷 view threshold | 113,440.00 ns(-6.85%)Baseline: 121,778.70 ns | 266,982.99 ns (42.49%) |
| fernet token/project | 📈 view plot 🚷 view threshold | 1,449.50 ns(+2.44%)Baseline: 1,415.02 ns | 1,818.00 ns (79.73%) |
| get_data_keyspace | 📈 view plot 🚷 view threshold | 0.31 ns(+0.02%)Baseline: 0.31 ns | 0.39 ns (80.66%) |
| get_db | 📈 view plot 🚷 view threshold | 0.31 ns(+0.05%)Baseline: 0.31 ns | 0.39 ns (80.66%) |
| get_fernet_token_timestamp/project | 📈 view plot 🚷 view threshold | 143.68 ns(+3.13%)Baseline: 139.32 ns | 181.84 ns (79.02%) |
| get_keyspace | 📈 view plot 🚷 view threshold | 4.38 ns(-24.25%)Baseline: 5.79 ns | 13.03 ns (33.62%) |
|
🦢 Load Test Results Goose Attack ReportPlan Overview
Request Metrics
Response Time Metrics
Status Code Metrics
Transaction Metrics
Scenario Metrics
Error Metrics
|
|
🧪 Tempest Identity Compatibility Results (advisory, non-blocking) rust Failed test IDs |
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.