Skip to content
CAI
Software that uses CAICheck a score

CarGuo/gsy_github_app_flutter

50.8

Weak · 22 September 2026

36k

lines of production code

Dart

primary language

6

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Flutter-based mobile client for GitHub that provides comprehensive access to repository data, issues, pull requests, discussions, and user profiles. It features adaptive navigation for responsive layouts across devices, local data caching via SQLite, and authentication through OAuth or Personal Access Tokens. The application integrates both Redux and Riverpod for state management and utilizes the GitHub GraphQL API for modern data fetching.

How it got here

2018–2019 — Flutter 3.47.2 migration and adaptive UI overhaul

57 changes.

The project was upgraded to Flutter 3.47.2 and Dart 3.13, involving extensive platform-specific updates for Android and iOS build systems. A major architectural shift introduced Riverpod alongside Redux, implemented adaptive master-detail navigation for foldable and large screens, and added a local SQLite caching layer. The UI was comprehensively redesigned to align with GitHub's official interface, featuring new components for issues, releases, and user profiles, alongside enhanced network handling via GraphQL and structured interceptors.

2020–2026 — GitHub API expansion and test coverage

24 changes.

The project significantly expanded its GitHub API coverage by introducing models and UI pages for Discussions, Pull Requests, and detailed Issue timelines, alongside new features like particle animations and multi-language localization. This period also focused on stabilizing the codebase through comprehensive unit and widget tests, particularly for adaptive navigation, data merging logic, and structured error handling.

Features

Introduces the \GitHubTrending\ class and \TrendingUtil\ helper in \lib/common/net/trending/github\_trending.dart\ to fetch and parse GitHub Trending page HTML. This enables the application to extract repository metadata, including star counts, fork counts, language, and contributors, from the trending feed.

lib/common/net/trending · high confidence

Add radial menu widget with arc progress indicator

Added a new radial menu component in lib/widget/menu/src, consisting of ArcProgressIndicator, RadialMenu, RadialMenuButton, RadialMenuCenterButton, and RadialMenuItem. This allows users to select from a list of items via a circular menu that animates an arc progress indicator around a central button when an item is activated.

lib/widget/menu/src · high confidence

Add release page with tabbed view for releases and tags

A new ReleasePage has been added to display repository release history. The page features a tabbed interface allowing users to switch between viewing official 'Releases' and 'Tags'. It supports pull-to-refresh and infinite scrolling to load items, and includes functionality to launch external URLs for specific releases or tags via a long-press action.

lib/page/release · high confidence

The app now includes a new native Android plugin (UpdateAlbumPlugin) that allows the Flutter layer to trigger a media scanner broadcast after saving images, ensuring they appear immediately in the device's gallery. This change also updates MainActivity to use the modern Flutter embedding API (FlutterEngine) and registers the new plugin.

android/app/src/main/kotlin · high confidence

Added Lottie animation assets for rejection, search, and user states

New Lottie JSON animation files have been added to the static assets directory to support UI animations. Specifically, \rejection.json\ and \rejection2.json\ provide vector-based rejection animations, \search.json\ adds a search-related animation, and \user.json\ includes a profile animation. These files are now available for the application to render these specific visual states.

static/file · high confidence

Added PowerShell script to generate AI review bundles

A new PowerShell script, \build\_review\_bundle.ps1\, has been added to the \tool/ai\ directory. This tool automates the creation of a structured Markdown document for AI-assisted code reviews by aggregating the current git diff, changed file list, and inferred feature hints (based on file paths like \lib/page/repos/\ or \lib/redux/\). It outputs this bundle to \build/ai/review-bundle.md\, providing a standardized context package that includes links to relevant documentation and prompts for the AI reviewer.

tool/ai · high confidence

Added icon font assets and demo pages

The static/font directory now includes a complete icon font library (iconfont) with CSS, JavaScript, and multiple HTML demo pages (fontclass, symbol, unicode). This adds a set of scalable vector icons (e.g., alert, add, share, location, search) that can be used across the application via CSS classes or SVG symbols, replacing or supplementing previous icon handling methods.

static/font · high confidence

Added local database providers for issue and user data caching

New database provider classes have been introduced to cache GitHub issue details, issue comments, and various user-related data (such as followers, following, repositories, starred repositories, and organization memberships) locally using SQLite. These providers enable offline access and faster retrieval for issue views and user profile sections by storing JSON data in local tables and utilizing isolates for background JSON decoding.

lib/db/provider/issue, lib/db/provider/user · high confidence

Added local database providers for received and user events

New database provider classes have been introduced to locally cache event data using SQLite. The \ReceivedEventDbProvider\ handles storing and retrieving received events, while the \UserEventDbProvider\ manages user-specific event streams. Both providers utilize background isolates via \compute\ to optimize JSON decoding performance, ensuring that parsing large event lists does not block the main UI thread.

lib/db/provider/event · high confidence

Added particle background animation widget

A new particle animation system has been introduced to the application, consisting of a reusable \ParticlesWidget\ that renders a configurable number of moving particles using the \simple\_animations\ library. The implementation includes a \ParticleModel\ for managing individual particle state and trajectory, and a \ParticlePainter\ for drawing the particles on a canvas. A key behavioral addition is lifecycle awareness: when the app resumes from the background, the particles are automatically reset and shuffled to ensure smooth visual continuity.

lib/widget/particle · high confidence

Added push commit detail page

A new PushDetailPage has been introduced to display detailed information for a specific Git push commit. This page fetches commit data via the ReposRepository, renders a header view with commit metadata, and lists associated file changes. Tapping on a file item navigates the user to a code detail view where the diff is displayed with syntax highlighting.

lib/page/push · high confidence

Added push notification detail widgets

Introduced two new widgets, PushCodeItem and PushHeader, to display the details of code push events. PushHeader renders the commit summary including the author's avatar, edit/add/delete counts, and commit message, while PushCodeItem lists the specific files modified in the push.

lib/page/push/widget · high confidence

Centralized configuration constants for app settings and features

A new centralized configuration class has been introduced to define application-wide constants and user preference keys. This includes settings for enabling vibration feedback, managing search history (with a maximum retention limit), and controlling adaptive navigation behavior on large or foldable screens (specifically the option to force full-screen detail view). It also consolidates keys for authentication tokens, user info, language selection, and theme color, providing a single source of truth for these configuration values.

lib/common/config · high confidence

Expanded model coverage for GitHub API resources

The \lib/model\ directory now includes data models for a broader range of GitHub API entities, enabling richer data handling across the application. New additions include \Branch\ (with serialization for protected status and archive URLs), \CodeSearchItem\ for lightweight code search results, and detailed commit-related models (\CommitFile\, \CommitStats\, \CommitGitInfo\, \CommitGitUser\, \CommitsComparison\) to support granular commit history and diff views. The \Issue\ model has been significantly enhanced to support full detail pages with labels, assignees, milestones, reactions, and pull request references. Additionally, new models for \PullRequest\ (including mergeability state and review requests), \IssueTimelineEvent\ (covering a wide range of timeline actions like reviews, commits, and project updates), \Event\ with \EventPayload\ (supporting discussions and security advisories), and supporting types like \Label\, \Milestone\, \Notification\, and \License\ have been introduced to align with current GitHub API capabilities.

lib/model · high confidence

Expose radial menu components via public API

The lib/widget/menu/flutter\_radial\_menu.dart file now exports the internal radial menu implementation and menu item classes, making them accessible to consumers of this library.

lib/widget/menu · high confidence

Introduce GitHub Discussions list and detail pages with pagination and reactions

This change adds the core UI and data layers for GitHub Discussions, including a new list page (\DiscussionListPage\) that displays discussions in a repository tab with cursor-based pagination, and a detail page (\DiscussionDetailPage\) that shows the discussion body, author, and a paginated comments section. The implementation introduces a dedicated paging logic layer (\DiscussionCommentsPaging\) to handle comment data normalization and merging, and a reactions system (\reaction\_groups\) that normalizes GraphQL reaction data and supports local optimistic toggling. Additionally, a footer component (\release\_footer\) is added to detect and visually separate release-linked discussion footers from the main body content.

lib/page/discussion · high confidence

Introduce nested pull-to-refresh and adaptive list widgets

Added new widgets in the nested pull location to support pull-to-refresh and infinite scroll within nested scroll views, specifically for adaptive layouts. The \GSYNestedPullLoadWidget\ provides a unified interface for list rendering, handling empty states, and loading more indicators, while integrating with \GSYAdaptiveNavigation\ to constrain item widths on medium and expanded breakpoints. The \NestedScrollViewRefreshIndicator\ implements the Material swipe-to-refresh behavior tailored for nested scroll contexts, and \GSYSliverHeaderDelegate\ manages dynamic header sizing for sliver-based layouts.

lib/widget/pull/nested · high confidence

Introduce structured environment configuration system

The application now uses a dedicated environment configuration system in lib/env to manage build-time settings for different deployment targets. This includes JSON-based configuration files for dev and prod environments, which are processed by json\_annotation generators to create strongly typed EnvConfig objects. A new ConfigWrapper widget provides these settings to the widget tree via InheritedWidget, allowing the app to dynamically adjust behavior (such as debug mode) based on the active environment.

lib/env · high confidence

Introduces GraphQL API layer for GitHub data access

The application now uses the GitHub GraphQL API (v4) instead of REST for fetching user profiles, repository details, discussions, and pull request review threads. This change adds a new client initialization and query/mutation functions in lib/common/net/graphql, enabling features such as displaying user status chips, pinned repositories, sponsor blocks, contribution calendars, and discussion lists with pagination and reactions.

lib/common/net/graphql · high confidence

Introduces new reusable UI widgets and adaptive navigation components

This change adds a suite of new UI components to the library, including an animated gradient background, a JSON viewer, a bottom action bar, card items, and various input and selection widgets. It also introduces a new tab bar widget that supports adaptive navigation for large and foldable screens, featuring a master-detail layout with logic to preserve navigation state across breakpoints. Additionally, event list items now support grouping consecutive events by the same user, with a caching mechanism to optimize performance in long lists.

lib/widget · high confidence

Introduces structured HTTP interceptors for network requests

Adds a new set of Dio interceptors in the network layer to standardize request handling. The ErrorInterceptor now proactively checks device connectivity and rejects requests with a specific network error if offline. The HeaderInterceptor sets default 30-second timeouts for connections and data reception. The TokenInterceptor manages authentication by injecting Authorization headers from local storage and handling token updates from responses. The ResponseInterceptor normalizes API responses into a consistent ResultData structure. Additionally, a new LogInterceptor provides detailed request/response logging and maintains in-memory history of recent HTTP interactions for debugging purposes.

lib/common/net/interceptors · high confidence

Introduction of SQLite database management layer

The application now includes a local data persistence layer using SQLite via the sqflite package. This change introduces SqlManager to handle database initialization, connection, and lifecycle management, and BaseDbProvider as an abstract base class to simplify table creation and data access for specific providers. This enables the app to store and retrieve user data locally on the device.

lib/db · high confidence

Issue detail page aligns with GitHub official UI and adds PR file diff viewing with inline review comments

The issue detail page now mirrors the GitHub official interface, displaying header metadata (labels, assignees, milestones, reactions) and a unified timeline that merges events and comments. A new Pull Request files page allows users to view changed files and their diffs, featuring inline review comments in the webview and a collapsible comment section for interaction, with support for resolving threads and handling outdated comments.

lib/page/issue · high confidence

New Flutter-based localization system for four languages

The app now uses a new Flutter \flutter\_localizations\-based system for internationalization, replacing the previous implementation. This adds support for English, Japanese, Korean, and Chinese (Simplified) across the entire application, including UI strings for login, user profiles, repository details, issues, and discussions. A new \LocalizationExtension\ is provided to simplify accessing localizations in widgets.

lib/common/localization · high confidence

New GSYListState mixin for standardized list behavior

A new GSYListState mixin has been added to lib/widget/state/gsy\_list\_state.dart, providing a reusable state management pattern for pull-to-refresh and infinite-scroll lists. This mixin handles loading states, pagination logic, and data synchronization with the GSYPullLoadWidgetControl, allowing list widgets to automatically manage refresh indicators and load-more triggers while keeping the UI state consistent.

lib/widget/state · high confidence

New adaptive navigation shell and responsive layout infrastructure

This change introduces the core infrastructure for adaptive navigation and responsive layouts. It adds \gsy\_responsive.dart\ to define Material 3-aligned breakpoints (compact, medium, expanded) and window size helpers, and \gsy\_style.dart\ to centralize color and text style constants. The primary addition is \gsy\_adaptive\_shell.dart\, which implements a \GSYAdaptiveNavigationDelegate\ interface to decouple navigation logic from specific UI frameworks, allowing the app to switch between NavigationRail and other scaffolds without changing page code. It also introduces a Master-Detail navigation pattern for large screens, where detail pages are pushed to a side panel instead of replacing the master view, and provides utilities to constrain list widths and adapt user profile stats layouts across different window sizes.

lib/common/style · high confidence

New debug tools for inspecting network traffic and device info

The debug page now includes a dedicated data inspection view that displays HTTP responses, requests, and errors captured by the application's logging interceptor, allowing users to tap entries to view formatted JSON details or long-press to copy data. Additionally, a debug label overlay displays the current platform, SDK version, and app version, which can be double-tapped (after a long-press) to navigate to the new data inspection page.

lib/page/debug · high confidence

New home drawer widget with Riverpod integration and user feedback features

A new HomeDrawer widget has been added to the home page, providing a side navigation menu that displays user profile information (avatar, login, email) and offers actions such as submitting feedback via an issue request, viewing history, accessing user profile info, and changing the app theme or language. The widget integrates both Redux (for user state) and Riverpod (for theme and vibration settings), supporting a modernized state management approach while maintaining compatibility with existing localization and styling systems.

lib/page/home/widget · high confidence

New notification page with client-side filtering and swipe actions

Introduces the new NotifyPage component, enabling users to filter notifications by repository and reason using client-side logic with an AND semantic, and interact with items via a slide-out panel offering mark-as-read, subscribe, unsubscribe, and archive actions.

lib/page/notify · high confidence

New user profile sections: contribution calendar, pinned repos, sponsors, and status

The user profile page now displays four new sections aligned with GitHub's official profile layout. The contribution calendar has been rewritten to use GraphQL data and renders a self-drawn heatmap grid with tap-to-reveal tooltips. Pinned repositories are now shown as compact horizontal cards with language, star, and fork counts. A sponsors block displays sponsor avatars with a total count, and a status chip shows the user's emoji, message, and busy indicator.

lib/page/user/widget · high confidence

New utility library for code, markdown, and event handling

This change introduces a new set of utility classes in lib/common/utils to support recent feature work. CodeUtils provides static JSON encoding/decoding helpers for isolate compute calls. CommentMarkdown introduces a secure, XSS-resistant Markdown-to-HTML renderer for PR/Issue comments, specifically handling fenced code blocks and autolinks while stripping raw HTML. EventUtils centralizes the translation of GitHub Events API actions into localized strings and adds debug-only telemetry for unknown event types. HtmlUtils updates the diff viewer's HTML generation to support theme-aware syntax highlighting (Atom One Dark for dark mode, GitHub for light mode) and mobile-friendly scrolling. NavigatorUtils refactors navigation for repository, issue, and discussion details to use a Master-Detail pattern on large screens, ensuring proper stack management when crossing breakpoints. EmojiShortcodeMap adds a lightweight mapping for GitHub status and discussion category emojis.

lib/common/utils · high confidence

Project initialization with Flutter 3.47.2 and comprehensive AI collaboration guidelines

The repository has been initialized with a new project structure, pinning the Flutter SDK version to 3.47.2 via \.fvmrc\ and configuring \.gitattributes\ to enforce LF line endings for XML, Gradle, Dart, and Markdown files. A new \AGENTS.md\ document establishes strict collaboration rules for AI agents, mandating the use of \mcp\_dart\ for runtime smoke testing and prohibiting the use of \flutter install\ to prevent user data loss. Additionally, \analysis\_options.yaml\ has been updated to enable Dart 3.13 primary constructor lints, and \.gitignore\ has been expanded to exclude debug artifacts and local configuration files.

(repo-wide) · high confidence

The search interface has been expanded to include four distinct tabs: repositories, users, issues and pull requests, and code. This allows users to filter their GitHub queries by entity type, with the code search tab specifically rendering results via an embedded WebView. Additionally, the feature introduces local search history persistence, displaying recent queries as chips for quick re-searching and offering a confirmation dialog to clear the history.

lib/page/search · high confidence

User profile page now displays pinned repositories, contribution calendar, sponsors, and status chip

The user profile page now renders several additional sections: pinned repositories, a contribution calendar, a sponsors block, and a user status chip. These features are powered by new Riverpod providers that fetch data via GraphQL, and the profile header height has been adjusted to 245 pixels to properly display longer bios.

lib/page/user · high confidence

Removals

Removed unused Bezier curve implementation

The file lib/widget/anima/curves\_bezier.dart, which previously contained a commented-out CurveBezier class, has been removed. This eliminates dead code from the animation library, ensuring that unused Bezier curve logic is no longer present in the codebase.

lib/widget/anima · high confidence

Behavioural changes

Added animated and no-animation route builders for search page transitions

The router module now includes a new \anima\_route.dart\ file defining \SizeRoute\ and \NoAnimationRoute\ classes. \SizeRoute\ provides a fade-in animation using \SizeTransition\ for page entries, while \NoAnimationRoute\ offers a static transition with no visual effect. These custom \PageRouteBuilder\ implementations allow the application to control navigation animations, specifically supporting the addition of opening animations for the search page.

lib/common/router · high confidence

App initialization refactored with Riverpod, adaptive navigation, and error handling

The application entry point has been restructured to use a new \FlutterReduxApp\ root widget that integrates both Redux and Riverpod for state management, alongside a new \LocalStorage\ utility for shared preferences. The app now supports adaptive shell navigation that preserves stack state across breakpoints, multi-language localization with locale fallback, and a grayscale app mode. Error handling is improved with a custom \ErrorPage\ and structured logging via \printError\, while \main.dart\ and \main\_prod.dart\ initialize Rive and enable gesture resampling for smoother rendering.

lib · high confidence

Centralized app settings via new Riverpod state providers

The lib/provider directory now introduces a new app\_state\_provider.dart (and its generated counterpart) that consolidates core application settings—specifically vibration feedback, large-screen/adaptive navigation preferences, greyscale mode, locale, and theme—into a unified Riverpod state management layer. This change provides a single source of truth for these UI and accessibility preferences, ensuring they are consistently managed and persisted across the application.

lib/provider · high confidence

Dynamic feed deduplicates events on load-more and groups consecutive same-actor events

The Dynamic page now prevents duplicate event cards from appearing when pulling to load more by filtering incoming events based on their unique IDs, ensuring that only new events are appended to the list. Additionally, consecutive events from the same actor are collapsed into a single group card, improving readability and reducing visual clutter in the feed.

lib/page/dynamic · high confidence

Home page navigation and interaction updates

The home page now handles the system back button more intelligently in adaptive layouts: when a detail view (like a repository page) is open, pressing back closes that detail view instead of exiting the app entirely, while single-pane mode retains the previous behavior of minimizing to the home screen. Additionally, double-tapping any of the three main tabs (Dynamic, Trend, or My) now scrolls that specific page's content to the top, and the search icon in the header has been replaced with a Lottie animation.

lib/page/home · high confidence

Introduction of EventBus and fix for HttpErrorEvent null-safety

The \lib/common/event\ module now provides a decoupled event system via a new \EventBus\ class, which exposes a singleton instance through \index.dart\ for broadcasting and subscribing to events using Dart Streams. Additionally, the \HttpErrorEvent\ class has been updated to make its \message\ field nullable (\String?\), resolving a crash that occurred when Dio 5+ returned null messages for certain network errors (e.g., socket or handshake exceptions), which previously caused unhandled null-subtype exceptions and left the UI in a loading state.

lib/common/event · high confidence

Issue and PR detail UI aligned with GitHub official design

The issue and pull request detail pages now feature a redesigned header and timeline that closely mirror the GitHub web interface. The header displays PR-specific states (merged, draft) with distinct colors, along with labels, assignees, and milestones. The timeline has been expanded to recognize and visually render a wider range of events, including code review statuses (approved, changes requested), Copilot work events, and merge queue actions, with unknown events logged for debugging. Additionally, a new reactions bar allows users to toggle emoji reactions on issues and comments, matching GitHub's interaction model.

lib/page/issue/widget · high confidence

Login page now supports OAuth and Personal Access Token authentication

The login interface has been updated to replace the deprecated password-based login with two supported methods: entering a Personal Access Token (PAT) directly or using OAuth via an in-app webview. The new LoginPage widget presents two buttons for these options, while the accompanying LoginWebView handles the OAuth flow by intercepting the authorization callback to extract the access code. This change aligns with GitHub's removal of basic-auth password API support.

lib/page/login · high confidence

Markdown rendering improvements: touchable code blocks, private image support, and HTML/Markdown syntax fixes

The markdown widget now handles several rendering edge cases that previously broke content display. Code blocks are no longer blocked by internal scrollbars, allowing users to scroll the main page even when their finger is over a code block. Images hosted on GitHub's private user image CDN now load correctly, and broken images show a clear placeholder instead of failing silently. Additionally, the widget now correctly renders nested image links (images inside links) and inline HTML tags like \<a\> and \<img\> by converting them to standard Markdown syntax, preventing them from appearing as raw text. These changes ensure that GitHub Discussions and other markdown content are displayed accurately and interactively.

lib/widget/markdown · high confidence

Network layer refactoring and GitHub API search fix

The shared network layer in lib/common/net has been restructured to improve reliability and correctness. A new HttpManager class centralizes Dio configuration and interceptors, adding a broad catch-all for non-Dio exceptions (such as platform channel errors) to prevent UI loading states from hanging. The address.dart module now implements a specialized query encoder for GitHub search, correctly preserving special characters like '+' and '\#' to fix previous encoding bugs that caused empty search results. Additionally, the authenticated user's repository list now correctly uses the /user/repos endpoint with affiliation=owner to ensure private repositories are visible, and new endpoints are defined to support PR file diffs and line-level review comments.

lib/common/net · high confidence

Redux state management restructured with improved login error handling and OAuth support

The Redux state management layer in lib/redux has been reorganized into new files (gsy\_state.dart, login\_redux.dart, user\_redux.dart) and includes custom middleware infrastructure (epic\_middleware.dart, epic.dart, etc.). This change introduces specific behavioral improvements for login: error messages are now categorized by status code (401/403 for auth failure, network codes for connectivity issues) to prevent misleading user feedback, and the login flow is protected against infinite loading dialogs by ensuring the UI is always updated even if underlying network calls throw unexpected exceptions. Additionally, the state structure and middleware now support OAuth and token-based login flows via new epics (oauthEpic, tokenLoginEpic).

lib/redux · high confidence

Refactor repository detail state management and network layer

The repository detail page now uses a new \ReposDetailProvider\ to manage UI state, introducing a safeguard that prevents \notifyListeners\ calls after the provider is disposed to avoid runtime errors. It also preserves the user's manual branch selection, preventing the default branch from silently overwriting the user's choice. Additionally, a new \ReposNetWorkProvider\ has been introduced to centralize network requests for repository details, branches, issues, and labels, separating network logic from the UI state provider.

lib/page/repos/provider · high confidence

Refresh widget modernized with Rive animations and adaptive layout support

The pull-to-refresh and load-more widgets have been updated to use the Rive animation library (replacing the retired Flare runtime) for smoother, vector-based pull animations. The layout logic now uses LayoutBuilder to correctly calculate available height, ensuring the empty state and list content adapt properly across rotation, split-screen, and foldable devices. Additionally, a custom bouncing scroll physics implementation has been added to provide more natural and responsive scrolling behavior during pull-to-refresh interactions.

lib/widget/pull · high confidence

Repository data providers migrated to null safety and enhanced issue caching

All repository database providers in this location (including ReadHistory, RepositoryCommits, RepositoryDetail, RepositoryIssue, RepositoryFork, RepositoryStar, RepositoryWatcher, and TrendRepository) have been updated to support Dart null safety, replacing non-nullable types with nullable counterparts (e.g., String?) and updating constructors. Additionally, the RepositoryIssue provider has been upgraded to version 2 of its cache schema: it now includes sort, direction, and labels columns to ensure cached issue lists are correctly invalidated when filter criteria change, with a runtime migration logic to safely update existing databases.

lib/db/provider/repos · high confidence

Repository detail page restructured into modular tabs with adaptive layout

The repository detail view has been refactored from a single monolithic page into a tabbed interface consisting of separate, reusable components for Info, Readme, Issues, Discussions, and Files. This change introduces dedicated pages (e.g., \RepositoryDetailIssuePage\, \RepositoryDetailFileListPage\) that are now managed by the main \RepositoryDetailPage\ via a \GSYTabBarWidget\. The Info tab now supports grouped event streams using \EventGroupIndex\ to optimize performance for long lists, while the Readme and File List tabs have been updated to use \GSYAdaptiveNavigation.wrapListChild\ to constrain content width on larger screens. Additionally, the Issue tab now includes a filter bottom sheet for sorting and label selection, and the Discussion tab has been added as a new entry point for repositories that support it.

lib/page/repos · high confidence

Search UI overhaul: new Code tab, localized filters, and URL encoding fix

The search interface has been significantly updated with a new Code search tab, which displays file-level results (name, path, repository) rather than code snippets. The search drawer now dynamically adjusts its filter options based on the active tab: sorting options are hidden for Code searches (as GitHub only supports relevance), and language filters are hidden for User searches. Additionally, filter labels are now fully localized via the app's translation system, and a critical bug causing double-encoding of GitHub advanced search modifiers (like +, /, \#) in the URL has been fixed by ensuring raw values are passed correctly to the URI encoder.

lib/page/search/widget · high confidence

Smoke testing workflow shifts from Android ADB coordinates to Dart VM Service evaluation

The \tool/ai/smoke\ directory has been refactored to standardize on \mcp\_dart\ (Dart VM Service) for triggering navigation and verifying UI state, replacing the previous reliance on Android-specific ADB coordinate scripts (\.ps1\/\.sh\). The new workflow uses \vm\_service evaluate\ to invoke debug-only top-level smoke entry points (e.g., \gsySmokeGoIssueDetail\) and \widget\_inspector\ to verify widget trees, ensuring cross-platform compatibility (iOS/Android) and resilience to UI layout changes. The directory now contains structured Markdown path descriptions for specific scenarios (PR timeline, home dynamic, discussions) and PowerShell utilities (\vm\_rpc.ps1\, \vm\_eval.ps1\) to facilitate these VM Service interactions.

tool/ai/smoke · high confidence

Structured logging and semantic error handling for repositories

The repository layer now uses a centralized logger (Talker) with structured error reporting, allowing network and authentication failures to be distinguished by HTTP status code (e.g., 401 vs. network errors) rather than generic messages. A new \DataResult\ model carries these status codes, enabling more precise user-facing error messages. Additionally, a unified toast utility and search history repository have been added to support consistent UI feedback and local search history management.

lib/common/repositories · high confidence

The Trend section now includes a dedicated Trend User page that fetches and displays trending developers from China via GraphQL, featuring pull-to-refresh, infinite scroll, and specific empty-state handling to prevent blank screens during loading or when no data is returned. The main Trend page has been updated to support adaptive navigation: on large or foldable screens, tapping a repository opens the detail view in a side panel (master-detail) rather than pushing a full-screen overlay, while smaller screens retain the original fade transition. Additionally, the header filters now use distinct icons (access\_time for time, code for language) and clearer labels to disambiguate the two filter dimensions, and the entire module has been migrated to use Riverpod for state management.

lib/page/trend · high confidence

Updated Xcode scheme for Flutter framework preparation and UI testing

The iOS build scheme has been updated to include a pre-action script that prepares the Flutter framework before building, ensuring the environment is correctly set up. Additionally, the scheme now explicitly includes the RunnerUITests target in both the build and test actions, enabling UI tests to run alongside the main application build. The scheme version has also been bumped to 1510, reflecting compatibility with newer Xcode versions.

ios/Runner.xcodeproj/xcshareddata · high confidence

Updated iOS build configuration and added LLDB debugging support

The iOS build configuration has been updated to include CocoaPods support files in both Debug and Release modes, ensuring proper dependency integration. The minimum iOS version requirement has been removed from the AppFrameworkInfo.plist, allowing the project to rely on the system or pod-defined minimums. Additionally, LLDB debugging support has been enhanced by adding a helper script and initialization file in the ephemeral directory, which intercepts specific debugger events to improve debugging stability and diagnostics.

ios/Flutter · high confidence

Updated iOS workspace configuration

The iOS workspace file has been updated to reference the project using a self-location instead of a group reference, and the IDE workspace checks file has been added to ensure proper Xcode workspace state management.

ios/Runner.xcodeproj/project.xcworkspace · medium confidence

Welcome screen now plays Rive animation and initializes user state via Riverpod

The WelcomePage now renders a Rive animation (the 'birb' state machine) alongside the existing text and mole widgets, replacing previous animation implementations. Additionally, the page's user initialization logic has been updated to use Riverpod (accessing \ref\ alongside the Redux \Store\) when calling \UserRepository.initUserInfo\, ensuring the app correctly navigates to Home or Login based on the result.

lib/page · high confidence

iOS app modernized with SceneDelegate support and updated metadata

The iOS runner now supports the modern SceneDelegate lifecycle by introducing a new SceneDelegate.swift file and configuring Info.plist to use it, ensuring compatibility with iOS 13+ window management. The app bundle display name and version have been updated to 'GSYGithubAppFlutter' and '8.0.0' respectively. Additionally, the AppDelegate has been refactored to implement FlutterImplicitEngineDelegate for implicit engine initialization, and various usage description keys (e.g., camera, location, Bluetooth) along with App Transport Security settings have been added to Info.plist to comply with modern iOS privacy requirements.

ios/Runner · high confidence

iOS project migrated to CocoaPods with UIScene support

The iOS build configuration has been updated to use CocoaPods for dependency management, replacing the previous embedded Flutter and App frameworks with a Pods-based structure. This change also introduces support for the modern iOS UIScene lifecycle via a new SceneDelegate, ensuring compatibility with current iOS app lifecycle standards.

ios/Runner.xcodeproj · high confidence

iOS workspace now includes CocoaPods project

The iOS workspace configuration has been updated to reference the Pods project. This ensures that the CocoaPods dependencies are correctly integrated into the Xcode workspace, allowing the project to build and run with its managed third-party libraries.

ios/Runner.xcworkspace · high confidence

Fixes

Fix repository item overflow in master-detail layouts

The repository list item widget now correctly adapts to narrower column widths in master-detail (dual-pane) views. Previously, the star/fork/watch counts would overflow and display red/yellow error stripes because the text width was calculated based on the full screen width. The widget now uses a LayoutBuilder to determine the actual available width of the card container, ensuring the layout remains intact regardless of the parent's constraints.

lib/page/repos/widget · high confidence

Test coverage

Add iOS UI regression tests using Patrol; Added Patrol regression tests for app startup and signed-in shell; Added contract tests for pull-load widgets and Rive animation migration; Added demo application components for testing and demonstration; Added model unit tests for data parsing and robustness; Added regression test for issue timeline flash fix; Added regression tests for issue timeline merge logic; Added tests for adaptive navigation contracts and layout regression fixes; Added tests for private repository access logic; Added tests for structured logging and adaptive navigation routing; Added unit tests for DynamicBloc load-more deduplication logic; Added unit tests for comment rendering, emoji mapping, event localization, and diff injection; Added unit tests for discussion page logic; Added unit tests for smokePostFrame branch coverage; Added widget tests for tab bar navigation, user icon accessibility, and markdown rendering; Removed default Flutter widget smoke test.

Dependencies

Gradle wrapper upgraded to version 9.1.0

The Android build system now uses Gradle 9.1.0 instead of the previous version 4.1. This upgrade updates the Gradle wrapper configuration to download and use the newer distribution, which may affect build performance and compatibility with other Android build tools.

android/gradle · high confidence

Major platform and dependency upgrades (Flutter 3.47.2, AGP 9.0.1, Dart 3.13)

The app has been upgraded to Flutter 3.47.2, Android Gradle Plugin 9.0.1, Gradle 9.1.0, and Kotlin 2.2.20, with the Dart SDK constraint raised to \>=3.13.0. On Android, the build now targets SDK 35, compiles with Java/Kotlin 17, restricts native ABIs to arm64-v8a to reduce APK size, and uses the modern Gradle plugin DSL (replacing legacy variant APIs). On iOS, Swift Package Manager is explicitly enabled and pinned (e.g., CocoaAsyncSocket 7.6.5, swift-collections 1.6.0), and CocoaPods stats are disabled to improve build latency. Dart dependencies were updated across the board (e.g., dio 5.11.0, webview\_flutter 4.14.1, flutter\_inappwebview 6.2.0-beta.3, riverpod stack to 4.x, rxdart 0.28.0), and a new Patrol configuration was added for regression testing.

(dependencies) · high confidence

Housekeeping

Android project initialization and build configuration updates

The Android module has been initialized with basic project structure. The .gitignore file was updated to exclude the .cxx/ directory, and the gradlew script was made executable to ensure proper build execution.

android · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 59 → 51 (-8.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 96 → 88 (-8.1)
  • Architecture 100 → 95 (-4.6)
  • Maturity 67 → 70 (+3.4)
  • Readiness 50 → 27 (-23.2)
  • Security 56 → 72 (+16.1)
  • Accessibility 67 → 67 (+0.0)

Resolved (22)

  • ADR not followed: ADR-0004 Markdown 内嵌 HTML 前置转换策略 (docs/06-decisions/ADR-0004-markdown-内嵌HTML前置转换策略.md)
  • Change coupling: header_interceptor.dart ↔ log_interceptor.dart (lib/common/net/interceptors/header_interceptor.dart)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • LLM evaluation failed
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • …and 2 more

New (166)

  • Change coupling: dynamic_page.dart ↔ trend_page.dart (lib/page/dynamic/dynamic_page.dart)
  • Change coupling: issue_header_item.dart ↔ issue_item.dart (lib/page/issue/widget/issue_header_item.dart)
  • Change coupling: main.dart ↔ user_redux.dart (lib/main.dart)
  • Change coupling: my_page.dart ↔ person_page.dart (lib/page/my_page.dart)
  • ClassTooLong: EventUtils (lib/common/utils/event_utils.dart)
  • ClassTooLong: IssueRepository (lib/common/repositories/issue_repository.dart)
  • ClassTooLong: ReposRepository (lib/common/repositories/repos_repository.dart)
  • ClassTooLong: UserRepository (lib/common/repositories/user_repository.dart)
  • ClassTooLong: _DiscussionDetailPageState (lib/page/discussion/discussion_detail_page.dart)
  • ClassTooLong: _IssueDetailPageState (lib/page/issue/issue_detail_page.dart)
  • ClassTooLong: _NotifyPageState (lib/page/notify/notify_page.dart)
  • CommonUtils.getNewsTimeStr (cognitive 21) (lib/common/utils/common_utils.dart)
  • CommonUtils.getNewsTimeStr (cyclomatic 17) (lib/common/utils/common_utils.dart)
  • CupertinoSliverRefreshControlState.transitionNextState (cognitive 44) (lib/widget/pull/gsy_refresh_sliver.dart)
  • CupertinoSliverRefreshControlState.transitionNextState (cyclomatic 23) (lib/widget/pull/gsy_refresh_sliver.dart)
  • DartSyntaxHighlighter._generateSpans (cognitive 90) (lib/widget/markdown/syntax_high_lighter.dart)
  • DartSyntaxHighlighter._generateSpans (cyclomatic 32) (lib/widget/markdown/syntax_high_lighter.dart)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • DiscussionListPageState._ensureCategoriesLoaded (cognitive 18) (lib/page/discussion/discussion_list_page.dart)
  • Documentation: no installation or build instructions (README.md)
  • …and 146 more

Changes since last survey

  • 56 commits — 37 feature/other, 19 fixes

By area

  • lib/common — 12 commits
  • (root) — 8 commits
  • tool/ai — 8 commits
  • lib/page — 6 commits
  • lib/model — 5 commits
  • lib/widget — 5 commits
  • docs/03-runbooks — 4 commits
  • lib/app.dart — 4 commits
  • android/app — 1 commit
  • ios/Runner.xcodeproj — 1 commit
  • static/file — 1 commit
  • test/model — 1 commit

Notable commits

  • fix: chore(dart313): enable unnecessary_type_name_in_constructor and apply dart fix
  • fix: fix(adaptive): shellDetail 跨断点迁移保栈 + 修复动态点击卡死 & Search 月牙形残留
  • fix: fix(adaptive): 收紧 Master-Detail 契约 + 修复 ReposDetailProvider disposed 后 notify + tabbar dispose 误清栈
  • fix: fix(event_group): 用 AutomaticKeepAlive 保留跨页展开态 (P0-1)
  • fix: fix(logger): printLog 接受可选 StackTrace 并把 issue_repository 三处 catch 合并到单次调用
  • fix: fix(logger): 引入 printError 结构化异常入口 + 治 main.dart 重复上报
  • fix: fix(logger): 补齐 main / login_redux / api 三处遗留的 printLog 双段写法
  • fix: fix(models): M3/M4/M5 放宽契约边界 + 补齐四条边界单测
  • fix: fix(pr-review-thread): 3 处 catch(_) 改成打 stack + DataResult.code=NETWORK_ERROR
  • fix: fix(pr-review-thread): databaseId 增加 isFinite 守约兜住 NaN/Infinity
  • fix: fix(search-user-ql): fromMap 内部 dynamic 直塞收敛到 as num? / as String? 范式 + 类型防护契约测试
  • fix: fix(smoke): reviewer 复审 M1/M2 修补 —— open_pr_timeline 降级 A 术语订正 + _smokePostFrame idle 分支异步错误闭环
  • fix: fix(smoke): reviewer 复审 R2/R3/R5/R7 收尾 —— _smokePostFrame idle 分支 + 术语订正 + errata 挂账
  • fix: fix(trend): expanded 下 China User Trend 分流到右列 + 空态兜底 + GraphQL 诊断日志
  • fix: fix(user): show owned private repositories
  • fix: fix(user-icon): SizedBox tight 约束 button 外壳,根除 RenderFlex overflow
  • fix: fix(user-icon): minTapTargetSize 默认改回 null,补齐 4 条布局占位守约测试
  • fix: fix(user-icon): 引入 minTapTargetSize 把命中区与视觉尺寸解耦,恢复 48dp 无障碍下限
  • fix: fix(user-icon): 默认 48dp 守无障碍红线 + 12 处稠密位 caller 显式 opt-out
  • change: Change Star History Chart link in README
  • …and 36 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

CarGuo/gsy_github_app_flutter was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 06e1a1f58e03b0ac6ce2795d3398b80641830954 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-821afab8930d.