Skip to content

release: 0.1.10 - #668

Open
sjungwon03 wants to merge 196 commits into
mainfrom
dev
Open

sjungwon03 wants to merge 196 commits into
mainfrom
dev

Conversation

@sjungwon03

@sjungwon03 sjungwon03 commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Summary

Promotes dev to main for LabFox 0.1.10+12. This release includes the GitLab workflow and mobile-web parity changes integrated since 0.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 tag v0.1.10 and publishes the GitHub release. The release stops if a required job fails.

Validation

  • PR feat(app): make all features free and remove ads #667 was approved, passed the Flutter quality gate and iOS SDK validation, and was merged into dev.
  • PR docs(store): summarize 0.1.10 features #670 updated the English and Korean release notes, passed CI, and was merged into dev.
  • The free, ad-free change passed 8,592 local tests, flutter analyze, formatting, Android debug APK and release AAB builds. The debug APK declares no advertising ID permission.
  • dev contains version: 0.1.10+12 and English and Korean 0.1.10 release notes.
  • No v0.1.10 tag or existing open dev to main release 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.md and 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 per RELEASING.md.

Focused review before approval

The promotion spans many previously integrated feature PRs. Please review these areas against the main...dev diff and the relevant feature PRs before approving this release:

  • MR discussions, diff positions, suggestions, and private pending reviews: account/project/MR/version identity, publish/retry behavior, and destructive actions.
  • Package and container registries: delete confirmations, retention and immutable-tag rules, permission failures, and API parameter mapping.
  • Protected branches, tags, and environments: inherited-rule handling, role changes, approval groups, and confirmation before removal.
  • Pipeline jobs and schedules, releases and milestones, wiki, and navigation: pagination, account scope, and action refresh after mutations.
  • Free and ad-free conversion: no purchase or ad SDK startup, platform permissions, feature gates, privacy copy, and release metadata.

The store-note correction requested in the first review landed in dev through #670. The route-analytics privacy blocker was fixed with regression tests, approved, and merged into dev through #672. A later focused review found that GitLab release deletion returns 200 OK but LabFox accepted only 204; test-first fix #674 passed CI, was approved, and merged into dev. The latest review found cross-account state leakage in container repository deletion; test-first fix #676 passed CI and awaits review and merge into dev. Focused review of the remaining promotion diff is still requested before release approval.

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>
@github-actions github-actions Bot added area:api packages/gitlab_api — GitLab REST/GraphQL client area:ui Screens and feature UI area:design-system packages/design_system area:ci CI, build, release automation area:docs AGENTS.md, .agents/, README and friends area:mobile Android / iOS specific area:desktop Windows / macOS specific labels Oct 20, 2026

@sjungwon03-ai sjungwon03-ai left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review notes

Verdict: Comment

  • docs/store/release-notes.md:25 — The 0.1.10 notes 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 sjungwon03-ai left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Required changes

Verdict: Changes requested

  1. apps/labfox/lib/core/analytics/analytics.dart:81 — The new release, container-tag, and protection-detail routes embed private tag, branch, or environment names, but sanitizeRoute only masks numbers and commit parameters, so visiting /projects/42/protected_branches/customer-secret sends /projects/:id/protected_branches/customer-secret to 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 sjungwon03-ai left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Required changes

Verdict: Changes requested

  1. packages/gitlab_api/lib/src/releases/releases_api.dart:206 — ReleasesApi.delete accepts only 204, but GitLab returns 200 OK with 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 using 200 rather than only the existing mocked 204.

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 sjungwon03-ai left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Required changes

Verdict: Changes requested

  1. apps/labfox/lib/features/container_registry/presentation/controllers/container_repository_delete_controller.dart:9 — The non-auto-disposed controller retains true after scheduling deletion but neither watches the active account nor includes it in RegistryRef, 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.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:api packages/gitlab_api — GitLab REST/GraphQL client area:ci CI, build, release automation area:design-system packages/design_system area:desktop Windows / macOS specific area:docs AGENTS.md, .agents/, README and friends area:mobile Android / iOS specific area:ui Screens and feature UI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants