diff --git a/project-knowledge/01-current/current-work.md b/project-knowledge/01-current/current-work.md index 887ab12..0897266 100644 --- a/project-knowledge/01-current/current-work.md +++ b/project-knowledge/01-current/current-work.md @@ -2,7 +2,7 @@ type: current project: fidelity status: active -updated: 2026-04-30 +updated: 2026-05-01 tags: - current-work - fidelity @@ -50,6 +50,9 @@ tags: - Current Discourse / FTTransfer findings point to the `BankInformationView` path rather than XFlow directly: XFlow appears to finish before `BankInformationView` takes over, and the web-view reload looks like a SwiftUI recomposition/state issue in the playground path - Continue the Discourse / FTTransfer investigation to verify root cause and any remaining relationship to XFlowViewMaker before assigning ownership or creating a story - Jeff asked David to try to resolve the Discourse consumer issue by end of day on April 30 if possible +- Deeper Discourse / FTTransfer analysis now points to presentation-layer SwiftUI identity/lifecycle churn around `BankInformationView` and `BankSetupWebView`: XFlow eventing appears to set shared consumer-observed state, but current evidence does not show it directly mutating view identity, host lifecycle, or alert state. +- The working non-XFlow route appears to avoid the issue because it bypasses the extra XFlow destination presentation layer and associated state-coupling surface, while the failing playground path keeps the alert/popup transition and cover lifecycle coupled in the same reactive chain. +- The next implementation direction for the Discourse / FTTransfer issue is a pure SwiftUI fix that decouples alert state from the cover identity chain, avoiding unnecessary UIKit dependencies - Before closing out the AO thread, send one more working-group Teams reply that summarizes the original iOS issue, links the Jira comment, Discourse comment, and PR, and separates the remaining `HybridBrokerageAccountOpening` / `JointIdentityCheck` service-side issue - The `HybridBrokerageAccountOpening` / `JointIdentityCheck` rule-content issue appears unchanged between QA and Production in Cogstore and should be treated as the remaining service-side follow-up diff --git a/project-knowledge/06-daily/2026-04-30.md b/project-knowledge/06-daily/2026-04-30.md index 620ca87..1b98b84 100644 --- a/project-knowledge/06-daily/2026-04-30.md +++ b/project-knowledge/06-daily/2026-04-30.md @@ -1,5 +1,57 @@ +--- +type: daily +project: fidelity +date: 2026-04-30 +status: active +focus: [ao-discourse, xflow-debugging] +work-items: [] +blockers: [] +tags: + - daily + - fidelity +updated: 2026-05-01 +--- + # 2026-04-30 -## Context Updates -- Jeff requested confirmation on whether the webview reload issue is tied to `XFlow`. If not, we need to compare the failing flow against Zachary's working non-XFlow entry point to understand the discrepancy. -- David reported that the issue seems isolated to a premature deallocation in the SwiftUI lifecycle between `BankInformationView` and `BankSetupWebView`, meaning it does not appear to be an `XFlowViewMaker` bug. +## Focus + +- Continue the Discourse / FTTransfer AccountLink investigation and verify whether the web-view reload issue is caused by XFlow/XFlowViewMaker or by the consumer SwiftUI hierarchy. + +--- + +## Work Done + +- Compared the failing `FTTransferPlayground` path with the working non-XFlow entry point Zachary referenced. +- Explored whether XFlow event handling could be contributing to the issue, since similar event/lifecycle concerns came up in prior work. +- Ran a deeper architecture analysis of the web-view reload behavior with concrete code references. +- Identified the likely root cause as a SwiftUI view-identity / environment-republish issue around `BankInformationView` and `BankSetupWebView`, not XFlow rendering or XFlowViewMaker lifecycle logic directly. + +--- + +## Findings + +- XFlow is definitely the upstream trigger path, but the failure is driven entirely by how the consumer SwiftUI hierarchy anchors the web-view presentation. +- **Final Root Cause (Modifier-Site Teardown):** The `.ftFullScreenCover` modifier was incorrectly attached to a **volatile branch** of `BankInformationView` (e.g., inside a dynamic loaded/error state view). When the webview triggered an exit alert, the resulting state mutation caused SwiftUI to re-evaluate that volatile branch. This dismantled the presentation anchor and rebuilt it off-screen (`inWindow=false`), resulting in a blank screen. +- The working non-XFlow route survives because it uses a completely different, stronger modal/coordinator boundary (`BankSetupContainerView`), avoiding this fragile modifier placement. +- **Verified Solution:** The issue was resolved by moving the `.ftFullScreenCover` and its `shouldShowWebView` observer to the **stable root** of `BankInformationView`. By anchoring the presentation to the static root instead of a dynamic child branch, transient state changes no longer dismantle the presenter. This fixes the bug perfectly using pure SwiftUI, without any UIKit (`UIHostingController`) hacks. + +--- + +## Communication + +- David asked Zachary for the working non-XFlow entry point so the failing and working paths could be compared directly. +- David can now confidently update Jeff and Zachary that XFlow is completely cleared, and the bug was a classic SwiftUI presentation-anchor issue in the playground's consumer code. + +--- + +## Next Steps + +- Finalize the PR with the structural fix (moving the cover to the stable root of `BankInformationView`). +- Share the exact lines changed with Zachary so his team can apply this SwiftUI best practice to other covers in their playground. + +--- + +## Blockers + +- None currently. diff --git a/project-knowledge/06-daily/index.md b/project-knowledge/06-daily/index.md index 6fbed43..3990cdf 100644 --- a/project-knowledge/06-daily/index.md +++ b/project-knowledge/06-daily/index.md @@ -1,7 +1,7 @@ --- type: daily-index project: fidelity -updated: 2026-04-29 +updated: 2026-05-01 tags: - daily - map @@ -28,6 +28,7 @@ Promote durable facts into `project-knowledge/01-current/`, `project-knowledge/0 - [2026-04-27](2026-04-27.md) - [2026-04-28](2026-04-28.md) - [2026-04-29](2026-04-29.md) +- [2026-04-30](2026-04-30.md) ---