Fix This Bug
Sunny's bug report. Parliament tab re-tap was yanking the calendar to January 2001 with no way back.
Calendar scrolls to Jan 2001 on Parliament tab re-tap; add prominent Today action and de-clutter toolbar
The intake
One chat message. One reply. The factory took it from there.
2026-05-18 · 19:53 UTC
there's a bug in epac where if i'm at the parliament calendar screen, and I tab the Parliament tab item, it scrolls the calendar all the way up to January 2001. There's no data there, and there's no way for me to return to Today.
We need a way to return back to Today on that calendar screen. Also, can we prevent tapping on the tab bar item from scrolling all the way to the top? Double tapping on a tab bar item scrolls that view to the top, that's standard iOS behaviour, so we'd be fighting the system. However, the calendar scrolls upside down so scrolling to the top is not taking us to the latest day. At the very least, we need an easy way to return to Today, and let's pay attention to how cluttered the toolbar is getting on that screen.
Can you do a RCA on this, use a worktree, reproduce it on the parliament calendar screen, then create Linear item in EPAC to fix it
Filed EPAC-1940 (Priority: High, Estimate: 8).
Root cause (high confidence, from code):
HorizonCalendar'sCalendarScrollViewis a vanillaUIScrollViewthat inheritsscrollsToTop = true.- iOS's tab re-tap walks the active tab's view hierarchy and sends the first eligible scroll view to
contentOffset.zero— same mechanism as the legacy status-bar tap. - The calendar's
visibleDatesstarts at 2001-01-01 so "top" is January 2001. The year-picker is clamped to 2016+ so the chevrons can't even take you back. - Only existing escape: the tiny red dot in the legend at line 127, which looks like a swatch, not a button.
Ticket scope: stop the scroll-to-2001, add one canonical prominent Today action, and consolidate the Parliament toolbar (6 trailing items + 3-item principal) and Members toolbar.
Then the factory took it from there
The pipeline
What happened next, with receipts.
save_issue
Claude reproduced from code, drafted the ticket with two implementation options and toolbar de-clutter scope, and called the Linear MCP save_issue tool.
Symphony saw the new Todo ticket, transitioned Linear to In Progress, and spawned a codex worker in a fresh worktree off origin/main.
codex finished the first implementation pass, committed the change in the worktree, and opened the PR as app/riddim-developer-bot — not Sunny. Clean audit trail: every commit is attributable to the bot identity.
CHANGES_REQUESTED old two-bot workflow
Reviewer-bot ran and flagged that the PR omitted before/after screenshots and iPad verification. Verdict: request_changes. AC coverage: 7 covered · 1 missing · 1 unclear.
fix_existing_pr mode
Symphony saw the changes-requested state and spawned a second codex run, pointed at the existing PR with reviewer feedback in context.
APPROVED
codex amended the PR with screenshots and regression tests. Two items remained "missing" (iPad verification, test isolation from real HorizonCalendar), but the verdict was approved-to-merge.
PR #494 squash-merged to main. 2 hours 5 minutes elapsed from Sunny's chat message.
v1.11 tag dispatched
The merge commit was tagged v1.11. The Submit App Store Review workflow ran on that tag and pushed the build into Apple's review queue.
Apple approved the build. Anyone with the App Store can now install the version of epac that has the Parliament tab re-tap behaving, the Today button visible, and the toolbar de-cluttered.
The fix
Opt the calendar out of scrollsToTop. Add a real Today button.
struct CalendarScrollsToTopDisabler: UIViewRepresentable {
func updateUIView(_ uiView: UIView, context: Context) {
DispatchQueue.main.async {
// Walk up from the SwiftUI host until we find
// HorizonCalendar's scroll view (matched by class
// name), then opt it out of scroll-to-top.
Self.disable(in: uiView.superview)
}
}
}
A UIViewRepresentable shim walks the SwiftUI view hierarchy, finds the HorizonCalendar scroll view by its runtime class name, sets scrollsToTop = false. Surgical — every other scroll view in the app keeps the expected iOS behavior.
The evidence
Same surface, two SHAs.
Calendar retap fix (tab re-tap no longer scrolls to Jan 2001) is verified by CalendarScrollsToTopDisablerTests and XCTest harness. → Full PR diff