Skip to content

feat(policy): rollback migration strategy for namespaced actions#3235

Merged
elizabethhealy merged 9 commits into
mainfrom
dsxp-2540-custom-down-actions-migration
Apr 8, 2026
Merged

feat(policy): rollback migration strategy for namespaced actions#3235
elizabethhealy merged 9 commits into
mainfrom
dsxp-2540-custom-down-actions-migration

Conversation

@elizabethhealy

@elizabethhealy elizabethhealy commented Apr 1, 2026

Copy link
Copy Markdown
Member

Proposed Changes

Highlights

  • Migration Rollback Strategy: Implemented a data-aware rollback strategy for the 'add_namespace_to_actions' migration that automatically canonicalizes action IDs and remaps references.
  • Database Integrity: Added logic to safely merge namespace-scoped duplicate actions into a single global action during rollback, preventing constraint violations.
  • Documentation Update: Updated migration documentation to reflect that rolling back the namespace migration is now a safe, albeit lossy, automated process.

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

Summary by CodeRabbit

  • New Features

    • Actions can be scoped to namespaces; uniqueness now supports both namespaced and global actions and includes an index for faster namespaced lookups.
  • Tests

    • Added an integration test that verifies rollback deterministically remaps duplicate action names to a canonical global action, deduplicates references, and prevents orphaned references.
  • Documentation

    • Clarified rollback semantics: rollback now performs deterministic remapping and is intentionally lossy when collapsing namespaced duplicates.

@coderabbitai

coderabbitai Bot commented Apr 1, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds nullable namespace_id to actions, introduces partial uniqueness/indexes for namespaced vs global actions, and implements a data-aware Down migration that canonicalizes action IDs, remaps/deduplicates references, and removes duplicate actions; includes an integration test validating the rollback remap-and-collapse behavior.

Changes

Cohort / File(s) Summary
Namespace Actions Migration
service/policy/db/migrations/20260312000000_add_namespace_to_actions.md, service/policy/db/migrations/20260312000000_add_namespace_to_actions.sql
Adds actions.namespace_id FK and index; replaces global UNIQUE(name) with partial uniqueness (UNIQUE(namespace_id,name) for namespaced rows; UNIQUE(name) for global rows). Down migration now deterministically canonicalizes actions by name (prefer namespace_id IS NULL, then earliest created_at, then smallest id), builds an action_id remap, remaps and deduplicates subject_mapping_actions, registered_resource_action_attribute_values, and obligation_triggers, deletes non-canonical action rows, then drops indexes/constraints and the column.
Rollback Documentation Update
service/policy/db/migrations/20260331000000_seed_standard_actions_for_existing_namespaces.md
Updates operational rollback note to state the Down migration will automatically canonicalize action IDs, remap policy references by action name, and that rollback is intentionally lossy (duplicate names across namespaces collapse to a single global action).
Migration Data Integration Test
service/integration/migration_test.go
Adds TestMigrationData_ActionsNamespaceDownRemapsAndDedupes which seeds global and namespaced duplicate actions plus dependent rows, runs the Down migration, and asserts actions.namespace_id removal, no duplicate actions.name, correct remapping to canonical action IDs, deduplication of referencing tables, and no orphaned references. Also removes a //nolint:unparam comment from queryRow.

Sequence Diagram(s)

(omitted — changes are database migrations and an integration test; no multi-component sequential flow requiring visualization)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • jakedoublev
  • c-r33d
  • strantalis

Poem

🐰 I hopped through rows both old and new,
I stitched IDs where duplicates grew,
I remapped keys with tidy paws,
Collapsed names to follow laws,
A little hop — migrations through! 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: implementing a rollback migration strategy for namespaced actions with data canonicalization and reference remapping.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 dsxp-2540-custom-down-actions-migration

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 and usage tips.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the database migration rollback process for namespaced actions. It introduces a robust mechanism to handle the transition from namespace-scoped actions back to global-only action semantics, ensuring that references are correctly remapped and duplicate rows are merged without manual intervention.

Highlights

  • Migration Rollback Strategy: Implemented a data-aware rollback strategy for the 'add_namespace_to_actions' migration that automatically canonicalizes action IDs and remaps references.
  • Database Integrity: Added logic to safely merge namespace-scoped duplicate actions into a single global action during rollback, preventing constraint violations.
  • Documentation Update: Updated migration documentation to reflect that rolling back the namespace migration is now a safe, albeit lossy, automated process.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.


The namespaces grow and expand, / But rollback was not quite as planned. / With logic now tight, / We merge them to right, / And leave the database safely spanned.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions github-actions Bot added comp:db DB component comp:policy Policy Configuration ( attributes, subject mappings, resource mappings, kas registry) size/m labels Apr 1, 2026

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request implements a data-aware rollback strategy for the add_namespace_to_actions migration, ensuring that namespace-scoped actions are safely merged back into global actions by canonicalizing IDs and remapping references. The feedback focuses on performance optimizations for the migration script, including indexing the temporary remap table and utilizing TRUNCATE instead of DELETE for more efficient table repopulation.

@github-actions

github-actions Bot commented Apr 1, 2026

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 186.324596ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 394.331476ms
Throughput 253.59 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.767538978s
Average Latency 395.970706ms
Throughput 125.73 requests/second

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

@elizabethhealy

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Apr 1, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@elizabethhealy

Copy link
Copy Markdown
Member Author

after seeding with namespaced policy and running migration down a few times to get to this migration:

== Post-down validations ==
✅ duplicate action names: 0
✅ actions.namespace_id column exists: 0
✅ subject_mapping_actions orphan action refs: 0
✅ subject_mapping_actions resolved refs: all referenced action_ids resolve
✅ registered_resource_action_attribute_values orphan action refs: 0
✅ registered_resource_action_attribute_values resolved refs: all referenced action_ids resolve
✅ obligation_triggers orphan action refs: 0
✅ obligation_triggers resolved refs: all referenced action_ids resolve
✅ standard CRUD rows present: 4

@elizabethhealy
elizabethhealy marked this pull request as ready for review April 1, 2026 18:41
@elizabethhealy
elizabethhealy requested review from a team as code owners April 1, 2026 18:41
@github-actions

github-actions Bot commented Apr 1, 2026

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 190.807247ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 413.254941ms
Throughput 241.98 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.35546979s
Average Latency 410.481059ms
Throughput 120.90 requests/second

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

c-r33d
c-r33d previously approved these changes Apr 1, 2026
@jakedoublev

Copy link
Copy Markdown
Contributor

This looks good to me. Do you have any ideas for how we can test the down migration path better in CI? This seems like a particularly risky migration.

@elizabethhealy

elizabethhealy commented Apr 1, 2026

Copy link
Copy Markdown
Member Author

@jakedoublev i think its definitely possible but it will probably be a larger effort since we dont have any migration test infra atm

Base automatically changed from dspx-2540-migrate-standard-actions-when-enabled to main April 1, 2026 20:48
@elizabethhealy
elizabethhealy dismissed c-r33d’s stale review April 1, 2026 20:48

The base branch was changed.

@elizabethhealy
elizabethhealy requested a review from a team as a code owner April 1, 2026 20:48
@github-actions

github-actions Bot commented Apr 6, 2026

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 200.098609ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 379.369456ms
Throughput 263.60 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.541277164s
Average Latency 404.149761ms
Throughput 123.33 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 the current code and only fix it if needed.

Inline comments:
In `@service/integration/migration_test.go`:
- Around line 232-474: The test
TestMigrationData_ActionsNamespaceDownRemapsAndDedupes covers preferring a
global action but doesn't cover the fallback branch where no global action
exists and the migration must pick the canonical action among namespaced-only
duplicates (using created_at ASC, id ASC). Update this test to insert an
additional action name that has two rows both with namespace_id set (no
NULL/global row) — use distinct created_at timestamps (or set explicit
created_at values) and deterministic IDs — then run the Down migration and
assert the chosen action_id in referencing tables equals the expected canonical
row per created_at ASC, id ASC tie-breaker and that duplicates are collapsed to
one; reference the test function
TestMigrationData_ActionsNamespaceDownRemapsAndDedupes, the actions table
inserts for namespacedCreateID/globalCreateID, and the post-migration assertions
that query action_id in
subject_mapping_actions/registered_resource_action_attribute_values/obligation_triggers
to add the new checks.

In `@service/policy/db/migrations/20260312000000_add_namespace_to_actions.sql`:
- Around line 97-111: The DISTINCT ON grouping currently prefers the lowest
rr.id which can pick remapped rows over already-canonical rows; update the ORDER
BY in the rr_aav_dedup temp-table SELECT (and the analogous block at lines
133-150) to prefer rows where the LEFT JOIN did NOT remap (i.e. r.new_action_id
IS NULL) by adding an ORDER BY expression like (r.new_action_id IS NOT NULL) ASC
before rr.id so canonical rows come first, then fall back to rr.id for
deterministic tie-breaking; apply this change to the SELECT that defines
rr_aav_dedup and the similar SELECT later.
🪄 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: 7ebd46f0-7aeb-420e-aba4-4d19bccfe905

📥 Commits

Reviewing files that changed from the base of the PR and between 35cb33c and 0b5ecb6.

📒 Files selected for processing (2)
  • service/integration/migration_test.go
  • service/policy/db/migrations/20260312000000_add_namespace_to_actions.sql

Comment thread service/integration/migration_test.go
Comment thread service/policy/db/migrations/20260312000000_add_namespace_to_actions.sql Outdated
@github-actions

github-actions Bot commented Apr 6, 2026

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 181.202255ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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.140296ms
Throughput 241.46 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.850774889s
Average Latency 396.697392ms
Throughput 125.47 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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@service/integration/migration_test.go`:
- Around line 353-358: The two inserted rows currently use nsOnlyOlderID and
nsOnlyNewerID which alphabetically match their timestamps; swap the UUID
variables so the row with the older created_at uses nsOnlyNewerID and the newer
created_at uses nsOnlyOlderID in the INSERT call (the call that passes
nsOnlyOlderID, namespaceID, nsOnlyNewerID, namespaceTwoID) to ensure created_at
ordering is actually tested versus id ordering; update the parameter order in
the h.exec invocation accordingly so the older timestamp has the larger UUID.
🪄 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: 4271b99a-7986-4833-a456-023087faa4c8

📥 Commits

Reviewing files that changed from the base of the PR and between 0b5ecb6 and 2b3f117.

📒 Files selected for processing (2)
  • service/integration/migration_test.go
  • service/policy/db/migrations/20260312000000_add_namespace_to_actions.sql

@github-actions

github-actions Bot commented Apr 6, 2026

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 175.515772ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 426.955013ms
Throughput 234.22 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.648027538s
Average Latency 414.263394ms
Throughput 120.05 requests/second

@github-actions

github-actions Bot commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

⚠️ Govulncheck found vulnerabilities ⚠️

The following modules have known vulnerabilities:

  • service
  • tests-bdd

See the workflow run for details.

@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 the current code and only fix it if needed.

Inline comments:
In `@service/integration/migration_test.go`:
- Around line 353-358: The test needs to exercise the final tie-breaker that
orders by id ASC: insert an additional pair of actions with the same name and
identical created_at timestamps but with the two UUIDs in inverted order (use
two new IDs, e.g., nsTieHigherID and nsTieLowerID, inserted with the same
timestamp) so created_at cannot decide; after calling the migration
canonicalization (the same downTo(...) invocation used in this test), assert
that the smaller UUID (nsTieLowerID) is kept and the larger one is removed.
Modify the h.exec insert block that currently creates namespaced pairs and add
the third pair with identical timestamps, then extend the test assertions after
invoking downTo(...) to check the surviving ID for that name is the smaller
UUID.
- Around line 447-524: The tests only assert the 'create' action survived
migration; expand the post-rollback assertions to cover the full CRUD set
('create','read','update','delete'). After the migration steps where you already
fetch globalCreateID, query and capture
globalReadID/globalUpdateID/globalDeleteID from actions by name, assert that
actions table contains exactly one row for each CRUD name, and for each of
subject_mapping_actions, registered_resource_action_attribute_values, and
obligation_triggers verify that references to each CRUD name resolve to the
corresponding canonical globalXID and that the total counts for those mappings
include one entry pointing to the canonical ID and any other expected custom
IDs. Use the existing variables subjectMappingID, registeredValueID,
obligationValID and the pattern used for globalCreateID to locate where to add
these assertions (e.g., mirror the queries that resolve and count 'create' for
'read','update','delete').
🪄 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: 7f5a44c2-4e1b-4bbc-955a-0b72b5a9e428

📥 Commits

Reviewing files that changed from the base of the PR and between 2b3f117 and 47ec7af.

📒 Files selected for processing (1)
  • service/integration/migration_test.go

Comment thread service/integration/migration_test.go
Comment thread service/integration/migration_test.go
@elizabethhealy
elizabethhealy requested a review from c-r33d April 7, 2026 14:08
@elizabethhealy
elizabethhealy added this pull request to the merge queue Apr 8, 2026
Merged via the queue into main with commit f7e5e01 Apr 8, 2026
39 checks passed
@elizabethhealy
elizabethhealy deleted the dsxp-2540-custom-down-actions-migration branch April 8, 2026 20:07
JBCongdon pushed a commit to JBCongdon/platform that referenced this pull request May 24, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.14.0](opentdf/platform@service/v0.13.0...service/v0.14.0)
(2026-04-21)


### ⚠ BREAKING CHANGES

* **sdk:** reclassify KAS 400 errors — distinguish tamper from
misconfiguration
([opentdf#3166](opentdf#3166))
* **policy:** optional namespace for RRs
([opentdf#3165](opentdf#3165))
* **policy:** Namespace subject mappings and subject condition sets.
([opentdf#3143](opentdf#3143))
* **policy:** Optional namespace on actions protos, NamespacedPolicy
feature flag ([opentdf#3155](opentdf#3155))
* **policy:** add namespaced actions schema and namespace-aware action
queries ([opentdf#3154](opentdf#3154))
* **policy:** only require namespace on GetAction if no id provided
([opentdf#3144](opentdf#3144))
* **policy:** add namespace field to Actions proto
([opentdf#3130](opentdf#3130))
* **policy:** namespace Registered Resources
([opentdf#3111](opentdf#3111))
* **policy:** add namespace field to RegisteredResource proto
([opentdf#3110](opentdf#3110))

### Features

* **authz:** Namespaced policy in decisioning
([opentdf#3226](opentdf#3226))
([0355934](opentdf@0355934))
* **cli:** migrate otdfctl into platform monorepo
([opentdf#3205](opentdf#3205))
([5177bec](opentdf@5177bec))
* fix tracing ([opentdf#3242](opentdf#3242))
([57e5680](opentdf@57e5680))
* **policy:** add GetObligationTrigger RPC
([opentdf#3318](opentdf#3318))
([d68e39d](opentdf@d68e39d))
* **policy:** add namespace field to Actions proto
([opentdf#3130](opentdf#3130))
([bedc9b3](opentdf@bedc9b3))
* **policy:** add namespace field to RegisteredResource proto
([opentdf#3110](opentdf#3110))
([04fd85d](opentdf@04fd85d))
* **policy:** add namespaced actions schema and namespace-aware action
queries ([opentdf#3154](opentdf#3154))
([c0443f1](opentdf@c0443f1))
* **policy:** add sort ListSubjectMappings API
([opentdf#3255](opentdf#3255))
([9d5d757](opentdf@9d5d757))
* **policy:** Add sort support listregisteredresources api
([opentdf#3312](opentdf#3312))
([91a3ff3](opentdf@91a3ff3))
* **policy:** add sort support to ListAttributes API
([opentdf#3223](opentdf#3223))
([ec3312f](opentdf@ec3312f))
* **policy:** add sort support to ListKeyAccessServer
([opentdf#3287](opentdf#3287))
([7fae2d7](opentdf@7fae2d7))
* **policy:** Add sort support to ListNamespaces API
([opentdf#3192](opentdf#3192))
([aac86cd](opentdf@aac86cd))
* **policy:** add sort support to listobligations api
([opentdf#3300](opentdf#3300))
([9221cac](opentdf@9221cac))
* **policy:** add sort support to ListSubjectConditionSets API
([opentdf#3272](opentdf#3272))
([9010f12](opentdf@9010f12))
* **policy:** add SortField proto and update PageRequest for sort
support ([opentdf#3187](opentdf#3187))
([6cf1862](opentdf@6cf1862))
* **policy:** Enforce same namespace when actions referenced downstream
([opentdf#3206](opentdf#3206))
([4b5463a](opentdf@4b5463a))
* **policy:** namespace Registered Resources
([opentdf#3111](opentdf#3111))
([6db1883](opentdf@6db1883))
* **policy:** Namespace subject mappings and condition sets
([opentdf#3172](opentdf#3172))
([6deed50](opentdf@6deed50))
* **policy:** Namespace subject mappings and subject condition sets.
([opentdf#3143](opentdf#3143))
([3006780](opentdf@3006780))
* **policy:** optional namespace for RRs
([opentdf#3165](opentdf#3165))
([8948018](opentdf@8948018))
* **policy:** rollback migration strategy for namespaced actions
([opentdf#3235](opentdf#3235))
([f7e5e01](opentdf@f7e5e01))
* **policy:** Seed existing namespaces with standard actions
([opentdf#3228](opentdf#3228))
([12136b0](opentdf@12136b0))
* **policy:** Seed namespaces with standard actions on creation +
namespaced actions for obligation triggers
([opentdf#3161](opentdf#3161))
([984d76b](opentdf@984d76b))


### Bug Fixes

* **ci:** Upgrade toolchain version to 1.25.8
([opentdf#3116](opentdf#3116))
([e1b7882](opentdf@e1b7882))
* **core:** do not concat slashes directly in url/file paths
([opentdf#3290](opentdf#3290))
([114c2a7](opentdf@114c2a7))
* **deps:** bump github.com/jackc/pgx/v5 from 5.7.5 to 5.9.0 in /service
([opentdf#3316](opentdf#3316))
([017362e](opentdf@017362e))
* **deps:** bump github.com/opentdf/platform/lib/identifier from 0.2.0
to 0.3.0 in /service
([opentdf#3162](opentdf#3162))
([8bc5dcd](opentdf@8bc5dcd))
* **deps:** bump github.com/opentdf/platform/protocol/go from 0.16.0 to
0.17.0 in /service
([opentdf#3125](opentdf#3125))
([29fec61](opentdf@29fec61))
* **deps:** bump github.com/opentdf/platform/protocol/go from 0.17.0 to
0.21.0 in /service
([opentdf#3220](opentdf#3220))
([e63add2](opentdf@e63add2))
* **deps:** bump github.com/opentdf/platform/protocol/go from 0.21.0 to
0.22.0 in /service
([opentdf#3248](opentdf#3248))
([1ebce73](opentdf@1ebce73))
* **deps:** bump github.com/opentdf/platform/protocol/go from 0.22.0 to
0.23.0 in /service
([opentdf#3271](opentdf#3271))
([3338b8e](opentdf@3338b8e))
* **deps:** bump github.com/opentdf/platform/protocol/go from 0.23.0 to
0.24.0 in /service
([opentdf#3321](opentdf#3321))
([78e6022](opentdf@78e6022))
* **deps:** bump github.com/opentdf/platform/protocol/go from 0.24.0 to
0.25.0 in /service
([opentdf#3333](opentdf#3333))
([3940bf8](opentdf@3940bf8))
* **deps:** bump github.com/opentdf/platform/sdk from 0.13.0 to 0.16.0
in /service ([opentdf#3356](opentdf#3356))
([5617077](opentdf@5617077))
* **deps:** bump
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp from
1.42.0 to 1.43.0 in /service
([opentdf#3282](opentdf#3282))
([046374a](opentdf@046374a))
* **deps:** bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 in
/service ([opentdf#3281](opentdf#3281))
([56b33f2](opentdf@56b33f2))
* **deps:** bump google.golang.org/grpc from 1.77.0 to 1.79.3 in
/service ([opentdf#3176](opentdf#3176))
([3289502](opentdf@3289502))
* **deps:** remove direct github.com/docker/docker dependency
([opentdf#3229](opentdf#3229))
([2becb27](opentdf@2becb27))
* **deps:** upgrade testcontainers-go to resolve vulns
([opentdf#3299](opentdf#3299))
([72c6f9b](opentdf@72c6f9b))
* **ers:** include standard JWT claims in claims mode entity resolution
([opentdf#3196](opentdf#3196))
([6d50da1](opentdf@6d50da1))
* **ers:** ldap multi-strategy ers
([opentdf#3117](opentdf#3117))
([d3aaf1a](opentdf@d3aaf1a))
* **policy:** deprecate ListAttributeValues in favor of existing
GetAttribute ([opentdf#3108](opentdf#3108))
([7e17c2d](opentdf@7e17c2d))
* **policy:** make obligation trigger uniqueness client-aware
([opentdf#3114](opentdf#3114))
([9265bc3](opentdf@9265bc3))
* **policy:** omit empty attribute values from create responses
([opentdf#3193](opentdf#3193))
([d298378](opentdf@d298378))
* **policy:** only require namespace on GetAction if no id provided
([opentdf#3144](opentdf#3144))
([10d0c0f](opentdf@10d0c0f))
* **policy:** Optional namespace on actions protos, NamespacedPolicy
feature flag ([opentdf#3155](opentdf#3155))
([c20f039](opentdf@c20f039))
* **policy:** order List* results by created_at
([opentdf#3088](opentdf#3088))
([ea90ac2](opentdf@ea90ac2))
* **sdk:** normalize issuer URL before OIDC discovery
([opentdf#3261](opentdf#3261))
([61f98c9](opentdf@61f98c9))
* **sdk:** reclassify KAS 400 errors — distinguish tamper from
misconfiguration
([opentdf#3166](opentdf#3166))
([f04a385](opentdf@f04a385))
* **sdk:** remove testcontainers from consumer dependency graph
([opentdf#3129](opentdf#3129))
([f17dcdd](opentdf@f17dcdd))

---
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

comp:db DB component comp:policy Policy Configuration ( attributes, subject mappings, resource mappings, kas registry) size/m

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants