added FORK_DIVERGENCE and UPSTREAM_VERSION file

This commit is contained in:
Letro Bot
2026-04-22 17:23:16 +03:30
parent ae8d6d0ace
commit 8dad7b29ec
2 changed files with 129 additions and 0 deletions

122
FORK_DIVERGENCE.md Normal file
View File

@@ -0,0 +1,122 @@
# FORK_DIVERGENCE
This document tracks the functional and behavioral differences between this forked repository and its upstream baseline. Each entry represents a deliberate divergence introduced to meet the specific needs of this fork.
---
### **D-0002: Letro colour palette, gradient buttons, URL corrections, and live-location permission**
- **Upstream baseline commit**: `e0ca2acc43649d4c80194d84d2179a7a9310d7eb`
- **Fork commit (merge)**: `bbdee132f18c9bfe90f448aa1f3956ddd79df39b` (PR #4`p-num/letroMain`)
- **Type**: `Behavioral`
- **Date**: `2026-04-16`
#### **Description**
Follow-up polish to the D-0001 rebrand: expands Letro's colour tokens and applies them more broadly, replaces flat primary buttons with a gradient, corrects remaining `element.io`/`matrix.org` URLs to `letro.com`, adds the background-location usage description required for live-location sharing, and refines localisation strings.
#### **Upstream vs. Fork Behavior**
| Area | Upstream (Element X) | Fork (Letro) |
|---|---|---|
| Primary button background | Flat fill using `bgActionPrimaryRest` token | Linear gradient (`letroGradient1 → letroGradient5`) via custom `makePrimaryBackground` in `CompoundButtonStyle` |
| Compound colour overrides | Not overridden | Extended: `gradientAction` stops, `bgActionPrimaryRest/Pressed/Disabled`, `textActionPrimary` all mapped to Letro gradient palette |
| `letroPrimary` colour | `#C20000` (D-0001) | `#F32D1B`; `letroSecondary` (`#F9BC15`) and five gradient steps (`#CB2000``#F7B000`) added |
| App URLs | Leftover `element.io`/`matrix.org` references | `elementWebHosts`, `accountProvisioningHost`, `pushGatewayBaseURL`, `analyticsTermsURL`, `bugReportApplicationID` corrected to `letro.com`/`letro` |
| App Store link | Element Pro app | Letro Pro app (`id6758909629`) |
| Live-location permission | `NSLocationWhenInUseUsageDescription` only | `NSLocationAlwaysAndWhenInUseUsageDescription` added for background live-location |
#### **Files Modified**
- `ElementX/Sources/Application/Settings/AppSettings.swift`
- `ElementX/Sources/Letro/Extensions/CompoundExtensions.swift`
- `ElementX/Sources/Letro/Extensions/SwiftUIExtensions.swift`
- `ElementX/SupportingFiles/Info.plist`
- `ElementX/SupportingFiles/target.yml`
- `ElementX/Resources/Localizations/en.lproj/Letro.strings`
- `ElementX/Resources/Localizations/en.lproj/Letro.stringsdict`
- `compound-ios/Sources/Compound/BaseStyles/CompoundButtonStyle.swift`
#### **Impact & Risk**
- **Impact**: Visual impact on all primary action buttons and gradient surfaces. URL changes affect bug reporting, analytics, web-link handling, and push gateway routing. Background-location permission is required for live-location feature to work correctly on iOS.
- **Risk Level**: `MEDIUM`. Colour and URL changes are self-contained; gradient button logic modifies a shared Compound component and must be retested on iOS 26.
#### **AGPL Relevance**
Not Applicable
---
### **D-0001: Letro rebranding — identity, UI, configuration, and behaviour customisations**
- **Upstream baseline commit**: `0fc0e68346f90488e4af21fd5528b2e978aa3247`
- **Fork commit (merge)**: `e0ca2acc43649d4c80194d84d2179a7a9310d7eb` (PR #1`p-num/letroMain`)
- **Type**: `Behavioral`
- **Date**: `2026-04-10`
#### **Description**
A comprehensive rebrand and product customisation of Element X iOS into "Letro". The changes span the app's identity (name, bundle ID, icons), its visual design (colours, shapes, custom assets), several screens (authentication, home, spaces, settings), and supporting infrastructure (string-override mechanism, SwiftGen template, entitlements).
#### **Upstream vs. Fork Behavior**
| Area | Upstream (Element X) | Fork (Letro) |
|---|---|---|
| App identity | Bundle ID `io.element.elementx`, display name "Element X", dev team `7J4U792NQT` | Bundle ID `com.letro.cloudclient`, display name "Letro", dev team `44TCX5L4G2` |
| Default Matrix server | `matrix.org` | `ess.postnumber.com` |
| Colour theme | System (light/dark) | Forced light theme; Compound gradient/accent tokens overridden with orange palette |
| Avatar shape | Circular throughout | Rounded rectangle throughout |
| Authentication screen | Element-branded scrollable layout with logo and sign-in buttons | Custom background image, logo type, "Get Started" → bottom-sheet flow showing sign-in buttons; hardcoded non-localised promo text |
| String localisation | Standard `Localizable.strings` lookup | Additional `Letro.strings`/`Letro.stringsdict` override table checked first, allowing any string to be shadowed without editing upstream files |
| Icons (tab bar / new button) | Compound icon set | Custom SVGs (`letro-icon-chat`, `letro-icon-space`, `letro-icon-new`); `CompoundIcon` patched with static override registry |
| Tab bar label colours | Default Compound accent | Custom `letroGray` (normal) / `letroPrimary` red (selected) |
| Settings screen | Shows "Report a problem" and "Analytics" rows | Both rows commented out / hidden |
| Onboarding analytics prompt | Shown when analytics consent is pending | Always skipped (`requiresAnalyticsSetup` hardcoded to `false`) |
| New-chat / new-space toolbar button | `CompoundIcon(\.plus)` with `.super` style | Custom `letro-icon-new` image; iOS 26 `sharedBackgroundVisibility` hidden |
| App URLs | All point to `element.io` | All point to `letro.com` (website, copyright, privacy, OIDC redirect, etc.) |
| Push (NSE) entitlement | Present | Temporarily removed to allow TestFlight submission |
| App version | `26.04.1` / build `1` | `1.0.3` / build `3` |
#### **Files Modified**
- `app.yml`
- `project.yml`
- `ElementX/SupportingFiles/target.yml`
- `ElementX/SupportingFiles/ElementX.entitlements`
- `NSE/SupportingFiles/NSE.entitlements`
- `ElementX/Sources/Application/Application.swift`
- `ElementX/Sources/Application/Navigation/NavigationTabCoordinator.swift`
- `ElementX/Sources/Application/Settings/AppSettings.swift`
- `ElementX/Sources/FlowCoordinators/OnboardingFlowCoordinator.swift`
- `ElementX/Sources/Generated/Assets.swift`
- `ElementX/Sources/Generated/Strings.swift`
- `ElementX/Sources/Letro/Extensions/CompoundExtensions.swift` *(new)*
- `ElementX/Sources/Letro/Extensions/SwiftUIExtensions.swift` *(new)*
- `ElementX/Sources/Other/Avatars.swift`
- `ElementX/Sources/Other/SwiftUI/Views/RoomAvatarImage.swift`
- `ElementX/Sources/Other/SwiftUI/Views/TombstonedAvatarImage.swift`
- `ElementX/Sources/Screens/Authentication/StartScreen/View/AuthenticationStartScreen.swift`
- `ElementX/Sources/Screens/HomeScreen/View/Filters/RoomListFilterView.swift`
- `ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift`
- `ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift`
- `ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift`
- `ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesScreen.swift`
- `ElementX/Resources/Localizations/en.lproj/Letro.strings` *(new)*
- `ElementX/Resources/Localizations/en.lproj/Letro.stringsdict` *(new)*
- `ElementX/Resources/AppIcon.icon/` *(icon assets replaced)*
- `ElementX/Resources/Assets.xcassets/images/` *(new Letro image assets)*
- `compound-ios/Sources/Compound/Icons/CompoundIcon.swift`
- `Tools/SwiftGen/Templates/Strings/structured-swift5-element.stencil`
- `ElementX.xcodeproj/project.pbxproj`
- `ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved`
- `ElementX.xcodeproj/xcshareddata/xcschemes/*.xcscheme` *(scheme renames/updates)*
#### **Impact & Risk**
- **Impact**: Touches app identity, all major screens, the global colour/icon system, the string localisation pipeline, onboarding flow, and build configuration. Any upstream merge must re-apply or carefully reconcile every change. New image assets and the `Letro.strings` override table must be maintained alongside upstream string additions.
- **Risk Level**: `HIGH`. The breadth of changes (authentication screen, string layer, Compound overrides, entitlements) means upstream updates carry a significant merge-conflict and regression risk.
#### **AGPL Relevance**
Not Applicable

7
UPSTREAM_VERSION Normal file
View File

@@ -0,0 +1,7 @@
# Upstream Version
repo: element-hq/element-x-ios
upstream_url: <https://github.com/element-hq/element-x-ios>
sync_strategy: manual
commit: 4ad495d36c6ccde088848a2ac90c7db62e963421
date: 2026-04-01