Skip to content

chore(deps): true up token-sheriff floor and audit the 0.9.3 delta - #128

Merged
cuioss-oliver merged 2 commits into
mainfrom
feature/plan-31a-token-sheriff-dependency-floor
Jul 29, 2026
Merged

chore(deps): true up token-sheriff floor and audit the 0.9.3 delta#128
cuioss-oliver merged 2 commits into
mainfrom
feature/plan-31a-token-sheriff-dependency-floor

Conversation

@cuioss-oliver

@cuioss-oliver cuioss-oliver commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

pom.xml:54 already reads version.token-sheriff 0.9.3 — the latest release. That bump landed
on main via an unreviewed one-line bot PR (#117) and was never audited. This PR does two things:

  1. True up the build metadata around the confirmed floor: re-derive the smallrye-config
    convergence against the Quarkus version actually in the POM (3.37.4, not the 3.37.2 the old
    comment named) and refresh the stale comment + CLAUDE.md reference.
  2. Retrospectively audit the whole 0.9.2 → 0.9.3 delta — all 16 PRs — for behavioural change
    in authentication, since none of them were reviewed before landing.

Operator-relevant findings, surfaced up front:

  • D1 bump was pre-existing, unaudited. The token-sheriff 0.9.3 floor was already on main
    before this plan started (via chore: update token-sheriff-validation from 0.9.2 to 0.9.3 #117's unreviewed bot bump). This PR is a true-up plus the
    retrospective audit that never happened, not a new version bump.
  • Behavioural break: IssuerConfig.azpAudienceFallbackEnabled now defaults to false. An
    azp-only token (no aud claim) that previously validated on an issuer with audience
    configured is now rejected. The audience-less path is unaffected. This is a config-model
    finding reported here, not patched around — documented in doc/configuration.adoc.

Changes

  • pom.xml — re-derived the smallrye-config convergence (single 3.17.2 across the reactor,
    no split) against version.quarkus 3.37.4; refreshed the :83-87 BOM-ordering comment to
    state the versions actually resolved. No version edit — 0.9.3 was already the pinned floor.
  • CLAUDE.md — corrected the stale "Quarkus 3.37.2" statement to 3.37.4, matching pom.xml:53.
  • doc/configuration.adoc — documented the IssuerConfig.azpAudienceFallbackEnabled default flip:
    aud is now required once audience is configured on an issuer; a matching azp no longer
    substitutes; an azp-only IdP must either emit aud or omit the audience key.

Retrospective delta audit — verdict for all 16 PRs (token-sheriff 0.9.2 → 0.9.3)

Verdicts are given on diffs, not titles. Full evidence trail lives in
.plan/plans/plan-31a-token-sheriff-dependency-floor/work/delta-audit-verdicts.md.

Resolved-dependency baseline (D1)

Re-derived across the reactor with dependency:tree (-Dincludes=io.smallrye.config:*,
-Dverbose) and dependency:list: io.smallrye.config converges on a single 3.17.2 at compile
scope across smallrye-config, -core, -common, -source-yaml, -validatorno split.
token-sheriff-bom 0.9.3 declares its Quarkus artifacts at 3.38.0; the quarkus-bom-first import
still pins them back to 3.37.4. No structural POM change was warranted.

Behaviour-bearing PRs

PR Subject Verdict
#581 CVE lessons register + audience/JWE hardening AFFECTS THE GATEWAY. IssuerConfig.azpAudienceFallbackEnabled flipped default truefalse. Audience-less path (TokenValidatorProducer.toValidationIssuer :128-130) is unaffected — audience validation is switched off wholesale (buildsFromHttpIssuerWithoutAudience green). Audience-configured path (:129) is affected at runtime — an azp-matching, aud-less token that validated under 0.9.2 is rejected under 0.9.3. Both tripwires are build-time tests (assertNotNull(validator)) and do not exercise the runtime token path, so the affected-path verdict rests on the default flip plus the code path. Documented in doc/configuration.adoc.
#607 Per-client SSLContext; step-up fail-closed; scheme-keyed HTTP client caching NO GATEWAY IMPACT for step-up fail-closed — the gateway's only step-up surface (StepUpCoordinator) short-circuits null/blank ACR headers to Optional.empty() before the parser is reached; StepUpCoordinatorTest always builds a non-empty ACR (2/2 green). Per-client SSLContext is an added optional capability, not adopted here (chain note for PLAN-31D). Also the carrier PR for scheme-keyed BackChannelHttp client caching (a third named behavioural change the request called out, initially unmatched to any title — located from the actual diff hunks): the shared-client cache is now keyed by URI scheme instead of one process-wide singleton, closing a cross-scheme TLS-trust bleed. Gateway verdict: no impact, and strictly safer — sharedClient(HttpHandler)'s signature is unchanged.
#593 Upstream version.quarkus 3.37.2 → 3.38.0 NO IMPACT (verified, not assumed). This is the PR that made the D1 re-derivation necessary — verified harmless via the resolved-dependency baseline above; smallrye-config stays single at 3.17.2.
#575 "fix: repair main integration build" NO IMPACT — cleared on diff. Touches ten client-engine sources (BackChannelHttp.java, StepUpHandler.java, DiscoveryResolver.java, TokenEndpointClient.java, others); none is on the two gateway surfaces this audit verified. Its BackChannelHttp.java hunk is a Javadoc accessor rename only, no behavioural code change.
#577 "chore: stabilize pre-commit profile output" NO IMPACT on the two gateway surfaces this audit verified. Diff exceeds the GitHub 300-file API compare cap; it is a .plan/CI-heavy pre-commit-profile change and no gateway-consumed artifact in its file list carries a behavioural hunk.
#592, #584 cui-java-parent 1.5.2 → 1.5.4 Checked, no impact. The project already pins 1.5.4; the convergence re-derivation shows the quarkus-bom import wins the smallrye-config decision regardless of what the parent supplies.
#576, #589 Documentation only Checked, no impact. No shipped artifact changes.
#578, #591, #605, #612 CI / workflow / actions only Checked, no impact. Upstream build plumbing; produces no artifact the gateway consumes.
#594, #600 JavaScript dev-dependency bumps (deployment module) Checked, no impact. Not on any gateway compile or runtime path.
#580 Integration-test docker-compose cleanup Checked, no impact. Upstream test infrastructure only.

All 16 PRs carry an explicit verdict. The request's three named behavioural changes are each
located: #581 (audience/azp fallback default flip), #607 (blank acr_values fail-closed and
scheme-keyed client caching and per-client SSLContext).

Test Plan

  • Quality gate passed (verify -Ppre-commit)
  • Full verify passed (verify)
  • dependency:tree/dependency:list re-derivation confirms single smallrye-config 3.17.2
    convergence (evidence captured in the work artifact, not re-run by CI)

Related Issues

None.


Generated by plan-finalize skill

Summary by CodeRabbit

  • Documentation
    • Updated project guidance to reference Quarkus 3.37.4.
    • Clarified audience claim validation behavior, including required aud validation and rejection of tokens relying solely on azp.
    • Documented that omitting the audience configuration disables audience validation.
    • Expanded build configuration notes with updated compatibility and verification details.

version.token-sheriff is asserted (not edited) at 0.9.3, the confirmed latest
upstream release. The build metadata that went stale around it is corrected.

Re-derived the smallrye-config convergence as a real resolved-dependency check
(dependency:tree -Dincludes=io.smallrye.config:*, -Dverbose, and dependency:list
across the reactor) rather than trusting the existing comment:

  - io.smallrye.config converges on a single 3.17.2 across the whole reactor at
    compile scope. No split, so no structural pom change was warranted.
  - token-sheriff-bom 0.9.3 declares its Quarkus artifacts (quarkus-config-yaml,
    quarkus-hibernate-validator) at 3.38.0; the quarkus-bom-first import pins
    them back to 3.37.4. The ordering seam still does its job.

The pom.xml:83-87 comment now names the versions that actually resolve, replacing
the stale "Quarkus 3.37.2's native 3.17.2 / cui-java-parent bumps to 3.18.0"
wording. CLAUDE.md's Project Overview is corrected from Quarkus 3.37.2 to the
3.37.4 that pom.xml:53 pins.

Retrospective whole-delta audit of the 16 PRs that landed unreviewed via the bot
bump; full verdict record in the plan's work/delta-audit-verdicts.md:

  - #581 flipped IssuerConfig.azpAudienceFallbackEnabled from true to false. The
    audience-less path (TokenValidatorProducer:128-130) is unaffected because
    audience validation is disabled wholesale; the audience-configured path
    (:129) IS affected at runtime -- a token with a matching azp but no aud was
    accepted under 0.9.2 and is rejected under 0.9.3. Documented on the
    issuers[].audience row in doc/configuration.adoc.
  - #607 (step-up fail-closed on blank constraints) has no gateway impact: the
    gateway never builds a StepUpChallenge, detectChallenge short-circuits blank
    headers before the parser, and no path relies on an empty ACR being a no-op.
  - #593 (upstream Quarkus 3.38.0) is absorbed by the import ordering, verified
    above rather than assumed.
  - The remaining PRs are verdicted individually on their diffs, not their
    titles.

The request's third named change ("HTTP client caching is now scheme-keyed") is
recorded as OPEN rather than closed: settling it needs the diff hunks of #575 and
#577, and only their changed-file lists were available. Filed as a triage finding.

No file under api-sheriff/src is modified.

Co-Authored-By: Claude <noreply@anthropic.com>

@sourcery-ai sourcery-ai 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.

Sorry @cuioss-oliver, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@cuioss-oliver, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 7 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository: cuioss/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a11bc349-fe5f-4f6c-b7be-972468db38af

📥 Commits

Reviewing files that changed from the base of the PR and between 68d6a6e and 3a5c4c6.

📒 Files selected for processing (2)
  • doc/adr/0021-Quarkus_platform_BOM_is_imported_first_and_owns_the_Quarkus_and_smallrye-config_version_line.adoc
  • doc/adr/0022-Upstream_security-hardening_default_changes_are_adopted_and_documented_never_locally_reverted.adoc
📝 Walkthrough

Walkthrough

Documentation updates clarify audience validation behavior and update Quarkus 3.37.4 references in project and dependency-management guidance. No dependency coordinates, plugin settings, or public entities changed.

Changes

Documentation and build guidance

Layer / File(s) Summary
Audience validation behavior
doc/configuration.adoc
Documents required aud validation when configured, removal of azp fallback, rejection of azp-only tokens, and disabling validation by omitting audience.
Quarkus version and BOM guidance
CLAUDE.md, pom.xml
Updates the documented Quarkus version to 3.37.4 and expands the comment describing BOM ordering and artifact alignment.

Estimated code review effort: 1 (Trivial) | ~5 minutes

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the dependency floor update and the 0.9.3 delta audit.

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.

@cuioss-review-bot

Copy link
Copy Markdown

PR Reviewer Guide 🔍

🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected

@cuioss-oliver

Copy link
Copy Markdown
Collaborator Author

Triage dispositions

In reply to comment_id: IC_kwDOPatrT88AAAABMSJ2sg

Acknowledged - PR-Agent's review guide reports no relevant tests, no security concerns and no major issues, so it raises no actionable suggestion. No FIX-eligible category in ext-triage-java/pr-comment-disposition.md applies and there is nothing to suppress; accepted with no code change.

…sions

ADR-0021 settles which BOM owns the shared Quarkus / smallrye-config version
line: quarkus-bom is imported first and is the authority, every later BOM
import is a subordinate. Reordering them splits smallrye-config at compile
scope and breaks Quarkus config-mapping augmentation.

ADR-0022 settles what the gateway does when its security dependency tightens
a default: adopt it and document the narrowed operator contract, never restore
the permissive behaviour locally. A tightened default the config model cannot
accommodate is escalated as a finding, not patched around; a floor move is
audited on the whole delta, not on the feature that motivated it.

Both were surfaced by the phase-6 adr-propose gate on PLAN-31A and confirmed
by the operator.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XC1JSf6dxTVa4S9RqvNJuY
@cuioss-oliver
cuioss-oliver added this pull request to the merge queue Jul 29, 2026
Merged via the queue into main with commit 536ce8f Jul 29, 2026
24 checks passed
@cuioss-oliver
cuioss-oliver deleted the feature/plan-31a-token-sheriff-dependency-floor branch July 29, 2026 16:17
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