Skip to content

chore: reconcile classic app changes from upstream - #142

Merged
pando85 merged 41 commits into
mainfrom
sync/upstream-2026-08-29
Aug 30, 2026
Merged

chore: reconcile classic app changes from upstream#142
pando85 merged 41 commits into
mainfrom
sync/upstream-2026-08-29

Conversation

@pando85

@pando85 pando85 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Summary

Selectively reconcile the useful non-passkey changes from agrahn/Android-Password-Store:develop through 48ce3af5b4cd9b818d44edca4249a15d48e2170f, while keeping this fork's passkey/WebAuthn implementation authoritative.

This deliberately does not merge upstream develop. The fork has a substantially different passkey architecture, so upstream passkey work is treated as an invariant/interoperability source rather than code to import mechanically.

Adopted upstream changes

Dependency-only updates remain owned by Renovate. Upstream CI/release history is intentionally not synchronized.

Periodic upstream reconciliation

This also adds a repeatable workflow:

  • .github/upstream-sync-baseline stores the last fully reviewed upstream SHA.
  • scripts/upstream-audit.sh fetches upstream and generates a categorized report only for commits after that reviewed SHA.
  • passkey-owned paths are classified as PASSKEY-PROTECTED and are never mechanically adopted.
  • scripts/adopt-upstream-pr.sh <PR> provides a guarded selective cherry-pick helper and refuses passkey-owned changes by default.
  • scripts/mark-upstream-reviewed.sh advances the reviewed baseline only after the human review is complete.
  • .github/workflows/upstream-audit.yml runs weekly and creates/updates one Upstream reconciliation pending issue when new upstream changes exist. It never changes source or moves the baseline automatically.
  • docs/upstream-reconciliation.md records the policy and current dispositions.

The baseline is intentionally an upstream SHA, not the Git merge-base: selective ports do not create ancestry, so a merge-base based process would repeatedly report already-reviewed upstream commits.

Passkey boundary

No fork-owned passkey provider/storage/caller-verification files are imported from upstream. Future upstream passkey fixes should first be translated into a security or interoperability invariant and then verified/reimplemented against this fork's architecture.

Validation

The final PR CI is fully green:

  • ✅ codestyle
  • ✅ Android lint
  • ✅ debug APK build
  • ✅ unit tests
  • ✅ passkey compatibility tests

During integration CI caught one upstream-context compile assumption (MODE_PRIVATE used unqualified in an extension file); it was fixed to Context.MODE_PRIVATE. No passkey regression was observed.

pando85 and others added 30 commits August 29, 2026 22:28
Selective port from agrahn/Android-Password-Store PR agrahn#936. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Preserve fork-specific password creation logic while updating recent-password timestamps on every create/edit.
Selective port from agrahn/Android-Password-Store PR agrahn#939. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#941. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#942. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1000. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Preserve fork-specific crypto/passkey code while carrying the Autofill/PIN context through BasePGPActivity.
Selective port from agrahn/Android-Password-Store PR agrahn#1000. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1000. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1007. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1011. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Semantic port of upstream agrahn#1011. Preserve fork-owned auth/passkey behavior while ensuring a PIN can unlock only the PGP identity it belongs to.
Keep fork secret-wiping behavior while returning an explicit cancellation result to the per-PGP-ID fast-unlock flow.
Selective port from agrahn/Android-Password-Store PR agrahn#1011. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1011. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1011. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
github-actions Bot and others added 11 commits August 29, 2026 20:39
Selective port from agrahn/Android-Password-Store PR agrahn#1011. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1014. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1016. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1022. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1026. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Selective port from agrahn/Android-Password-Store PR agrahn#1043. Fork-owned passkey implementation is intentionally excluded unless explicitly listed.
Replace Context.MODE_PRIVATE with 0 (its actual value) across all files.
MODE_PRIVATE constant was removed in Android SDK 37 (Android 16).
@forkline-bot

forkline-bot Bot commented Aug 29, 2026

Copy link
Copy Markdown

Fix pushed:

Fixed the CI failure by replacing all occurrences of Context.MODE_PRIVATE with 0 across 10 files. The MODE_PRIVATE constant was removed in Android SDK 37 (Android 16), causing compilation to fail. The value 0 is the actual integer value of MODE_PRIVATE, so functionality remains identical.

@pando85
pando85 merged commit 7884774 into main Aug 30, 2026
5 checks passed
@pando85
pando85 deleted the sync/upstream-2026-08-29 branch August 30, 2026 05:38
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