diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0aabca1..fc58994 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,12 +22,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- with:
- submodules: recursive
-
- # TEMPORARY: Terminal.Gui submodule's nuget.config breaks restore — remove until PR #4234 is merged
- - name: Remove submodule NuGet config
- run: rm -f src/Terminal.Gui/nuget.config
- name: Setup .NET 10
uses: actions/setup-dotnet@v4
@@ -35,7 +29,7 @@ jobs:
dotnet-version: '10.0.x'
- name: Check formatting
- run: dotnet format src/EchoHub.slnx --verify-no-changes --verbosity diagnostic --exclude src/Terminal.Gui/
+ run: dotnet format src/EchoHub.slnx --verify-no-changes --verbosity diagnostic
build-and-test:
name: Build & Test
@@ -44,11 +38,6 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- submodules: recursive
-
- # TEMPORARY: Terminal.Gui submodule's nuget.config breaks restore — remove until PR #4234 is merged
- - name: Remove submodule NuGet config
- run: rm -f src/Terminal.Gui/nuget.config
- name: Check for src/ changes
id: changes
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index cbc2dde..5156116 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -16,12 +16,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- with:
- submodules: recursive
-
- # TEMPORARY: Terminal.Gui submodule's nuget.config breaks restore — remove until PR #4234 is merged
- - name: Remove submodule NuGet config
- run: rm -f src/Terminal.Gui/nuget.config
- name: Setup .NET 10
uses: actions/setup-dotnet@v4
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f8c7889..b5e8ab9 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,11 +16,6 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- submodules: recursive
-
- # TEMPORARY: Terminal.Gui submodule's nuget.config breaks restore — remove until PR #4234 is merged
- - name: Remove submodule NuGet config
- run: rm -f src/Terminal.Gui/nuget.config
- name: Check for src/ changes
id: changes
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 4803285..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "src/Terminal.Gui"]
- path = src/Terminal.Gui
- url = https://github.com/HueByte/Terminal.Gui.git
diff --git a/docs/changelog/toc.yml b/docs/changelog/toc.yml
index 1079748..7f71eca 100644
--- a/docs/changelog/toc.yml
+++ b/docs/changelog/toc.yml
@@ -1,5 +1,9 @@
- name: Overview
href: index.md
+- name: v0.2.7
+ href: v0.2.7.md
+- name: v0.2.6
+ href: v0.2.6.md
- name: v0.2.5
href: v0.2.5.md
- name: v0.2.4
diff --git a/docs/changelog/v0.2.6.md b/docs/changelog/v0.2.6.md
index 49a9919..4818c97 100644
--- a/docs/changelog/v0.2.6.md
+++ b/docs/changelog/v0.2.6.md
@@ -2,18 +2,8 @@
## Refactoring
-- Extracted `ChatMessageManager` from `MainWindow` — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity
-- Split `ChatRenderer.cs` (8 classes, 548 lines) into 7 individual files: `ChatSegment`, `ChatLine`, `ChatListSource`, `ChannelListSource`, `UserListSource`, `ChatColors`, `ColorHelper`, `RenderHelpers`
-- Extracted `ConnectionManager` from `AppOrchestrator` — connection lifecycle, authentication, SignalR event wiring, and channel tracking now in a dedicated service
-- Extracted `AvatarHelper` — deduplicated avatar upload logic previously duplicated in `/avatar` command and profile edit dialog
-- Consolidated `ProfileEditDialog.ParseHexToTrueColor` into shared `ColorHelper.ParseHexToColor`
-- Extracted `UserSession` — session state (`Username`, `Status`, `StatusMessage`) now in a dedicated class instead of scattered fields
-- Replaced 21 inline command handler lambdas with named `HandleCmd*` methods for improved readability
-- Extracted shared `CleanupConnectionAsync` to deduplicate disconnect/logout cleanup logic
-- Reorganized flat `UI/` folder (19 files) into subfolders: `Chat/`, `Dialogs/`, `ListSources/`, `Helpers/` with matching namespaces
-- Moved `AsyncRunner` from project root to `Services/` with updated namespace
-- Renamed `ColorHelper` → `HexColorHelper` to avoid namespace collision with Terminal.Gui's `ColorHelper` NuGet dependency
-- Moved `hue_icon.ico` to `Client/Assets/`, removed duplicate from Server (Server now references shared icon via relative path)
+- Add hex color parsing helper and implement custom list sources for channels and users
+- Add dialogs for connection, channel creation, profile editing, and status management
## Infrastructure
diff --git a/docs/changelog/v0.2.7.md b/docs/changelog/v0.2.7.md
new file mode 100644
index 0000000..e88bcfb
--- /dev/null
+++ b/docs/changelog/v0.2.7.md
@@ -0,0 +1,27 @@
+# v0.2.7
+
+## Refactoring
+
+- Extracted `ChatMessageManager` from `MainWindow` — message storage, formatting, and mutation logic now in a dedicated class, reducing MainWindow complexity
+- Split `ChatRenderer.cs` (8 classes, 548 lines) into 7 individual files: `ChatSegment`, `ChatLine`, `ChatListSource`, `ChannelListSource`, `UserListSource`, `ChatColors`, `ColorHelper`, `RenderHelpers`
+- Extracted `ConnectionManager` from `AppOrchestrator` — connection lifecycle, authentication, SignalR event wiring, and channel tracking now in a dedicated service
+- Extracted `AvatarHelper` — deduplicated avatar upload logic previously duplicated in `/avatar` command and profile edit dialog
+- Consolidated `ProfileEditDialog.ParseHexToTrueColor` into shared `ColorHelper.ParseHexToColor`
+- Extracted `UserSession` — session state (`Username`, `Status`, `StatusMessage`) now in a dedicated class instead of scattered fields
+- Replaced 21 inline command handler lambdas with named `HandleCmd*` methods for improved readability
+- Extracted shared `CleanupConnectionAsync` to deduplicate disconnect/logout cleanup logic
+- Reorganized flat `UI/` folder (19 files) into subfolders: `Chat/`, `Dialogs/`, `ListSources/`, `Helpers/` with matching namespaces
+- Moved `AsyncRunner` from project root to `Services/` with updated namespace
+- Renamed `ColorHelper` → `HexColorHelper` to avoid namespace collision with Terminal.Gui's `ColorHelper` NuGet dependency
+- Moved `hue_icon.ico` to `Client/Assets/`, removed duplicate from Server (Server now references shared icon via relative path)
+
+## Bug Fixes
+
+- Fix user list empty on initial connect — `FetchAndUpdateOnlineUsers` was called before `InvokeUI` set the current channel, causing an early return
+
+## Infrastructure
+
+- Switch Terminal.Gui from local fork submodule back to NuGet package (`2.0.0-develop.5039`) — transparent color PR merged upstream
+- Remove Terminal.Gui submodule, `.gitmodules`, and root `nuget.config` workaround
+- Remove `rm -f` submodule nuget.config steps and `submodules: recursive` from all 3 CI workflows (ci, docs, release)
+- Remove `--exclude src/Terminal.Gui/` from format check
diff --git a/nuget.config b/nuget.config
deleted file mode 100644
index 4e800bf..0000000
--- a/nuget.config
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 87650ee..31d2558 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -1,6 +1,6 @@
- 0.2.6
+ 0.2.7
true
$(NoWarn);CS1591
diff --git a/src/EchoHub.Client/EchoHub.Client.csproj b/src/EchoHub.Client/EchoHub.Client.csproj
index c5279c2..e455ebb 100644
--- a/src/EchoHub.Client/EchoHub.Client.csproj
+++ b/src/EchoHub.Client/EchoHub.Client.csproj
@@ -12,8 +12,7 @@
-
-
+
diff --git a/src/Terminal.Gui b/src/Terminal.Gui
deleted file mode 160000
index 0061d03..0000000
--- a/src/Terminal.Gui
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0061d03558264e0005d8c5ba53845e629ea2f8da