Skip to content

fix(providers): harden static credential placement - #4886

Queued
johntmyers wants to merge 5 commits into
mainfrom
fix/4883-credential-placement/johntmyers
Queued

johntmyers wants to merge 5 commits into
mainfrom
fix/4883-credential-placement/johntmyers

Conversation

@johntmyers

@johntmyers johntmyers commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Restrict static credential substitution to the provider's declared request location. When placement metadata is absent, default to the Authorization header rather than allowing arbitrary headers, query parameters, or URL paths. Preserve explicit body/WebSocket rewrite policies and trusted request signing.

Related Issue

Closes #4883

Changes

  • Keep the frozen Go SDK and protobuf source identical to the base branch; document metadata behavior in the crate READMEs.
  • Forward placement-only metadata through the existing credential snapshot map, bound to each delivered credential's actual owner. No new RPC, protobuf field, capability gate, or configuration flag.
  • Enforce declared header, query-key, or path-template placement locally in the supervisor; missing metadata permits Authorization (including Bearer, token, and Basic formats).
  • Select and validate placement using auth_style, ignoring fields for other styles without granting additional locations. Reject invalid selected placement or malformed binding metadata instead of silently falling back. Preserve atomic snapshot installation and separation from token grants.
  • Preserve endpoint authorization, credential expiry, identities, stable handles, rotation/revocation, trusted SigV4 signing, and explicitly enabled body/WebSocket rewriting.
  • Audit all 17 reference provider profiles. Existing API credentials already declare their headers; clarify the intended handling of Codex OAuth tokens and AWS signing material.
  • Add resolver, gateway, relay, and sandbox regressions; update provider migration and troubleshooting guidance.

Release Notes

Static credentials without placement metadata now resolve only in Authorization, or through explicitly enabled body/WebSocket rewrite policies. Custom headers such as x-api-key, query parameters, and path slots require an explicit credential placement declaration.

Upgrade the gateway before the supervisor for those clients: an older gateway does not forward placement metadata, so a new supervisor applies the Authorization default even when the stored profile declares another location. Update existing imported profiles as needed; editing reference YAML alone does not update the gateway catalog. Older supervisors retain their previous behavior. Wire formats and credential delivery identities remain unchanged.

auth_style selects the active placement. Existing profiles may retain fields for other styles; those fields are ignored and never authorize additional request locations.

Testing

  • Go generated-binding check: up to date, with no Go SDK or protobuf-source diff.
  • Latest compatibility follow-up: 55 core provider-credential tests, the gateway metadata regression, and the old-profile Docker sandbox regression passed.
  • Broader validation before the compatibility follow-up: 5,129 Rust library tests passed, 40 ignored; the known raw CONNECT timeout test is explicitly excluded from the passing network aggregate.
  • Full provider Docker suite before the compatibility follow-up: 25 passed, including five declared/default placement cases, normal OpenAI/Anthropic/GitHub authentication, endpoint restrictions, metadata discovery, provider lifecycle, and workspace isolation.
  • Missing-metadata and invalid-active-placement regressions, alias handling, stable references, explicit body/WebSocket policies, and trusted signing.
  • Documentation validation: zero errors, three existing warnings.
  • Independent implementation review.
  • Full repository commit hooks, including workspace and standalone-manifest Clippy, formatting, lint, license, and lockfile checks.

Full deployed old/new gateway-supervisor combinations were not exercised.

Known limitation from the broader validation: proxy::tests::mediated_connect_keeps_workload_bytes_read_with_the_synthesized_header timed out in the unfiltered run and two exact reruns, then passed on a later rerun of the same test binary. Baseline main (dbc0517a3) passed its exact comparison. No baseline failure was reproduced and the cause remains unresolved. The passing Rust aggregate above explicitly excludes this credential-free raw CONNECT test.

Checklist

  • Follows Conventional Commits.
  • Commits are signed off (DCO).
  • Relevant implementation, migration documentation, and skills updated.

@johntmyers johntmyers added area:supervisor Proxy and routing-path work topic:security Security issues area:providers labels Oct 23, 2026
@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

Compatibility review (advisory)

New or updated breaking changes; see the full report for all findings.

1. api-behavior — No explicit risk acceptance found

Static-credential delivery previously required endpoint-binding support; now polling and configuration push also require supports_static_credential_placement.

  • Impact: Baseline supervisors and existing GetSandboxProviderEnvironment callers lose static credentials after a gateway upgrade, while upgraded supervisors reject placement-free bindings from baseline gateways.
  • Action: Preserve baseline supervisor interoperability in v0.1.6 or defer mandatory placement negotiation to a minor release with a coordinated rollout procedure.
  • PR: fix(providers): harden static credential placement #4886

2. configuration — No explicit risk acceptance found

Endpoint-bound profiles previously delivered sandbox credentials without placement metadata; now missing placement causes withholding, including Codex refresh and ID tokens.

  • Impact: Existing custom profiles and policy-only AWS signers lose credentials, and Codex launchers requiring CODEX_AUTH_REFRESH_TOKEN exit with a missing-environment error.
  • Action: Preserve legacy profile delivery in v0.1.6; a later breaking release needs profile-update instructions and a working migration for unsupported Codex token flows.
  • PR: fix(providers): harden static credential placement #4886

3. policy — No explicit risk acceptance found

Static placeholders previously resolved at supported endpoint-authorized locations; now profile placement restricts them and overrides request_body_credential_rewrite and websocket_credential_rewrite.

  • Impact: Previously supported body and WebSocket authentication fails with HTTP 403 credential_placement_mismatch or WebSocket close code 1008 despite unchanged opt-in policies.
  • Action: Retain documented rewriting in v0.1.6 or defer its removal to a minor release with supported replacements for body and WebSocket authentication.
  • PR: fix(providers): harden static credential placement #4886

4. rust-sdk — No explicit risk acceptance found

Generated GetSandboxProviderEnvironmentRequest, StaticCredentialBinding, and SupervisorHello gain public fields absent from their baseline shapes.

  • Impact: Consumers constructing exhaustive openshell_sdk::raw::proto struct literals or patterns no longer compile, although existing RPC method signatures remain unchanged.
  • Action: Keep existing raw struct shapes in v0.1.6 through separate message types or defer these additions to a minor release with literal and pattern migration guidance.
  • PR: fix(providers): harden static credential placement #4886

5. typescript-sdk — No explicit risk acceptance found

Generated raw GetSandboxProviderEnvironmentRequest and SupervisorHello types gain the required boolean property supportsStaticCredentialPlacement.

  • Impact: Existing complete message literals assigned to these exported types fail type checking, while partial RPC inputs and create(schema, init) callers remain source-compatible.
  • Action: Preserve existing raw message shapes in v0.1.6 or defer the additions to a minor release documenting migration from complete literals to create(schema, init).
  • PR: fix(providers): harden static credential placement #4886
Review details
  • Execution: complete
  • Candidate: PR #4886 (669772fae9cf11a7f5adaab44fa79468cd81c478)
  • Baseline: 92434dcb2b6248ac827df05c00551fe7a1fedf17 (92434dcb2b6248ac827df05c00551fe7a1fedf17)
  • Reviewed: rust-sdk, python-sdk, go-sdk, typescript-sdk, api-behavior, cli, configuration, policy, helm, state

Advisory review; publication gates are unchanged.

Branch check run

@github-actions

Copy link
Copy Markdown

Compatibility review (advisory)

New or updated breaking changes; see the full report for all findings.

1. policy — No explicit risk acceptance found

Static placeholders previously resolved in supported headers, query values, and paths at authorized endpoints; existing auth_style metadata now restricts those locations automatically.

  • Impact: Existing applications placing a header-declared credential in ?api_key=<placeholder>, a URL path, or another header now receive HTTP 403 credential_placement_mismatch after gateway and supervisor upgrades.
  • Action: Preserve legacy header/query/path substitution for existing profiles in v0.1.6, making enforcement explicitly opt-in or deferring automatic activation to a minor release with profile and client migration guidance.
  • PR: fix(providers): harden static credential placement #4886
Review details
  • Execution: complete
  • Candidate: PR #4886 (c1c7b00fa180d0de584020a06314a4cc30c74846)
  • Baseline: 92434dcb2b6248ac827df05c00551fe7a1fedf17 (92434dcb2b6248ac827df05c00551fe7a1fedf17)
  • Reviewed: rust-sdk, python-sdk, go-sdk, typescript-sdk, api-behavior, cli, configuration, policy, helm, state

Advisory review; publication gates are unchanged.

Branch check run

@johntmyers
johntmyers requested a review from alangou October 26, 2026 22:30
@johntmyers johntmyers added the test:e2e Requires end-to-end coverage label Oct 26, 2026
@github-actions

Copy link
Copy Markdown

Label test:e2e applied for 8531c4b. Open the existing run and click Re-run all jobs to execute with the label set. The run will execute the standard E2E suite after building the required gateway, sandbox, and supervisor images once. The matching required CI gate status on this PR will flip green automatically once the run finishes.

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

gator-agent

PR Review Status

The independent code review found no blocking issues in the static credential placement changes. The implementation follows issue #4883, with documented compatibility limits and regression coverage for placement, credential ownership, and explicit body/WebSocket rewriting.

Blocking findings: No blocking findings remain.

Carried findings: None.

Non-blocking suggestions: None.

Gator metadata
  • Validation: Focused provider/supervisor hardening requested by linked issue #4883; author repository admin authority verified.
  • Docs: Provider overview, profiles, and network policy guidance updated.
  • Checks: Current-head Branch Checks, Helm Lint, Trivy Changes, and DCO pass.
  • E2E: test:e2e required for credential flow and network enforcement; E2E Label Help is queued; follow its instructions next cycle before pipeline handoff.
  • Head SHA: 8531c4b4fd8f4080d9b41499a2517e4612ef19df
  • Base SHA: 92434dcb2b6248ac827df05c00551fe7a1fedf17
  • Merge base SHA: 92434dcb2b6248ac827df05c00551fe7a1fedf17
  • Patch ID: d07c1a03a4ccf6863379380eaf9475b4dc605fac
  • Gator payload: 13
  • Review mode: initial
  • Previous reviewed SHA: none
  • Review budget exhausted: no
  • Maintainer decision required: no
  • Next state: gator:in-review (review complete; awaiting E2E dispatch)

@johntmyers johntmyers added gator:in-review Gator is reviewing or awaiting PR review feedback gator:blocked Gator is blocked by process or repository gates gator:watch-pipeline Gator is monitoring PR CI/CD status gator:approval-needed Gator completed review; maintainer approval needed and removed gator:in-review Gator is reviewing or awaiting PR review feedback gator:blocked Gator is blocked by process or repository gates gator:watch-pipeline Gator is monitoring PR CI/CD status gator:approval-needed Gator completed review; maintainer approval needed labels Oct 26, 2026
alangou
alangou previously approved these changes Oct 28, 2026
@johntmyers

Copy link
Copy Markdown
Collaborator Author

gator-agent

Blocker Follow-Up Nudge

This PR is still blocked by merge conflicts with main after more than 48 business hours.

Next action: @johntmyers, please resolve the merge conflicts and push an updated head so Gator can check the delta and current-head CI.

Gator metadata
  • Head SHA: 8531c4b4fd8f4080d9b41499a2517e4612ef19df
  • Gator payload: 13
  • Next state: gator:blocked
  • Blocked reason: merge_conflict

@johntmyers
johntmyers force-pushed the fix/4883-credential-placement/johntmyers branch from 8531c4b to 2d80c50 Compare October 30, 2026 22:52

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

gator-agent

PR Review Status

Thanks @johntmyers for resolving the merge conflicts and reporting the post-rebase checks. The independent follow-up review confirmed that all 22 files retain the previously reviewed additions and deletions, checked the affected integration context, and found no new blocking issues. The merge-conflict blocker is cleared, and current-head CI and E2E are queued or running.

Blocking findings: No blocking findings remain.

Carried findings: None.

Gator metadata
  • Validation: Focused provider/supervisor hardening follows issue #4883; author repository admin authority verified.
  • Docs: Provider overview, profiles, and network policy guidance cover automatic enforcement and compatibility limits.
  • Checks: DCO, Helm Lint, and Trivy Changes pass; Branch Checks is running. Maintainer approval remains missing after the rebase and is required before merge.
  • E2E: test:e2e is applied. Current-head Branch E2E Checks run 41140967194 is queued with successful build prerequisites and remaining build jobs queued. The older E2E Label Help rerun instruction targets the prior head; the new head already has its own required run.
  • Head SHA: 2d80c50d12a6be3bf9c6b0421264de9c694afdd4
  • Base SHA: c2311ad01eca37a12abc3ea50446c6487d862ffb
  • Merge base SHA: c2311ad01eca37a12abc3ea50446c6487d862ffb
  • Patch ID: 48db3882e2aa27cfa7e44fdb186b3b3ee62721f8
  • Gator payload: 13
  • Review mode: follow_up
  • Previous reviewed SHA: 8531c4b4fd8f4080d9b41499a2517e4612ef19df
  • Review budget exhausted: no
  • Maintainer decision required: no
  • Next state: gator:watch-pipeline

@johntmyers johntmyers added gator:watch-pipeline Gator is monitoring PR CI/CD status gator:approval-needed Gator completed review; maintainer approval needed and removed gator:blocked Gator is blocked by process or repository gates gator:watch-pipeline Gator is monitoring PR CI/CD status labels Oct 30, 2026
@johntmyers
johntmyers requested a review from alangou November 1, 2026 18:59
@johntmyers

Copy link
Copy Markdown
Collaborator Author

gator-agent

Maintainer Review Nudge

This PR has been in gator:approval-needed for more than 48 business hours with no maintainer approval.

@NVIDIA/openshell-maintainers, can someone review and either approve, request changes, or close this out?

Action required: A maintainer listed in MAINTAINERS.md must review the current head; CI and E2E are green, and Gator has no unresolved blocking findings.

Gator metadata
  • Head SHA: 2d80c50d12a6be3bf9c6b0421264de9c694afdd4
  • Gator payload: 13
  • Next state: gator:approval-needed

@alangou

alangou commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

The PR enforces placement when metadata is present but missing metadata still falls back to Legacy. That leaves the URL-reflection case open. A sandbox can put a placeholder in a URL and an allowed endpoint that reflects it can return the real credential

As discussed I’d replace Legacy with an Authorization-only default. Existing clients using that header would keep working. Other placements such as x-api-key or query parameters would require explicit metadata otherwise the request would be rejected

We should keep endpoint restrictions, reject invalid metadata and keep body/WebSocket rewriting explicitly opt-in. We should also check all bundled providers and add the correct placement metadata where needed

This would still break configurations that rely on implicit placement outside Authorization so we should document the required configuration change. I think that is a reasonable tradeoff compared with preserving the vulnerable fallback

@johntmyers johntmyers added gator:in-review Gator is reviewing or awaiting PR review feedback and removed gator:approval-needed Gator completed review; maintainer approval needed labels Nov 4, 2026
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
@johntmyers
johntmyers force-pushed the fix/4883-credential-placement/johntmyers branch from 2d80c50 to 442a5b3 Compare November 4, 2026 19:08
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown

Compatibility review (advisory)

New or updated breaking changes; see the full report for all findings.

1. policy — Risk explicitly accepted

Static placeholders previously resolved in supported endpoint-authorized headers, query values, and paths; they now require declared placement or default to Authorization when metadata is absent.

  • Impact: Existing clients using other headers, query parameters, or path slots without matching forwarded metadata receive HTTP 403 credential_placement_mismatch, including new-supervisor/old-gateway deployments.

  • Action: Preserve legacy substitution for existing consumers in v0.1.8 or defer automatic enforcement to a minor release with the documented gateway-first, profile, and client migration.

  • PR: fix(providers): harden static credential placement #4886

  • Acceptance: comment

2. configuration — No explicit risk acceptance found

Bearer profiles previously accepted header_name alongside query_param and path_template, but the supervisor now rejects that documented combination.

  • Impact: Existing imported profiles using the baseline example fail credential installation and disable the entire static credential snapshot, including otherwise valid attached providers.
  • Action: Preserve baseline-accepted profile combinations in v0.1.8; defer stricter validation to a minor release with instructions to remove fields unused by auth_style before upgrading.
  • PR: fix(providers): harden static credential placement #4886
Review details
  • Execution: complete
  • Candidate: PR #4886 (1e834dbf72e1449be76f81f96d714e100082751a)
  • Baseline: dbc0517a3103a1361194262a70800cf30c8fc939 (dbc0517a3103a1361194262a70800cf30c8fc939)
  • Reviewed: rust-sdk, python-sdk, go-sdk, typescript-sdk, api-behavior, cli, configuration, policy, helm, state

Advisory review; publication gates are unchanged.

Branch check run

Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

gator-agent

PR Review Status

Thanks @alangou for spelling out the Authorization-only fallback and its compatibility tradeoff. I checked @johntmyers's update against that request: missing metadata now defaults to Authorization, explicit malformed metadata is rejected, endpoint restrictions and opt-in body/WebSocket rewriting remain in place, and the provider and migration guidance is updated. The independent follow-up review found no new blocking code issues; the earlier two commits retain their previously reviewed patches.

Action required: @johntmyers, remove the changes to sdk/go/proto/openshellv1/openshell.pb.go from this PR. The current-head Go SDK Freeze job fails because the in-tree Go SDK is frozen. Its generated bindings are not needed here; any Go SDK changes belong in ai-openshell/sdk-go. Push an updated head so Gator can check the delta and CI again.

Blocking findings: No blocking code-review findings remain. The Go SDK Freeze CI failure still requires the author action above.

Carried findings: None.

Gator metadata
  • Validation: Focused credential-placement hardening follows issue #4883; author and responding maintainer repository admin authority verified.
  • Docs: Fern provider overview and profiles document the Authorization default, gateway-first upgrade order, and imported-profile migration; existing navigation remains applicable.
  • Checks: Current-head DCO, Helm Lint gate, and Trivy Changes pass. Branch Checks remains active with Go SDK Freeze failed. The failed-job annotations and local comparison to the current base both identify the generated Go binding changes.
  • E2E: test:e2e is applied. Current-head Branch E2E Checks run 41894090218 is queued with build prerequisites active. The mirror matches the current head; the older Label Help rerun instruction applies to an earlier head, so no command or rerun is needed now.
  • Head SHA: 442a5b3d4797ba02639e33c7c6d63808c22dd216
  • Base SHA: dbc0517a3103a1361194262a70800cf30c8fc939
  • Merge base SHA: dbc0517a3103a1361194262a70800cf30c8fc939
  • Patch ID: 32640781425366bb3ec4bcc7440f688a2936fb8f
  • Gator payload: 13
  • Review mode: follow_up
  • Previous reviewed SHA: 2d80c50d12a6be3bf9c6b0421264de9c694afdd4
  • Review budget exhausted: no
  • Maintainer decision required: no
  • Next state: gator:in-review
  • Blocked reason: ci_author_changes_required

Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

gator-agent

PR Review Status

Thanks @johntmyers for restoring the frozen Go bindings and protobuf source. I compared both files with the current base: they are identical, and the current-head Go SDK Freeze check passes. The independent Critical-only follow-up review found no new Critical defects in the latest delta. The previously reviewed implementation and @alangou's Authorization-default guidance remain unchanged.

Blocking findings: No blocking findings remain.

Carried findings: None.

Current-head Branch Checks and E2E are running. Gator will monitor their results before handing this to a maintainer for approval.

Gator metadata
  • Validation: Focused credential-placement hardening follows issue #4883; author and responding maintainer repository admin authority verified.
  • Docs: Existing Fern provider and migration updates cover the Authorization default and gateway-first upgrade order; this delta changes comments and generated formatting only.
  • Checks: Go SDK Freeze, DCO, Helm Lint gate, and Trivy Changes pass. Branch Checks run 41897628906 remains in progress.
  • E2E: test:e2e is applied. Current-head Branch E2E Checks run 41897629072 is in progress, and the copy-pr mirror matches the head. The old Label Help rerun instruction targets an earlier head; no additional dispatch is needed.
  • Head SHA: d58eff510ebd25ca78707dc472712e95d71f2a52
  • Base SHA: dbc0517a3103a1361194262a70800cf30c8fc939
  • Merge base SHA: dbc0517a3103a1361194262a70800cf30c8fc939
  • Patch ID: 8557dcdef50c29c8244e9c172ade7d8555d25a4b
  • Gator payload: 13
  • Review mode: critical_only
  • Previous reviewed SHA: 442a5b3d4797ba02639e33c7c6d63808c22dd216
  • Review budget exhausted: yes
  • Maintainer decision required: no — prior CI obligation is resolved, with no qualifying scope growth or new Critical finding.
  • Next state: gator:watch-pipeline

@johntmyers johntmyers added gator:watch-pipeline Gator is monitoring PR CI/CD status and removed gator:in-review Gator is reviewing or awaiting PR review feedback labels Nov 4, 2026

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

gator-agent

PR Review Status

Thanks @johntmyers for the compatibility follow-up. I checked that auth_style selects exactly one placement, unused fields do not authorize other locations, and invalid selected placement still fails closed. The added regressions cover legacy profiles with multiple placement fields and preserve other attached providers. The independent Critical-only review found no new Critical defects in this delta; @alangou's Authorization-default guidance remains intact.

Blocking findings: No blocking findings remain.

Carried findings: None.

Current-head Branch Checks and E2E are queued or running. Gator will inspect their results before handing this to a maintainer for approval.

Gator metadata
  • Validation: Focused credential-placement hardening follows issue #4883; author and responding maintainer repository admin authority verified.
  • Docs: Fern profiles guidance and the core README explain active-style selection and ignored unused fields; prior migration guidance remains applicable.
  • Checks: DCO, Go SDK Freeze, Helm Lint gate, and Trivy Changes pass. Branch Checks run 41900244742 remains pending. Frozen Go SDK and protobuf source match the base.
  • E2E: test:e2e is applied. Current-head Branch E2E Checks run 41900244832 is queued with completed build jobs and remaining jobs pending; the copy-pr mirror matches the head. The old Label Help rerun instruction targets an earlier head, so no additional dispatch is needed.
  • Head SHA: f59db0685893762c1a011e05707bd5a9b76e5f11
  • Base SHA: dbc0517a3103a1361194262a70800cf30c8fc939
  • Merge base SHA: dbc0517a3103a1361194262a70800cf30c8fc939
  • Patch ID: 4105b46ed726c7212d52eb37ffae357777bb5ad3
  • Gator payload: 13
  • Review mode: critical_only
  • Previous reviewed SHA: d58eff510ebd25ca78707dc472712e95d71f2a52
  • Review budget exhausted: yes
  • Maintainer decision required: no — no unresolved obligations, qualifying scope growth, or new Critical finding.
  • Next state: gator:watch-pipeline

@johntmyers johntmyers added gator:approval-needed Gator completed review; maintainer approval needed and removed gator:watch-pipeline Gator is monitoring PR CI/CD status labels Nov 4, 2026
@johntmyers johntmyers added gator:merge-ready and removed gator:approval-needed Gator completed review; maintainer approval needed labels Nov 5, 2026
@johntmyers
johntmyers added this pull request to the merge queue Nov 5, 2026
Any commits made after this event will not be merged.

This branch has not been deployed

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

Labels

area:providers area:supervisor Proxy and routing-path work gator:merge-ready test:e2e Requires end-to-end coverage topic:security Security issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(providers): enforce declared static credential placement

2 participants