Skip to content

feat(cli): migrate otdfctl into platform monorepo#3205

Open
alkalescent wants to merge 16 commits intomainfrom
DSPX-2655-migrate-otdfctl
Open

feat(cli): migrate otdfctl into platform monorepo#3205
alkalescent wants to merge 16 commits intomainfrom
DSPX-2655-migrate-otdfctl

Conversation

@alkalescent
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent commented Mar 23, 2026

Proposed Changes

  • Base PR for the otdfctl migration stack (DSPX-2654 epic)
  • Merge opentdf/otdfctl into otdfctl/ via git subtree add, preserving full git history and tags
  • Rewrite Go module path and integrate with go.work workspace

DSPX-2655: Subtree merge + cleanup

  • Subtree merge of latest otdfctl main (v0.30.0, includes namespace refactor and dependency bumps)
  • Remove files handled at platform root (.github/, .golangci.yaml, CONTRIBUTING.md, LICENSE)
  • Keep otdfctl/CHANGELOG.md for historical reference
  • Update root .gitignore, CODEOWNERS, pr-checks scope
  • Import tags as otdfctl/* prefix (e.g., otdfctl/v0.26.2)

DSPX-2656: Module path rewrite

  • Rewrite module path: github.com/opentdf/otdfctlgithub.com/opentdf/platform/otdfctl
  • Update all Go import statements (~54 files)
  • Add otdfctl to go.work workspace
  • Update Dockerfile

DSPX-2657: Makefile and build scripts

  • Update root and otdfctl Makefiles for monorepo integration
  • Restore build scripts from original otdfctl repo

DSPX-2658: CI matrix

  • Add otdfctl to checks.yaml go job matrix
  • govulncheck, golangci-lint, unit tests, go fmt/tidy checks

PR Stack (DSPX-2654)

  1. This PR (feat(cli): migrate otdfctl into platform monorepo #3205) — Subtree merge + module path rewrite (DSPX-2655, DSPX-2656)
  2. feat(cli): Makefile and build scripts #3208 — Makefile and build scripts (DSPX-2657)
  3. feat(cli): add otdfctl to platform CI matrix #3221 — CI workflows (DSPX-2658)
  4. (future) — e2e tests (DSPX-2659)

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

  • git log --oneline --follow -M otdfctl/cmd/root.go shows pre-merge history
  • git tag | grep otdfctl/v0.26 confirms tags imported
  • go build ./otdfctl/... succeeds

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 23, 2026

Important

Review skipped

Too many files!

This PR contains 298 files, which is 148 over the limit of 150.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 857050a9-ae62-4285-96d4-b0697b1cbcde

📥 Commits

Reviewing files that changed from the base of the PR and between 9010f12 and 9febda1.

⛔ Files ignored due to path filters (2)
  • go.work is excluded by !**/*.work
  • otdfctl/go.sum is excluded by !**/*.sum
📒 Files selected for processing (298)
  • .github/dependabot.yml
  • .github/release-please/release-please-config.main.json
  • .github/release-please/release-please-config.otdfctl.json
  • .github/release-please/release-please-manifest.json
  • .github/workflows/checks.yaml
  • .github/workflows/nightly-checks.yaml
  • .github/workflows/pr-checks.yaml
  • .github/workflows/release-otdfctl.yaml
  • .gitignore
  • .golangci.yaml
  • CODEOWNERS
  • Dockerfile
  • Makefile
  • adr/decisions/2026-03-24-otdfctl-migration.md
  • otdfctl/CHANGELOG.md
  • otdfctl/Makefile
  • otdfctl/README.md
  • otdfctl/adr/0000-use-adr-dir-for-adr.md
  • otdfctl/adr/0001-printing-with-json.md
  • otdfctl/cmd/auth/auth.go
  • otdfctl/cmd/auth/clearCachedCredentials.go
  • otdfctl/cmd/auth/clientCredentials.go
  • otdfctl/cmd/auth/login.go
  • otdfctl/cmd/auth/logout.go
  • otdfctl/cmd/auth/printAccessToken.go
  • otdfctl/cmd/common/common.go
  • otdfctl/cmd/config/config.go
  • otdfctl/cmd/dev/dev.go
  • otdfctl/cmd/dev/selectors.go
  • otdfctl/cmd/execute.go
  • otdfctl/cmd/execute_test.go
  • otdfctl/cmd/interactive.go
  • otdfctl/cmd/migrate/migrate.go
  • otdfctl/cmd/migrate/namespaced_policy.go
  • otdfctl/cmd/migrate/prune/namespacedPolicy.go
  • otdfctl/cmd/migrate/prune/prune.go
  • otdfctl/cmd/migrate/registeredResources.go
  • otdfctl/cmd/policy/actions.go
  • otdfctl/cmd/policy/attributeValues.go
  • otdfctl/cmd/policy/attributes.go
  • otdfctl/cmd/policy/baseKeys.go
  • otdfctl/cmd/policy/kasGrants.go
  • otdfctl/cmd/policy/kasKeys.go
  • otdfctl/cmd/policy/kasRegistry.go
  • otdfctl/cmd/policy/keyManagement.go
  • otdfctl/cmd/policy/keyManagementProvider.go
  • otdfctl/cmd/policy/namespaces.go
  • otdfctl/cmd/policy/obligations.go
  • otdfctl/cmd/policy/policy.go
  • otdfctl/cmd/policy/registeredResources.go
  • otdfctl/cmd/policy/resourceMappingGroups.go
  • otdfctl/cmd/policy/resourceMappings.go
  • otdfctl/cmd/policy/subjectConditionSets.go
  • otdfctl/cmd/policy/subjectMappings.go
  • otdfctl/cmd/profile.go
  • otdfctl/cmd/root.go
  • otdfctl/cmd/tdf/decrypt.go
  • otdfctl/cmd/tdf/encrypt.go
  • otdfctl/cmd/tdf/inspect.go
  • otdfctl/cmd/tdf/tdf.go
  • otdfctl/docs/README.md
  • otdfctl/docs/main.go
  • otdfctl/docs/man/_index.md
  • otdfctl/docs/man/auth/_index.md
  • otdfctl/docs/man/auth/clear-client-credentials.md
  • otdfctl/docs/man/auth/client-credentials.md
  • otdfctl/docs/man/auth/login.md
  • otdfctl/docs/man/auth/logout.md
  • otdfctl/docs/man/auth/print-access-token.md
  • otdfctl/docs/man/config/_index.md
  • otdfctl/docs/man/config/output.md
  • otdfctl/docs/man/decrypt/_index.md
  • otdfctl/docs/man/dev/_index.md
  • otdfctl/docs/man/dev/design-system.md
  • otdfctl/docs/man/dev/selectors/_index.md
  • otdfctl/docs/man/dev/selectors/generate.md
  • otdfctl/docs/man/dev/selectors/test.md
  • otdfctl/docs/man/encrypt/_index.md
  • otdfctl/docs/man/example.xmd
  • otdfctl/docs/man/inspect/_index.md
  • otdfctl/docs/man/interactive.md
  • otdfctl/docs/man/migrate/_index.md
  • otdfctl/docs/man/migrate/namespaced-policy.md
  • otdfctl/docs/man/migrate/prune/_index.md
  • otdfctl/docs/man/migrate/prune/namespaced-policy.md
  • otdfctl/docs/man/policy/_index.md
  • otdfctl/docs/man/policy/actions/_index.md
  • otdfctl/docs/man/policy/actions/create.md
  • otdfctl/docs/man/policy/actions/delete.md
  • otdfctl/docs/man/policy/actions/get.md
  • otdfctl/docs/man/policy/actions/list.md
  • otdfctl/docs/man/policy/actions/update.md
  • otdfctl/docs/man/policy/attributes/_index.md
  • otdfctl/docs/man/policy/attributes/create.md
  • otdfctl/docs/man/policy/attributes/deactivate.md
  • otdfctl/docs/man/policy/attributes/get.md
  • otdfctl/docs/man/policy/attributes/key/_index.md
  • otdfctl/docs/man/policy/attributes/key/assign.md
  • otdfctl/docs/man/policy/attributes/key/remove.md
  • otdfctl/docs/man/policy/attributes/list.md
  • otdfctl/docs/man/policy/attributes/unsafe/_index.md
  • otdfctl/docs/man/policy/attributes/unsafe/delete.md
  • otdfctl/docs/man/policy/attributes/unsafe/reactivate.md
  • otdfctl/docs/man/policy/attributes/unsafe/update.md
  • otdfctl/docs/man/policy/attributes/update.md
  • otdfctl/docs/man/policy/attributes/values/_index.md
  • otdfctl/docs/man/policy/attributes/values/create.md
  • otdfctl/docs/man/policy/attributes/values/deactivate.md
  • otdfctl/docs/man/policy/attributes/values/get.md
  • otdfctl/docs/man/policy/attributes/values/key/_index.md
  • otdfctl/docs/man/policy/attributes/values/key/assign.md
  • otdfctl/docs/man/policy/attributes/values/key/remove.md
  • otdfctl/docs/man/policy/attributes/values/list.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/_index.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/delete.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/reactivate.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/update.md
  • otdfctl/docs/man/policy/attributes/values/update.md
  • otdfctl/docs/man/policy/kas-grants/_index.md
  • otdfctl/docs/man/policy/kas-grants/assign.md
  • otdfctl/docs/man/policy/kas-grants/list.md
  • otdfctl/docs/man/policy/kas-grants/unassign.md
  • otdfctl/docs/man/policy/kas-registry/_index.md
  • otdfctl/docs/man/policy/kas-registry/create.md
  • otdfctl/docs/man/policy/kas-registry/delete.md
  • otdfctl/docs/man/policy/kas-registry/get.md
  • otdfctl/docs/man/policy/kas-registry/key/_index.md
  • otdfctl/docs/man/policy/kas-registry/key/base/_index.md
  • otdfctl/docs/man/policy/kas-registry/key/base/get.md
  • otdfctl/docs/man/policy/kas-registry/key/base/set.md
  • otdfctl/docs/man/policy/kas-registry/key/create.md
  • otdfctl/docs/man/policy/kas-registry/key/get.md
  • otdfctl/docs/man/policy/kas-registry/key/import.md
  • otdfctl/docs/man/policy/kas-registry/key/list-mappings.md
  • otdfctl/docs/man/policy/kas-registry/key/list.md
  • otdfctl/docs/man/policy/kas-registry/key/rotate.md
  • otdfctl/docs/man/policy/kas-registry/key/unsafe/_index.md
  • otdfctl/docs/man/policy/kas-registry/key/unsafe/delete.md
  • otdfctl/docs/man/policy/kas-registry/key/update.md
  • otdfctl/docs/man/policy/kas-registry/list.md
  • otdfctl/docs/man/policy/kas-registry/update.md
  • otdfctl/docs/man/policy/key-management/_index.md
  • otdfctl/docs/man/policy/key-management/provider/_index.md
  • otdfctl/docs/man/policy/key-management/provider/create.md
  • otdfctl/docs/man/policy/key-management/provider/delete.md
  • otdfctl/docs/man/policy/key-management/provider/get.md
  • otdfctl/docs/man/policy/key-management/provider/list.md
  • otdfctl/docs/man/policy/key-management/provider/update.md
  • otdfctl/docs/man/policy/namespaces/_index.md
  • otdfctl/docs/man/policy/namespaces/create.md
  • otdfctl/docs/man/policy/namespaces/deactivate.md
  • otdfctl/docs/man/policy/namespaces/get.md
  • otdfctl/docs/man/policy/namespaces/key/_index.md
  • otdfctl/docs/man/policy/namespaces/key/assign.md
  • otdfctl/docs/man/policy/namespaces/key/remove.md
  • otdfctl/docs/man/policy/namespaces/list.md
  • otdfctl/docs/man/policy/namespaces/unsafe/_index.md
  • otdfctl/docs/man/policy/namespaces/unsafe/delete.md
  • otdfctl/docs/man/policy/namespaces/unsafe/reactivate.md
  • otdfctl/docs/man/policy/namespaces/unsafe/update.md
  • otdfctl/docs/man/policy/namespaces/update.md
  • otdfctl/docs/man/policy/obligations/_index.md
  • otdfctl/docs/man/policy/obligations/create.md
  • otdfctl/docs/man/policy/obligations/delete.md
  • otdfctl/docs/man/policy/obligations/get.md
  • otdfctl/docs/man/policy/obligations/list.md
  • otdfctl/docs/man/policy/obligations/triggers/_index.md
  • otdfctl/docs/man/policy/obligations/triggers/create.md
  • otdfctl/docs/man/policy/obligations/triggers/delete.md
  • otdfctl/docs/man/policy/obligations/triggers/list.md
  • otdfctl/docs/man/policy/obligations/update.md
  • otdfctl/docs/man/policy/obligations/values/_index.md
  • otdfctl/docs/man/policy/obligations/values/create.md
  • otdfctl/docs/man/policy/obligations/values/delete.md
  • otdfctl/docs/man/policy/obligations/values/get.md
  • otdfctl/docs/man/policy/obligations/values/update.md
  • otdfctl/docs/man/policy/registered-resources/_index.md
  • otdfctl/docs/man/policy/registered-resources/create.md
  • otdfctl/docs/man/policy/registered-resources/delete.md
  • otdfctl/docs/man/policy/registered-resources/get.md
  • otdfctl/docs/man/policy/registered-resources/list.md
  • otdfctl/docs/man/policy/registered-resources/update.md
  • otdfctl/docs/man/policy/registered-resources/values/_index.md
  • otdfctl/docs/man/policy/registered-resources/values/create.md
  • otdfctl/docs/man/policy/registered-resources/values/delete.md
  • otdfctl/docs/man/policy/registered-resources/values/get.md
  • otdfctl/docs/man/policy/registered-resources/values/list.md
  • otdfctl/docs/man/policy/registered-resources/values/update.md
  • otdfctl/docs/man/policy/resource-mapping-groups/_index.md
  • otdfctl/docs/man/policy/resource-mapping-groups/create.md
  • otdfctl/docs/man/policy/resource-mapping-groups/delete.md
  • otdfctl/docs/man/policy/resource-mapping-groups/get.md
  • otdfctl/docs/man/policy/resource-mapping-groups/list.md
  • otdfctl/docs/man/policy/resource-mapping-groups/update.md
  • otdfctl/docs/man/policy/resource-mappings/_index.md
  • otdfctl/docs/man/policy/resource-mappings/create.md
  • otdfctl/docs/man/policy/resource-mappings/delete.md
  • otdfctl/docs/man/policy/resource-mappings/get.md
  • otdfctl/docs/man/policy/resource-mappings/list.md
  • otdfctl/docs/man/policy/resource-mappings/update.md
  • otdfctl/docs/man/policy/subject-condition-sets/_index.md
  • otdfctl/docs/man/policy/subject-condition-sets/create.md
  • otdfctl/docs/man/policy/subject-condition-sets/delete.md
  • otdfctl/docs/man/policy/subject-condition-sets/get.md
  • otdfctl/docs/man/policy/subject-condition-sets/list.md
  • otdfctl/docs/man/policy/subject-condition-sets/prune.md
  • otdfctl/docs/man/policy/subject-condition-sets/update.md
  • otdfctl/docs/man/policy/subject-mappings/_index.md
  • otdfctl/docs/man/policy/subject-mappings/create.md
  • otdfctl/docs/man/policy/subject-mappings/delete.md
  • otdfctl/docs/man/policy/subject-mappings/get.md
  • otdfctl/docs/man/policy/subject-mappings/list.md
  • otdfctl/docs/man/policy/subject-mappings/match.md
  • otdfctl/docs/man/policy/subject-mappings/update.md
  • otdfctl/e2e/action.yaml
  • otdfctl/e2e/actions.bats
  • otdfctl/e2e/attributes.bats
  • otdfctl/e2e/auth.bats
  • otdfctl/e2e/encrypt-decrypt.bats
  • otdfctl/e2e/kas-grants.bats
  • otdfctl/e2e/kas-keys-mappings.bats
  • otdfctl/e2e/kas-keys.bats
  • otdfctl/e2e/kas-registry.bats
  • otdfctl/e2e/key-base.bats
  • otdfctl/e2e/logging.bats
  • otdfctl/e2e/namespaces.bats
  • otdfctl/e2e/obligations.bats
  • otdfctl/e2e/otdfctl-utils.sh
  • otdfctl/e2e/profile.bats
  • otdfctl/e2e/provider-config.bats
  • otdfctl/e2e/registered-resources.bats
  • otdfctl/e2e/resize_terminal.sh
  • otdfctl/e2e/resource-mapping-groups.bats
  • otdfctl/e2e/resource-mapping.bats
  • otdfctl/e2e/setup_suite.bash
  • otdfctl/e2e/subject-condition-sets.bats
  • otdfctl/e2e/subject-mapping.bats
  • otdfctl/e2e/teardown_suite.bash
  • otdfctl/e2e/testrail-integration/samples-for-virtru-instance/testname-to-testrail-id.virtru.json
  • otdfctl/e2e/testrail-integration/samples-for-virtru-instance/testrail-virtru.config.json
  • otdfctl/e2e/testrail-integration/testname-to-testrail-id.example.json
  • otdfctl/e2e/testrail-integration/testrail.config.example.json
  • otdfctl/e2e/testrail-integration/upload-bats-test-results-to-testrail.sh
  • otdfctl/go.mod
  • otdfctl/main.go
  • otdfctl/migrations/artifact/artifact.go
  • otdfctl/migrations/artifact/artifact_test.go
  • otdfctl/migrations/artifact/metadata/metadata.go
  • otdfctl/migrations/artifact/v1/schema.go
  • otdfctl/migrations/artifact/v1/schema_test.go
  • otdfctl/migrations/namespacedpolicy/actions_execute.go
  • otdfctl/migrations/namespacedpolicy/actions_execute_test.go
  • otdfctl/migrations/namespacedpolicy/canonical.go
  • otdfctl/migrations/namespacedpolicy/canonical_test.go
  • otdfctl/migrations/namespacedpolicy/derived.go
  • otdfctl/migrations/namespacedpolicy/derived_test.go
  • otdfctl/migrations/namespacedpolicy/execute.go
  • otdfctl/migrations/namespacedpolicy/execute_test_helpers_test.go
  • otdfctl/migrations/namespacedpolicy/finalize_plan.go
  • otdfctl/migrations/namespacedpolicy/finalize_plan_test.go
  • otdfctl/migrations/namespacedpolicy/obligation_triggers_execute.go
  • otdfctl/migrations/namespacedpolicy/obligation_triggers_execute_test.go
  • otdfctl/migrations/namespacedpolicy/plan.go
  • otdfctl/migrations/namespacedpolicy/plan_test.go
  • otdfctl/migrations/namespacedpolicy/planner.go
  • otdfctl/migrations/namespacedpolicy/planner_test.go
  • otdfctl/migrations/namespacedpolicy/reduce.go
  • otdfctl/migrations/namespacedpolicy/reduce_test.go
  • otdfctl/migrations/namespacedpolicy/registered_resources_execute.go
  • otdfctl/migrations/namespacedpolicy/resolved.go
  • otdfctl/migrations/namespacedpolicy/resolved_test.go
  • otdfctl/migrations/namespacedpolicy/retrieve.go
  • otdfctl/migrations/namespacedpolicy/retrieve_test.go
  • otdfctl/migrations/namespacedpolicy/scopes.go
  • otdfctl/migrations/namespacedpolicy/scopes_test.go
  • otdfctl/migrations/namespacedpolicy/subject_condition_sets_execute.go
  • otdfctl/migrations/namespacedpolicy/subject_condition_sets_execute_test.go
  • otdfctl/migrations/namespacedpolicy/subject_mappings_execute.go
  • otdfctl/migrations/namespacedpolicy/subject_mappings_execute_test.go
  • otdfctl/migrations/namespacedpolicy/test_helpers_test.go
  • otdfctl/migrations/registered-resources.go
  • otdfctl/migrations/registered-resources_test.go
  • otdfctl/migrations/styles.go
  • otdfctl/pkg/auth/auth.go
  • otdfctl/pkg/auth/errors.go
  • otdfctl/pkg/cli/cli.go
  • otdfctl/pkg/cli/clioptions.go
  • otdfctl/pkg/cli/confirm.go
  • otdfctl/pkg/cli/errors.go
  • otdfctl/pkg/cli/flagValues.go
  • otdfctl/pkg/cli/messages.go
  • otdfctl/pkg/cli/pipe.go
  • otdfctl/pkg/cli/printer.go
  • otdfctl/pkg/cli/sdkHelpers.go
  • otdfctl/pkg/cli/style.go
  • otdfctl/pkg/cli/table.go
  • otdfctl/pkg/cli/tabular.go
  • otdfctl/pkg/cli/utils.go

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch DSPX-2655-migrate-otdfctl

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.

@github-actions github-actions bot added the comp:ci Github Actions Work label Mar 23, 2026
Comment thread otdfctl/e2e/action.yaml Dismissed
Comment thread otdfctl/e2e/action.yaml Dismissed
Comment thread otdfctl/e2e/action.yaml Dismissed
Comment thread otdfctl/e2e/action.yaml Fixed
@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 focuses on preparing the repository for the migration of the otdfctl CLI tool. It involves copying files, updating configurations, and adjusting code ownership to ensure a smooth transition and proper maintenance of the CLI within the new repository structure.

Highlights

  • File Copying: This PR copies necessary files from the otdfctl directory to prepare for repository migration.
  • Configuration Updates: The PR updates configuration files to align with the new file locations and project structure.
  • Ignoring Artifacts: The .gitignore file is updated to ignore otdfctl specific files and directories, such as binaries, test artifacts, and Hugo-related files.
  • Code Ownership: The CODEOWNERS file is updated to assign ownership of the /otdfctl/ directory to the @opentdf/cli team.

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

Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/pr-checks.yaml
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.


A CLI's new home, Files copied, configs set, Migration's begun.

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.

@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 represents a significant architectural shift for the otdfctl CLI, moving it to a dedicated repository and introducing a wealth of new features. The primary focus is on expanding policy management capabilities, offering granular control over various policy entities and cryptographic keys. This refactor also brings a new testing framework and comprehensive documentation, laying a solid foundation for future development and improved user interaction.

Highlights

  • CLI Migration and Restructuring: The otdfctl CLI has been migrated to its own repository, involving extensive file copying and configuration updates. This includes a new Makefile for streamlined build processes and a comprehensive README for user guidance.
  • Enhanced Policy Management Commands: Introduced a full suite of CRUD (Create, Read, Update, Delete) operations for various policy components, including actions, attributes, attribute values, namespaces, obligations, registered resources, resource mappings, subject condition sets, and subject mappings. This significantly expands the CLI's capability to manage OpenTDF policies.
  • Advanced Key Management Features: Implemented detailed commands for managing KAS (Key Access Server) keys, including creation, rotation, import, and listing of key mappings. This also includes functionality for managing KAS registry entries and provider configurations, offering granular control over cryptographic keys.
  • Comprehensive End-to-End Testing: Added a robust set of Bats-based end-to-end tests covering all new and existing CLI commands, ensuring the stability and correctness of the new features and the overall CLI functionality. This also includes integration with TestRail for test result reporting.
  • Improved Documentation and User Experience: Integrated extensive Markdown documentation for all commands and subcommands, which drives the CLI's help system and supports internationalization. This aims to provide a clearer and more consistent user experience.

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

Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/pr-checks.yaml
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.


Files copied with care, New home, new purpose they bear, CLI now takes flight.

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

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 402.237532ms
Throughput 248.61 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 38.904339054s
Average Latency 387.897018ms
Throughput 128.52 requests/second

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

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 introduces the otdfctl CLI by copying a large number of files into the repository. The changes include Go source code for the CLI commands, Makefiles, documentation, and end-to-end tests. My review focused on the overall structure and patterns in the newly added code. I've identified a few areas for improvement related to consistency in deprecation handling and potential performance issues with client-side pagination. Overall, the code seems well-structured, but these minor issues should be addressed to improve usability and maintainability.

Comment thread otdfctl/cmd/policy/kasGrants.go
Comment thread otdfctl/cmd/policy/kasRegistry.go
Comment thread otdfctl/cmd/policy/attributeValues.go
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

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 introduces the otdfctl CLI tool by copying over a large number of files. The changes include the CLI's command structure, handlers, documentation, and end-to-end tests. My review focuses on potential issues in the newly added code. I've identified a bug in the Makefile's version handling, a significant performance issue related to client-side pagination, and a minor maintainability issue with flag parsing. Addressing these will improve the robustness and efficiency of the new CLI tool.

Comment thread otdfctl/Makefile
Comment thread otdfctl/cmd/policy/attributeValues.go
Comment thread otdfctl/cmd/policy/kasKeys.go
@github-actions
Copy link
Copy Markdown
Contributor

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

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 introduces a significant number of files by copying the otdfctl CLI tool into the repository. My review focuses on the newly added code, identifying opportunities for improvement in terms of maintainability, correctness, and efficiency. I've pointed out areas with duplicated code that could be refactored, potential performance bottlenecks, and minor issues in test files and configuration. Overall, the changes are substantial and form a good basis for the CLI within this repository.

Comment thread .gitignore
Comment thread otdfctl/Makefile
Comment thread otdfctl/Makefile
Comment thread otdfctl/README.md
Comment thread otdfctl/cmd/policy/attributeValues.go
Comment thread otdfctl/cmd/policy/kasKeys.go
Comment thread otdfctl/cmd/policy/subjectConditionSets.go
Comment thread otdfctl/e2e/attributes.bats
Comment thread otdfctl/e2e/kas-grants.bats
@alkalescent alkalescent marked this pull request as ready for review March 24, 2026 15:30
@alkalescent alkalescent requested review from a team as code owners March 24, 2026 15:30
@alkalescent
Copy link
Copy Markdown
Contributor Author

Dismissing all automated comments and alerts since this PR's purpose is to migrate not change app + CI code.

@marythought
Copy link
Copy Markdown
Contributor

is there an ADR for this change? I'm aware of the benefits but unclear on the tradeoffs of this approach, if any. Downloading the latest otdfctl package is a part of the quickstart guide: https://github.com/opentdf/docs/blob/main/static/quickstart/install.sh#L132. Is it just a matter of changing the location for where to find this, or will the whole build/release process need to change as a subcomponent of platform?

@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 190.343037ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 371.600238ms
Throughput 269.11 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.903301218s
Average Latency 396.94069ms
Throughput 125.30 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

marythought
marythought previously approved these changes Mar 25, 2026
@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 205.69506ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 415.139414ms
Throughput 240.88 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.553236078s
Average Latency 413.951419ms
Throughput 120.33 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@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 182.701644ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 407.643175ms
Throughput 245.31 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.499239757s
Average Latency 403.503632ms
Throughput 123.46 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from 01cff81 to d66bd5b Compare March 26, 2026 22:46
@alkalescent alkalescent changed the title feat(cli): copy otdfctl files feat(cli): migrate otdfctl into platform monorepo Mar 26, 2026
@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 166.485556ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 396.099222ms
Throughput 252.46 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.288281356s
Average Latency 401.603829ms
Throughput 124.11 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from d66bd5b to fc2fac5 Compare March 27, 2026 00:07
@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from ac9d36a to 40e396b Compare April 10, 2026 15:37
@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 199.785887ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 381.184133ms
Throughput 262.34 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.049292722s
Average Latency 398.394512ms
Throughput 124.85 requests/second

### Proposed Changes

* Add otdfctl component to platform release-please configuration for
independent versioned releases
* Tags follow the monorepo per-component pattern: `otdfctl/v0.30.0`
* Register `otdfctl/pkg/config/config.go` as extra-file so
release-please bumps the `Version` constant (already has `//
x-release-please-version` marker)
* Create release workflow that triggers on `otdfctl/v*` tags, builds 8
cross-platform binaries (darwin amd64/arm64, linux amd64/arm/arm64,
windows amd64/arm/arm64), and uploads artifacts to the GitHub release

#### Files added/modified

| File | Change |
|------|--------|
| `release-please-config.main.json` | Add `otdfctl` package entry with
`extra-files` |
| `release-please-manifest.json` | Add `"otdfctl": "0.30.0"` version
tracking |
| `release-please-config.otdfctl.json` | **New** — component config for
`release/otdfctl/vX.Y` branches |
| `release-otdfctl.yaml` | **New** — build and upload workflow on
release publish |

#### PR Stack (DSPX-2654)

1. #3205 — Subtree merge + module path rewrite (DSPX-2655, DSPX-2656)
2. #3208 — Makefile and build scripts (DSPX-2657)
3. #3221 — CI workflows (DSPX-2658)
4. #3236 — e2e tests and lint fixes (DSPX-2659)
5. **This PR** — Release pipeline (DSPX-2660)

### Checklist

- [ ] I have added or updated unit tests
- [x] I have added or updated integration tests (if appropriate)
- [x] I have added or updated documentation

### Testing Instructions

- Verify JSON configs are valid: `cat
.github/release-please/release-please-config.main.json | jq
.packages.otdfctl`
- Verify manifest version: `cat
.github/release-please/release-please-manifest.json | jq .otdfctl`
- Verify `reusable_release-please.yaml` config lookup: branch
`release/otdfctl/v0.30` → sanitized name `otdfctl` → resolves to
`release-please-config.otdfctl.json`
- Full release flow testable after merge by creating a manual release
with tag `otdfctl/v0.30.0`

---------

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Comment thread .github/workflows/release-otdfctl.yaml Fixed
Comment thread .github/workflows/release-otdfctl.yaml Fixed
@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 194.203419ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 390.555711ms
Throughput 256.05 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.796018792s
Average Latency 395.987096ms
Throughput 125.64 requests/second

## Summary
Implements the dry-run planner for `migrate namespacedpolicy`, the
unified CLI entrypoint for migrating legacy (unnamespaced) policy
objects into target namespaces.
The planner builds a full graph plan before any writes, covering
actions, subject condition sets, subject mappings, registered resources,
and obligation triggers. It runs a staged pipeline:
- **Retrieve** legacy candidates from the platform API, including
dependent objects needed for namespace derivation
- **Reduce** dependency-loaded actions and SCS to only those actually
referenced by in-scope objects
- **Derive** target namespaces per object type, including fan-out for
actions and SCS referenced from multiple namespaces
- **Resolve** each derived placement against existing target-side
objects (already migrated, existing standard action, needs create, or
unresolved)
- **Finalize** into an executable plan that preserves per-target status
and rewritten dependency bindings for downstream creates
### CLI surface
- `migrate namespacedpolicy --scope=<csv> --output=<path>` — writes the
plan as JSON
- `migrate prune namespacedpolicy --scope=<csv>` — command scaffold, not
yet implemented
- `--scope` accepts `actions`, `subject-condition-sets`,
`subject-mappings`, `registered-resources`, `obligation-triggers`
- `--commit` and `--interactive` flags are wired but not yet implemented
- All commands are hidden pending completion
### Key design decisions
- Scope expansion is automatic: `subject-mappings` pulls in `actions`
and `subject-condition-sets`; `registered-resources` and
`obligation-triggers` pull in `actions`
- Subject mapping resolution is dependency-aware — it only resolves once
its action and SCS dependencies are satisfiable in the same target
namespace
- Standard actions resolve by matching existing namespaced standard
actions; no create needed
- Registered resource namespace detection requires all RAAV attribute
values to agree on a single namespace; ambiguous cases are recorded as
unresolved
- Missing target namespaces are fatal planning errors, not planned
mutations
- Canonical comparison uses explicit field extraction into plain Go
types (not protobuf serialization) for deterministic cross-object
equality
### Not yet implemented
- Executor/commit behavior (create calls, label writes, manifest rewrite
with target IDs)
  - Interactive per-scope confirmation
- `migrate prune namespacedpolicy` live-graph evaluation
  - Artifact schema projection (metadata, summary, skipped sections)  

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Implemented `namespaced-policy` migration workflow with dry-run
planning support
  * Generates migration plans as JSON output based on specified scopes
  * Validates configuration and produces executable migration plans

* **Documentation**
* Updated migration guide to clarify dry-run mode is available and
`--commit` is not yet implemented

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@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 198.687587ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 409.9455ms
Throughput 243.93 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.774352972s
Average Latency 406.188592ms
Throughput 122.63 requests/second

### Proposed Changes

* Add `otdfctl/e2e` to the `github-actions` dependabot ecosystem so
composite action dependencies (`actions/setup-go`,
`bats-core/bats-action`, `actions/upload-artifact`) are tracked
* Add `otdfctl` gomod entry with daily schedule and
`github.com/opentdf/*` internal dep exclusion, matching existing module
patterns

#### Files modified

| File | Change |
|------|--------|
| `.github/dependabot.yml` | Add `otdfctl/e2e` to github-actions
directories; add `otdfctl` gomod entry |

#### Already configured (no changes needed)

| Workflow | Status |
|----------|--------|
| Backport | Uses repo-wide reusable workflow |
| CodeQL | Scans entire repo (no path filters) |
| Dependency review | Single consolidated deny-license list |
| PR lint | `cli` scope already present |
| Checks matrix | `otdfctl` already in directory list |

#### PR Stack (DSPX-2654)

1. #3205 — Subtree merge + module path rewrite (DSPX-2655, DSPX-2656)
2. #3208 — Makefile and build scripts (DSPX-2657)
3. #3221 — CI workflows (DSPX-2658)
4. #3236 — e2e tests and lint fixes (DSPX-2659)
5. #3268 — Release pipeline (DSPX-2660)
6. **This PR** — Supporting workflows (DSPX-2661)

### Checklist

- [ ] I have added or updated unit tests
- [x] I have added or updated integration tests (if appropriate)
- [x] I have added or updated documentation

### Testing Instructions

- Verify YAML is valid: `python3 -c "import yaml;
yaml.safe_load(open('.github/dependabot.yml'))"`
- Verify otdfctl gomod entry: search for `directory: "/otdfctl"` in
dependabot.yml
- Verify github-actions directories include `/otdfctl/e2e`
Comment thread .github/dependabot.yml
schedule:
interval: daily

- package-ecosystem: gomod

Check warning

Code scanning / zizmor

insufficient cooldown in Dependabot updates Warning

insufficient cooldown in Dependabot updates
@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 203.737773ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 396.137255ms
Throughput 252.44 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.842724207s
Average Latency 416.707211ms
Throughput 119.50 requests/second

### Proposed Changes

1.) Adds the `executor` which is in-charge of committing a specific
plan.
2.) Adds commit logic for `actions` only
3.) Adds stubs for other policy constructs.

### 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
@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 199.962622ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 391.409473ms
Throughput 255.49 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.959647506s
Average Latency 416.863115ms
Throughput 119.16 requests/second

### Proposed Changes

1.) Commit `subject-condition-sets`
2.) Refactor code placement to avoid large `execute.go` file size.

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



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Added support for executing actions and subject condition sets within
namespaced policy migrations
  * Enhanced execution result tracking with detailed failure diagnostics

* **Refactor**
* Streamlined error naming conventions across migration execution flows
  * Optimized internal state caching for target resolution

* **Tests**
* Expanded test coverage for policy execution and error handling
scenarios

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@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 207.141227ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 385.451162ms
Throughput 259.44 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.452345194s
Average Latency 413.172137ms
Throughput 120.62 requests/second

### Proposed Changes

1.) Add logic to commit subject mappings
2.) Wire in action / scs needed deps.

### 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
@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 186.300899ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 385.335401ms
Throughput 259.51 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.658162087s
Average Latency 394.99584ms
Throughput 126.08 requests/second

alkalescent and others added 2 commits April 15, 2026 14:04
### Proposed Changes

* Fix two zizmor-flagged code injection vulnerabilities in
`release-otdfctl.yaml` by passing `github.event.release.tag_name`
through `env:` variables instead of direct template expansion in `run:`
blocks.

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

No functional change — the workflow behaves identically, but tag name
values are now injected as environment variables rather than
interpolated into shell scripts.
### Proposed Changes

1.) Add implementation for migrating `obligation triggers`

### 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
@github-actions
Copy link
Copy Markdown
Contributor

X-Test Failure Report

@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 191.031431ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 402.936526ms
Throughput 248.18 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.490083584s
Average Latency 403.126365ms
Throughput 123.49 requests/second

@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 185.782082ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

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

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 388.045151ms
Throughput 257.70 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.957203073s
Average Latency 407.145028ms
Throughput 122.08 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp:ci Github Actions Work size/xl

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants