Skip to content

feat(security): add standalone directory credential registry - #354

Draft
seonghobae wants to merge 4 commits into
feat/credential-registry-contract-main-20260811from
feat/local-credential-registry-20260811
Draft

feat(security): add standalone directory credential registry#354
seonghobae wants to merge 4 commits into
feat/credential-registry-contract-main-20260811from
feat/local-credential-registry-20260811

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Objective

Advance issue #319 with a standalone, provider-neutral local credential-store adapter on top of the exact #344 credential-registry contract. The adapter resolves purpose-scoped, versioned key material without making raw environment variables the long-lived runtime authority.

Exact stack state

RED -> GREEN evidence

  • RED head f52132c8c55e37bbf2e2e4c9c4d92fbb5cf9ab84: CI run 31422870920, Maven job 93567572945, exact-head checkout verified and testCompile failed at the intentionally missing DirectoryCredentialRegistry production type.
  • implementation head 4a46161a2bab0a090c5af8bd4fec23ee1273e765: all 508 tests passed with zero failures/errors/skips, but CI correctly failed the exact 100% branch-coverage gate with one uncovered metadata-validation branch at DirectoryCredentialRegistry.java:111.
  • final head 7fe3fb8124bded7f8449ac741fd1339192d0bc5f: exact-head CI run 31423352276 completed successfully. Maven test job 93569129336, buyer-readiness job 93569129423, and Maven merge-compatibility job 93569129500 all succeeded; exact-head fuzz run 31423352066 also succeeded.

The adapter now requires:

  • purpose metadata at <root>/<credential>/purpose;
  • an exact active version at <root>/<credential>/active-version;
  • bounded opaque key bytes at <root>/<credential>/versions/<version>.key;
  • safe credential/version identifiers;
  • fail-closed handling of missing, blank, malformed, mismatched, non-canonical, empty, oversized, or symlinked registry state;
  • defensive secret snapshots through the feat(security): define provider-neutral credential registry contract #344 contract, without raw-key logging or rendering.

Scope boundary

This slice is a read-only standalone adapter foundation. It does not migrate TenantAccessService, ArtifactLinkService, Spring configuration, production bootstrap, or #313 ProductionAuthReadinessConfig; it does not implement credential writes, automatic rotation windows, distributed cache, encryption/KMS custody, or a vendor-specific secret-manager adapter. Environment/config HMAC authority remains an open production gap until later migration slices route runtime consumers through the registry.

Security Scan/SAST evidence is not inferred from the stacked PR because those workflows were not returned for this exact child head; absent evidence is not passing evidence. Before any eventual protected-main merge, integrate #344 first, rebuild/reconcile this unique child delta onto the new exact protected base, and regenerate every required base-sensitive CI/security/review gate. No raw key material may enter logs, exceptions, PR metadata, telemetry, SBOM, or provenance.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c9dd8ff8-bdfb-4fc4-8021-fdeb041a613a

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

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.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant