Skip to content

Harden #2994 RCS release candidate: consent, signing, and Gaia recovery - #6

Open
keeltrace wants to merge 6 commits into
naormeit:rcs-bounty-2994from
keeltrace:keeltrace/2994-release-hardening-20260915
Open

keeltrace wants to merge 6 commits into
naormeit:rcs-bounty-2994from
keeltrace:keeltrace/2994-release-hardening-20260915

Conversation

@keeltrace

Copy link
Copy Markdown

Scope

This is a release-hardening follow-up stacked directly on the current rcs-bounty-2994 head used by microg#3784. It is not a competing microg#2994 implementation and does not replace or re-claim the underlying bounty solution.

Base verified before submission: 276523b1d3e136b5b6e4ba0cf3f505b6702d60e2 (includes the multipart MT-SMS fix merged in #5).

Hardening changes

  • Preserve RCS consent returned in rcs_consent when no matching Gaia consent entry exists, while keeping a matching Gaia consent authoritative when present.
  • Add focused JVM regression coverage for Gaia-vs-RCS consent precedence/fallback behavior.
  • Stop silently converting Constellation ECDSA signing failures into an empty signature; fail explicitly so callers cannot send malformed client-auth payloads as if signing succeeded.
  • Recover Gaia account IDs when GoogleUserId is either missing (null) or empty, rather than only when it is exactly the empty string.
  • Enable the focused Asterism unit-test source set and JUnit dependency required for the new regression suite.

Release intent

The goal is to reduce silent failure modes and carrier/account-dependent edge cases in the consolidated microg#2994 release candidate while preserving all existing winner functionality beneath this branch.

Non-claims

Verification

The branch is rooted exactly at the current rcs-bounty-2994 head and is 0 commits behind it at submission time. CI should exercise the full project build/lint lanes; the added Asterism tests specifically cover the new consent resolver behavior.

Related: microg#2994, microg#3784.

@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing

Copy link
Copy Markdown
Author

CI note / baseline comparison:

The PR run (34962951821) reached a successful Debug assemble, then failed in the repository-wide lintDebug step; the parallel Release lane was cancelled by the matrix after that failure.

This is the same pre-existing workflow failure shape as the winner/base branch at c23a34c8 (34576553046): Debug assemble succeeds -> repository-wide lintDebug fails -> Release lane is cancelled. In other words, this PR did not introduce the red full-repo lint gate; the stacked base was already red on that gate.

Independent Keeltrace proof for the underlying RCS hardening line is green (34537649271): focused RCS JUnit, changed-module Constellation lintDebug, and independent assembleRelease all passed. The present stacked PR is also 0 commits behind the current rcs-bounty-2994 head and preserves the newer multipart MT-SMS fix unchanged.

I am therefore treating the full-repo lint result as an inherited base-branch blocker, not papering it over in this narrow release-hardening PR.

Chess-Debug added a commit to Chess-Debug/GmsCore that referenced this pull request Sep 16, 2026
FD-RCS-004/005/006/007/008

Retained from KeelTrace PR naormeit#6 (head 3aacca3):
- RCS consent fallback resolver and its focused Asterism tests
- Asterism test source-set/JUnit wiring
- fail-closed Constellation signing
- null-or-empty Gaia ID recovery

Why retained:
- each target defect is still present on the selected 276523b baseline
- the resolver fixes the code/proto mismatch where top-level rcs_consent was ignored
- returning an empty signature hides signing failure as malformed auth
- null GoogleUserId must follow the same recovery path as an empty value

Foundragon boundary:
- exact Gaia-vs-RCS precedence is still tracked as an evidence frontier; this commit preserves KeelTrace's tested precedence behavior but does not claim external stock proof for the disagreement case
- signing and Gaia recovery still require dedicated Foundragon failure-path regressions before those ledger items are marked CLOSED

Contributor credit: KeelTrace / keeltrace/GmsCore
Chess-Debug added a commit to Chess-Debug/GmsCore that referenced this pull request Sep 16, 2026
Port only the non-overlapping KeelTrace hardening exercised by the private Foundragon validator: explicit signing failure, null-or-empty Gaia ID recovery, and the follow-up Gaia logging repair.

Original-Commits:
- b0db179
- 57e43af
- 3aacca3
Source-PR: naormeit#6
Authorship/implementation credit: KeelTrace

Consent commits from that PR are intentionally not re-imported because the Anusha integration already supplies the overlapping consent resolver path.
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