Skip to content

feat(authz): dynamic value mapping and direct entitlement e2e coverage - #3774

Merged
alkalescent merged 12 commits into
mainfrom
DSPX-4097-e2e-dynamic-direct-entitlements
Jul 30, 2026
Merged

feat(authz): dynamic value mapping and direct entitlement e2e coverage#3774
alkalescent merged 12 commits into
mainfrom
DSPX-4097-e2e-dynamic-direct-entitlements

Conversation

@alkalescent

@alkalescent alkalescent commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Proposed Changes

  • Add claims-ERS support for direct entitlements: parse direct_entitlements from entity claims into EntityRepresentation.DirectEntitlements, gated by the experimental allow_direct_entitlements flag (service/entityresolution/claims/v2). Ported from the earlier direct-entitlement work.
  • Add BDD e2e coverage for dynamic value mappings via full TDF encrypt/decrypt (keycloak ERS): a new platform template with allow_dynamic_value_mappings enabled, a create a dynamic value mapping SDK step, and scenarios covering IN, IN_CONTAINS, a static pre-gate subject condition set, and ALL_OF multi-value (allow + deny).
  • Add BDD e2e coverage for direct entitlements via GetDecision PERMIT/DENY (the same AuthorizationV2 PDP path KAS rewrap uses, claims ERS): a new platform template with allow_direct_entitlements enabled, claims-entity steps, and scenarios covering action match/mismatch, a value not pre-provisioned in policy, and a subject-mapping + direct-entitlement combination.

Checklist

  • I have added or updated unit tests
  • I have added or updated integration tests (if appropriate)
  • I have added or updated documentation

Testing Instructions

  • cd service && go test ./entityresolution/claims/...
  • Build the BDD platform image and run the two features:
    • docker build -t platform-cukes .
    • cd tests-bdd && PLATFORM_IMAGE=platform-cukes:latest go test -tags cukes -v -run TestFeatures . --godog.tags="@dynamic-value-mappings,@direct-entitlements"
    • Verified locally: 9 scenarios (9 passed), 106 steps (106 passed).

Stacked on the otdfctl dynamic-value-mapping CLI branch; base is set accordingly so the diff is limited to this work.

Summary by CodeRabbit

  • New Features
    • Claims-based entity resolution can optionally extract and normalize direct_entitlements (behind a configuration flag).
    • Added BDD coverage and scenarios for direct-entitlements decisioning and dynamic value mappings.
    • Updated dynamic value mappings CLI management for create/list/get/update/delete flows.
  • Bug Fixes
    • Malformed direct_entitlements now produce clearer invalid-argument errors; FQN/action values are normalized.
  • Tests
    • Expanded unit and end-to-end BDD suites, including new step definitions and platform templates.
  • Documentation
    • Refreshed otdfctl man pages/examples to match updated dynamic value mappings CLI flags.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bd891ab8-9eb4-44a2-b3ad-2fea75933c51

📥 Commits

Reviewing files that changed from the base of the PR and between fdb33eb and e17a99a.

📒 Files selected for processing (2)
  • otdfctl/e2e/dynamic-value-mapping.bats
  • service/entityresolution/claims/v2/entity_resolution.go
💤 Files with no reviewable changes (1)
  • service/entityresolution/claims/v2/entity_resolution.go

📝 Walkthrough

Walkthrough

This PR adds configurable direct-entitlement extraction to claims entity resolution and introduces dynamic value mapping support across CLI commands, handlers, BDD steps, platform templates, documentation, and tests.

Changes

Direct entitlement resolution

Layer / File(s) Summary
Resolution configuration and parsing
service/entityresolution/claims/v2/entity_resolution.go
Adds configurable parsing, normalization, validation, and representation of direct entitlements.
Claims resolution tests
service/entityresolution/claims/v2/entity_resolution_test.go
Updates callers and tests enabled, disabled, normalized, and malformed direct entitlements.
Direct entitlement BDD scenarios
tests-bdd/cukes/resources/platform.direct_entitlements.template, tests-bdd/cukes/steps_directentitlements.go, tests-bdd/features/direct-entitlements.feature, tests-bdd/platform_test.go
Adds platform configuration, claims-entity steps, registration, and permit/deny scenarios.

Dynamic value mapping workflows

Layer / File(s) Summary
Dynamic mapping handlers and CLI
otdfctl/pkg/handlers/dynamicvaluemappings.go, otdfctl/cmd/policy/dynamicValueMappings.go
Adds attribute-reference resolution, SDK CRUD handlers, CLI flags, input parsing, and operator validation.
Dynamic mapping BDD execution
tests-bdd/cukes/steps_dynamicvaluemappings.go, tests-bdd/cukes/resources/platform.dynamic_value_mappings.template, tests-bdd/features/dynamic-value-mappings.feature, tests-bdd/platform_test.go, tests-bdd/go.mod
Adds mapping creation steps, platform configuration, entitlement scenarios, registration, and dependency updates.
CLI documentation and validation
otdfctl/docs/man/policy/dynamic-value-mappings/*, otdfctl/e2e/dynamic-value-mapping.bats, otdfctl/cmd/policy/dynamicValueMappings_test.go, otdfctl/pkg/handlers/dynamicvaluemappings_test.go
Documents revised flags and tests CRUD, filtering, sorting, parsing, and invalid-input behavior.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ClaimsSubject
  participant EntityResolution
  participant AuthorizationV2
  ClaimsSubject->>EntityResolution: submit claims with direct_entitlements
  EntityResolution->>AuthorizationV2: provide normalized DirectEntitlements
  AuthorizationV2-->>ClaimsSubject: evaluate permit or deny
Loading
sequenceDiagram
  participant Operator
  participant otdfctl
  participant Handler
  participant PolicyService
  Operator->>otdfctl: submit dynamic value mapping command
  otdfctl->>Handler: resolve attribute and validate operator
  Handler->>PolicyService: create, list, update, or delete mapping
  PolicyService-->>Operator: return mapping result
Loading

Possibly related PRs

Suggested labels: comp:authorization, comp:policy, comp:sdk, comp:ci, docs

Suggested reviewers: elizabethhealy

Poem

I’m a rabbit with mappings to share,
Direct entitlements hop through the air.
Claims are trimmed, actions align,
CLI commands make policies shine.
Tests leap through permits and denies—
Carrots for code beneath platform skies!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.69% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main authz-related change: new dynamic value mapping and direct entitlement end-to-end coverage.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch DSPX-4097-e2e-dynamic-direct-entitlements

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor
Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 211.217685ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 113.304371ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 430.708875ms
Throughput 232.18 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 46.505130164s
Average Latency 463.397524ms
Throughput 107.52 requests/second

@alkalescent
alkalescent marked this pull request as ready for review July 22, 2026 19:10
@alkalescent
alkalescent requested a review from a team as a code owner July 22, 2026 19:10
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@service/entityresolution/claims/v2/entity_resolution_test.go`:
- Around line 96-154: Add unit-test coverage in the claims entity-resolution
tests for malformed direct-entitlement payloads handled by
parseDirectEntitlementsFromClaims, parseDirectEntitlementFQN, and
parseDirectEntitlementActions. Cover a non-array direct_entitlements value, a
missing attribute_value_fqn, and missing or invalid actions; assert
EntityResolution returns an error with connect.CodeInvalidArgument for each
case.

In `@tests-bdd/features/dynamic-value-mappings.feature`:
- Around line 51-63: Extend the “Static pre-gate must also pass for entitlement”
scenario with a subject whose department matches the dynamic mapping but whose
attributes fail the alpha condition set, then encrypt a value and assert that
subject’s decryption is denied. Keep Alice’s successful decryption assertion
unchanged and use the existing subject/token setup patterns.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 393a6f22-25e6-470c-b65e-9e9ab78bf2ad

📥 Commits

Reviewing files that changed from the base of the PR and between 1b8b2f9 and 14293cc.

📒 Files selected for processing (9)
  • service/entityresolution/claims/v2/entity_resolution.go
  • service/entityresolution/claims/v2/entity_resolution_test.go
  • tests-bdd/cukes/resources/platform.direct_entitlements.template
  • tests-bdd/cukes/resources/platform.dynamic_value_mappings.template
  • tests-bdd/cukes/steps_directentitlements.go
  • tests-bdd/cukes/steps_dynamicvaluemappings.go
  • tests-bdd/features/direct-entitlements.feature
  • tests-bdd/features/dynamic-value-mappings.feature
  • tests-bdd/platform_test.go

Comment thread service/entityresolution/claims/v2/entity_resolution_test.go
Comment thread tests-bdd/features/dynamic-value-mappings.feature
@alkalescent
alkalescent requested a review from a team as a code owner July 22, 2026 21:44
@github-actions

Copy link
Copy Markdown
Contributor
Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 201.052727ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 108.086459ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 431.735696ms
Throughput 231.62 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 46.022422851s
Average Latency 458.506308ms
Throughput 108.64 requests/second

Base automatically changed from DSPX-4096-otdfctl-dynamic-value-mappings to main July 27, 2026 19:55
@alkalescent
alkalescent requested a review from a team as a code owner July 27, 2026 19:56

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@otdfctl/docs/man/policy/dynamic-value-mappings/create.md`:
- Line 61: Fenced examples lack the required blank line before their opening
fences. In otdfctl/docs/man/policy/dynamic-value-mappings/create.md at lines
61-61 and 66-66, delete.md at lines 24-24 and 29-29, and get.md at lines 22-22
and 27-27, insert a blank line immediately before each fence without changing
the example contents.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 511f57b1-f459-41c7-a7ed-2de96b65ea09

📥 Commits

Reviewing files that changed from the base of the PR and between 14293cc and c919cbb.

⛔ Files ignored due to path filters (1)
  • tests-bdd/go.sum is excluded by !**/*.sum
📒 Files selected for processing (11)
  • otdfctl/cmd/policy/dynamicValueMappings.go
  • otdfctl/docs/man/policy/dynamic-value-mappings/create.md
  • otdfctl/docs/man/policy/dynamic-value-mappings/delete.md
  • otdfctl/docs/man/policy/dynamic-value-mappings/get.md
  • otdfctl/docs/man/policy/dynamic-value-mappings/list.md
  • otdfctl/e2e/dynamic-value-mapping.bats
  • otdfctl/pkg/handlers/dynamicvaluemappings.go
  • service/entityresolution/claims/v2/entity_resolution.go
  • service/entityresolution/claims/v2/entity_resolution_test.go
  • tests-bdd/features/dynamic-value-mappings.feature
  • tests-bdd/go.mod

Comment thread otdfctl/docs/man/policy/dynamic-value-mappings/create.md
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
…pings

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
…ondition-set flags, flag grouping, docs)

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
@alkalescent
alkalescent force-pushed the DSPX-4097-e2e-dynamic-direct-entitlements branch from c919cbb to cb2f422 Compare July 27, 2026 20:58
@github-actions

Copy link
Copy Markdown
Contributor
Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 197.311459ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 116.564436ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 414.675675ms
Throughput 241.15 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 50.176156445s
Average Latency 499.523932ms
Throughput 99.65 requests/second

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor
Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 149.578478ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 83.185623ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 343.121665ms
Throughput 291.44 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 38.18263055s
Average Latency 379.986503ms
Throughput 130.95 requests/second

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@otdfctl/pkg/handlers/dynamicvaluemappings.go`:
- Around line 20-25: Add colocated table-driven tests in
otdfctl/pkg/handlers/dynamicvaluemappings_test.go for
getAttributeDefinitionIDAndFQN, covering valid UUID, FQN, and empty-string
inputs. Add tests in otdfctl/cmd/policy/dynamicValueMappings_test.go for
parseDynamicValueMappingActions covering UUID-versus-name branching, and
parseDynamicValueMappingOperator covering accepted and rejected operators,
including NOT_IN and UNSPECIFIED.

In `@service/entityresolution/claims/v2/entity_resolution.go`:
- Around line 34-36: Remove the unsupported default struct tag from
Config.AllowDirectEntitlements, keeping the mapstructure and json annotations
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 9ec76ba2-bd09-4926-b4ff-2ca295f90499

📥 Commits

Reviewing files that changed from the base of the PR and between c919cbb and 3b6e3d2.

⛔ Files ignored due to path filters (1)
  • tests-bdd/go.sum is excluded by !**/*.sum
📒 Files selected for processing (17)
  • otdfctl/cmd/policy/dynamicValueMappings.go
  • otdfctl/docs/man/policy/dynamic-value-mappings/create.md
  • otdfctl/docs/man/policy/dynamic-value-mappings/delete.md
  • otdfctl/docs/man/policy/dynamic-value-mappings/get.md
  • otdfctl/docs/man/policy/dynamic-value-mappings/list.md
  • otdfctl/e2e/dynamic-value-mapping.bats
  • otdfctl/pkg/handlers/dynamicvaluemappings.go
  • service/entityresolution/claims/v2/entity_resolution.go
  • service/entityresolution/claims/v2/entity_resolution_test.go
  • tests-bdd/cukes/resources/platform.direct_entitlements.template
  • tests-bdd/cukes/resources/platform.dynamic_value_mappings.template
  • tests-bdd/cukes/steps_directentitlements.go
  • tests-bdd/cukes/steps_dynamicvaluemappings.go
  • tests-bdd/features/direct-entitlements.feature
  • tests-bdd/features/dynamic-value-mappings.feature
  • tests-bdd/go.mod
  • tests-bdd/platform_test.go

Comment thread otdfctl/pkg/handlers/dynamicvaluemappings.go
Comment thread service/entityresolution/claims/v2/entity_resolution.go
…default tag

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor
Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 220.075737ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 120.333731ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 427.661676ms
Throughput 233.83 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 51.954974206s
Average Latency 517.311431ms
Throughput 96.24 requests/second

Comment thread service/entityresolution/claims/v2/entity_resolution.go
Comment thread service/entityresolution/claims/v2/entity_resolution.go Outdated
… log

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor
Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 204.290525ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 111.807384ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 557.965464ms
Throughput 179.22 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 48.097687243s
Average Latency 478.939177ms
Throughput 103.96 requests/second

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Govulncheck found vulnerabilities ⚠️

The following modules have known vulnerabilities:

  • examples
  • otdfctl
  • sdk
  • service
  • lib/fixtures
  • tests-bdd

See the workflow run for details.

@elizabethhealy elizabethhealy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm pending jp's response

@jp-ayyappan jp-ayyappan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@alkalescent
alkalescent added this pull request to the merge queue Jul 30, 2026
Merged via the queue into main with commit 49c80a0 Jul 30, 2026
46 checks passed
@alkalescent
alkalescent deleted the DSPX-4097-e2e-dynamic-direct-entitlements branch July 30, 2026 15:40
khvirtru pushed a commit to khvirtru/platform that referenced this pull request Aug 3, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.24.0](opentdf/platform@service/v0.23.0...service/v0.24.0)
(2026-07-30)


### Features

* **authz:** dynamic value mapping and direct entitlement e2e coverage
([opentdf#3774](opentdf#3774))
([49c80a0](opentdf@49c80a0))


### Bug Fixes

* **ers:** Add postgres_object output transformation for JSON/JSONB
results ([opentdf#3800](opentdf#3800))
([4618439](opentdf@4618439))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: opentdf-automation[bot] <149537512+opentdf-automation[bot]@users.noreply.github.com>
khvirtru pushed a commit to khvirtru/platform that referenced this pull request Aug 5, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.36.0](opentdf/platform@otdfctl/v0.35.0...otdfctl/v0.36.0)
(2026-08-04)


### ⚠ BREAKING CHANGES

* **policy:** GetPC does not respect manager field.
([opentdf#3752](opentdf#3752))

### Features

* **authz:** dynamic value mapping and direct entitlement e2e coverage
([opentdf#3774](opentdf#3774))
([49c80a0](opentdf@49c80a0))
* **cli:** add an sdkfactory for optional override in otdfctl for
extension ([opentdf#3793](opentdf#3793))
([c2f2afe](opentdf@c2f2afe))
* **cli:** add dynamic value mapping CRUD commands and e2e tests
([opentdf#3768](opentdf#3768))
([aecd265](opentdf@aecd265))
* **cli:** expose handler hook for injecting SDK options
([opentdf#3755](opentdf#3755))
([76305b0](opentdf@76305b0))
* **cli:** Unsafe update key cli
([opentdf#3733](opentdf#3733))
([65d888e](opentdf@65d888e))


### Bug Fixes

* **deps:** bump github.com/opentdf/platform/protocol/go from 0.36.0 to
0.39.0 in /otdfctl
([opentdf#3765](opentdf#3765))
([a3346f8](opentdf@a3346f8))
* **deps:** bump github.com/opentdf/platform/sdk from 0.25.0 to 0.27.0
in /otdfctl ([opentdf#3773](opentdf#3773))
([490c990](opentdf@490c990))
* **policy:** GetPC does not respect manager field.
([opentdf#3752](opentdf#3752))
([0d3c0a0](opentdf@0d3c0a0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: opentdf-automation[bot] <149537512+opentdf-automation[bot]@users.noreply.github.com>
Co-authored-by: Elizabeth Healy <35498075+elizabethhealy@users.noreply.github.com>
khvirtru pushed a commit to khvirtru/platform that referenced this pull request Aug 5, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.36.0](opentdf/platform@otdfctl/v0.35.0...otdfctl/v0.36.0)
(2026-08-04)


### ⚠ BREAKING CHANGES

* **policy:** GetPC does not respect manager field.
([opentdf#3752](opentdf#3752))

### Features

* **authz:** dynamic value mapping and direct entitlement e2e coverage
([opentdf#3774](opentdf#3774))
([49c80a0](opentdf@49c80a0))
* **cli:** add an sdkfactory for optional override in otdfctl for
extension ([opentdf#3793](opentdf#3793))
([c2f2afe](opentdf@c2f2afe))
* **cli:** add dynamic value mapping CRUD commands and e2e tests
([opentdf#3768](opentdf#3768))
([aecd265](opentdf@aecd265))
* **cli:** expose handler hook for injecting SDK options
([opentdf#3755](opentdf#3755))
([76305b0](opentdf@76305b0))
* **cli:** Unsafe update key cli
([opentdf#3733](opentdf#3733))
([65d888e](opentdf@65d888e))


### Bug Fixes

* **deps:** bump github.com/opentdf/platform/protocol/go from 0.36.0 to
0.39.0 in /otdfctl
([opentdf#3765](opentdf#3765))
([a3346f8](opentdf@a3346f8))
* **deps:** bump github.com/opentdf/platform/sdk from 0.25.0 to 0.27.0
in /otdfctl ([opentdf#3773](opentdf#3773))
([490c990](opentdf@490c990))
* **policy:** GetPC does not respect manager field.
([opentdf#3752](opentdf#3752))
([0d3c0a0](opentdf@0d3c0a0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: opentdf-automation[bot] <149537512+opentdf-automation[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants