Repository navigation
release: 0.1.10 - #668
release: 0.1.10#668sjungwon03 wants to merge 196 commits into
Conversation
Keep group navigation inside LabFox so mobile users can move through subgroups and projects without losing their place. Match the group overview information hierarchy across narrow and wide layouts. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Surface project identity and description before the code and work areas, and keep README prominent beside navigation on wider screens. Use one responsive screen so mobile and desktop retain the same feature set. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose active and closed project milestones and restorable detail pages so users can inspect schedules and descriptions without switching to GitLab web. Keep the global milestone ID distinct from its displayed project-local iid. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose published package metadata and files through the project overview so mobile users can inspect registry contents without switching to the web. Keep the route and layout shared across screen sizes, and respect projects with the registry disabled. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(wiki): browse project wiki pages Expose the GitLab project wiki in LabFox so readers can move from a project to its documentation and follow page links without leaving the app. Preserve narrow push navigation and a wider page sidebar while respecting disabled wikis. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(scope): record mobile web parity expansion The maintainer requested all GitLab mobile-web feature areas; preserve the original 1.0 baseline while documenting this separately approved issue series. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Give project users an in-app path from container repositories to tags and digest metadata. Respect disabled registries, keep the layout responsive, and paginate read-only lists without introducing destructive actions. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Show a project's effective member access, including inherited and shared memberships, so users can find teammates and understand roles from mobile. Keep server-side search, pagination, and responsive presentation in one shared feature. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose project environments with state and search filters, pagination, and deployment details so mobile users can inspect deployment targets without leaving LabFox. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(snippets): add project snippet browsing Let users inspect project snippets and raw content inside the app. Keep pagination and file refs aligned with GitLab responses so self-hosted instances and older snippet repositories remain usable. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * fix(snippets): make empty-file detail rendering explicit Remove the nullable raw-content assertion and cover legacy snippets with no files array plus multi-file snippets. This clarifies that empty-file responses use the raw endpoint and cannot crash the detail view. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Bring project tags into the shared Flutter workflow with restorable details and an explicit creation form. Follow GitLab tag API pagination and ref semantics, including slash-safe tag names. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Surface GitLab project activity in a responsive feed with issue and merge request navigation, allowing users to inspect recent work from mobile without leaving the project. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(releases): browse project releases and assets Keep release notes and downloadable asset links inside a responsive project flow, with tag-based deep links and paginated browsing. Expose the official GitLab Releases endpoints through the shared API client. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * style(releases): format test fixtures for CI Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose inherited and project labels with usage counts in the shared Flutter app. Keep label creation explicit and validate its GitLab hex color input before sending it. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose deployment history and related pipeline, job, commit, and environment navigation so mobile users can follow a release without switching to the web. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Make scheduled CI work visible and runnable from the shared mobile and desktop workflow, without retaining schedule variable values. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose inherited and invited group access in the existing responsive member presentation so users can inspect permissions without leaving the app. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Bring group label management into the shared responsive label workflow while keeping group API requests separate from project labels. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(milestones): browse group milestones Extend the shared milestone experience to GitLab groups so users can inspect schedules across projects without switching to the web client. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * style(milestones): apply Dart formatting Keep the shared milestone screen consistent with the CI formatting gate. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose blocking and related issues in the core review flow, including links across projects using the target project ID and issue iid. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Expose push and merge permissions, code owner requirements, and inherited protection so project maintainers can inspect branch policy in LabFox. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(protected_tags): browse project protected tag rules Expose paginated protected tag rules and creation permissions so mobile users can inspect release tag policies without leaving LabFox. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * style(protected_tags): apply repository formatter Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Show deployment permissions and approval requirements from protected environments so project members can inspect release controls in the app. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* docs(parity): track mobile-web coverage and gaps Record the shipped baseline separately from a lower-bound work inventory so ongoing parity work can be scoped and measured without a misleading completion percentage. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link group protection work in review Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Reuse the protected environment UI for group deployment tiers and expose documented group-level deploy and approval rules. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(issues): edit issue title and description Expose the update operation in the shared GitLab client and issue detail flow so mobile users can correct issue content without leaving LabFox. Track the remaining work-item parity gap separately. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link issue edit review The parity tracker now points to the concrete review artifact while retaining the broader work-item gap. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(issues): manage notification subscriptions Expose GitLab issue subscribe and unsubscribe actions in the shared client and detail menu. Preserve unknown subscription state and treat idempotent 304 responses as success so the action stays reliable across self-hosted instances. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link issue subscription review Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(issues): add issue to to-do list Expose GitLab's issue to-do action from the detail menu and refresh the inbox when a new item is created. Treat the idempotent already-exists response as informative feedback rather than a failure. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link issue to-do review Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(merge_requests): add MR to to-do list Add the documented MR to-do operation and detail-menu shortcut. Refresh the inbox on new items and report GitLab's idempotent 304 as an already-existing item. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(roadmap): link MR to-do pull request Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(issues): edit issue due dates Expose due-date updates from the existing issue detail workflow so mobile users can set or clear deadlines without leaving the app. Preserve date-only values, refresh issue consumers, and surface permission failures in the dialog. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(roadmap): link issue due-date pull request Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(issues): edit issue labels Let users select existing project and inherited group labels from the issue detail view, clear all labels, and retain detailed color metadata after saving. Handle empty lists and permission failures without losing the selection. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(roadmap): link issue-label pull request Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(protected_environments): replace approval groups Let maintainers replace one approver group while keeping its record identity, approval count, membership and other protection grants. Allow only the selected display description to follow the new group and require matching authoritative confirmation after a single non-replayed request. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link approval group replacement pull request Record the concrete review artifact while keeping the approval and CI boundary explicit. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(protected_environments): edit deploy group membership Let project maintainers change an existing deployment group's explicit membership mode while preserving every other protection setting. Require full preflight, renewed confirmation after uncertainty, and authoritative read-back before reporting success. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link deploy membership review Record the review entry point for the protected environment deploy group membership slice. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(protected_environments): add deploy groups Allow a shared group to receive direct deployment access without replacing existing protection settings. Require complete preflight, explicit confirmation, and matching response/read-back evidence to prevent stale or duplicate writes. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link deploy group addition review Record the review entry point for the protected environment deployment group addition slice. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
* feat(protected_environments): remove deploy groups Allow obsolete group deployment access to be removed while retaining environment protection and every other grant. Require complete preflight, exact-name consent and matching response/read-back evidence, including for the final deploy grant. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * docs(parity): link deploy group removal review Record the review entry point for the protected environment deployment group removal slice. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Give the next agent a verified PR snapshot, validation evidence and concrete resume steps without changing the approved feature branch. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
The mobile purchase boundary and ad SDK no longer match the product distribution. Remove the local gates, billing and advertising dependencies, platform declarations and obsolete copy so every LabFox action is available without a purchase. Bump the release version so main promotion can run a new store upload. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
sjungwon03-ai
left a comment
There was a problem hiding this comment.
Review notes
Verdict: Comment
docs/store/release-notes.md:25— The0.1.10notes describe free access and ad removal but omit the newly shipped MR review and draft workflows, registry tooling, and protection-management screens; add a concise user-facing summary of the major additions before copying the notes into the stores.
Checks: Promotion CI passed formatting, analysis, app and package tests, generated-code verification, language policy, and the unsigned iOS build; local git diff --check passed. Flutter is unavailable locally. Review covered release configuration, monetization removal, selected API and review flows, and associated tests, not the complete 1,147-file promotion diff; obtain focused review of the remaining changes before treating this as release approval.
The release introduces major review and management workflows beyond the removal of subscriptions and ads. Store readers need a concise account of what this build adds before the notes are published. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
sjungwon03-ai
left a comment
There was a problem hiding this comment.
Required changes
Verdict: Changes requested
apps/labfox/lib/core/analytics/analytics.dart:81— The new release, container-tag, and protection-detail routes embed private tag, branch, or environment names, butsanitizeRouteonly masks numbers and commit parameters, so visiting/projects/42/protected_branches/customer-secretsends/projects/:id/protected_branches/customer-secretto OpenPanel; replace every dynamic route value with a route-template placeholder and add regression tests for these new routes before releasing.
Checks: All reported checks are terminal and successful or skipped; CI verified formatting, analysis, tests, generated code, language policy, and the unsigned iOS build; local git diff --check passed, but Flutter/Dart are unavailable locally. Focused review found this privacy blocker; the remaining promotion scope still needs review.
* test(analytics): reproduce private route leak The release review identified route values that can reach screen-view analytics. Pin the leak before changing route tracking. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * fix(analytics): report matched route templates Numeric-only sanitization allowed release tags and protection names into screen-view events. Use the matched router template and fail closed when it is absent or mismatched so analytics never receives a private path value. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * style(analytics): format protection route assertion Match the Dart formatter so the privacy regression suite can reach analysis and tests in CI. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
sjungwon03-ai
left a comment
There was a problem hiding this comment.
Required changes
Verdict: Changes requested
packages/gitlab_api/lib/src/releases/releases_api.dart:206—ReleasesApi.deleteaccepts only204, but GitLab returns200 OKwith the deleted release (confirmed by its official API documentation and upstream request specs), so successful deletion throws and bypasses the controller cache refresh; accept the documented success response and add API/controller regression coverage using200rather than only the existing mocked204.
Checks: All reported GitHub checks are terminal and successful or skipped, including the Flutter quality gate and iOS SDK validation; local git diff --check passed. Flutter/Dart are unavailable locally, so no local Dart tests were run. This focused review checked the analytics fix and selected review, pagination, registry, schedule, and release flows; it is not approval of the complete promotion diff.
* test(releases): reproduce 200 OK deletion response Pin the documented GitLab response and the resulting cache refresh before fixing release deletion. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * style(releases): format regression test Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * fix(releases): accept documented 200 deletion response GitLab returns the deleted release with HTTP 200. Treat it as success so release cache invalidation proceeds, while retaining 204 compatibility. Signed-off-by: sjungwon03 <sjungwon03@gmail.com> * style(releases): format no-content regression test Signed-off-by: sjungwon03 <sjungwon03@gmail.com> --------- Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
sjungwon03-ai
left a comment
There was a problem hiding this comment.
Required changes
Verdict: Changes requested
apps/labfox/lib/features/container_registry/presentation/controllers/container_repository_delete_controller.dart:9— The non-auto-disposed controller retainstrueafter scheduling deletion but neither watches the active account nor includes it inRegistryRef, so switching to another GitLab instance with the same project/repository IDs falsely labels its unrelated repository as deletion-scheduled and disables deletion and navigation; scope this state to the authenticated account/session and add a two-instance regression test.
Checks: All reported GitHub checks are terminal and successful or skipped; local git diff --check passed. Flutter/Dart are unavailable locally, so no local Flutter tests were run. The previous release-deletion response fix and its API/cache-refresh tests were inspected; this focused review also covered selected protection, registry, environment, and pending-review paths, not the entire promotion diff.
Summary
Promotes
devtomainfor LabFox0.1.10+12. This release includes the GitLab workflow and mobile-web parity changes integrated since0.1.9, plus #667, which removes LabFox subscriptions, ads, and feature gates so every supported platform provides the full app for free.Merging this pull request triggers
release.yml: it reruns formatting, analysis, and all package tests; builds the Windows installer and portable archive; uploads iOS build 12 to App Store Connect without submitting it for review; uploads Android build 12 to the Google Play internal track; then creates tagv0.1.10and publishes the GitHub release. The release stops if a required job fails.Validation
dev.dev.flutter analyze, formatting, Android debug APK and release AAB builds. The debug APK declares no advertising ID permission.devcontainsversion: 0.1.10+12and English and Korean0.1.10release notes.v0.1.10tag or existing opendevtomainrelease PR was present when this PR was opened.After the automated release
Update the App Store Connect What's New field from
docs/store/release-notes.mdand submit the build for review. Promote the Google Play internal release to production in Play Console when ready. Update store privacy and pricing declarations to reflect the removal of subscriptions and ads. The macOS store package remains manual perRELEASING.md.Focused review before approval
The promotion spans many previously integrated feature PRs. Please review these areas against the
main...devdiff and the relevant feature PRs before approving this release:The store-note correction requested in the first review landed in
devthrough #670. The route-analytics privacy blocker was fixed with regression tests, approved, and merged intodevthrough #672. A later focused review found that GitLab release deletion returns200 OKbut LabFox accepted only204; test-first fix #674 passed CI, was approved, and merged intodev. The latest review found cross-account state leakage in container repository deletion; test-first fix #676 passed CI and awaits review and merge intodev. Focused review of the remaining promotion diff is still requested before release approval.