FN-7453: add GitLab enablement controls
Add a settings-controlled GitLab enablement path while preserving saved GitLab configuration.
- Add project and global GitLab enable settings with collapsible Settings UI for URL and token controls.
- Gate GitLab auth, import loading, and import actions when GitLab integration is disabled.
- Preserve global GitLab values separately during global settings saves and document the new behavior.
- Cover enablement resolution, settings save behavior, disabled import UI, and GitLab route/auth gating with tests.
Files changed:
.changeset/fn-7453-gitlab-enable-disclosure.md | 7 ++
docs/dashboard-guide.md | 7 ++
docs/gitlab-parity-inventory.md | 1 +
docs/settings-reference.md | 4 ++
docs/task-management.md | 6 +-
packages/core/src/__tests__/gitlab-config.test.ts | 17 ++++-
.../core/src/__tests__/settings-parity.test.ts | 18 +++--
packages/core/src/gitlab-config.ts | 15 ++++-
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 2 +
packages/core/src/types.ts | 5 ++
.../app/__tests__/settings-save-split.test.ts | 20 +++---
.../dashboard/app/components/GitHubImportModal.tsx | 43 +++++++++---
.../dashboard/app/components/SettingsModal.css | 77 +++++++++++++++++++++
.../dashboard/app/components/SettingsModal.tsx | 34 ++++++++-
.../__tests__/GitHubImportModal.test.tsx | 19 ++++++
.../__tests__/SettingsModal.general.test.tsx | 78 ++++++++++++++++++++++
.../SettingsModal.scheduling-merge.test.tsx | 7 +-
.../app/components/settings/save-split.ts | 5 +-
.../settings/sections/GeneralSection.tsx | 36 ++++++----
.../settings/sections/GlobalGeneralSection.tsx | 71 ++++++++++++--------
.../components/settings/sections/MergeSection.tsx | 44 +++++++-----
.../dashboard/src/__tests__/gitlab-auth.test.ts | 20 ++++++
.../dashboard/src/__tests__/routes-gitlab.test.ts | 11 +++
packages/dashboard/src/gitlab-auth.ts | 11 ++-
25 files changed, 458 insertions(+), 102 deletions(-)
Fusion-Task-Id: FN-7453
Fusion-Task-Lineage: 81fbd39d-675f-49d6-8d13-b7fcb4d25658
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>