|
17 | 17 | ## File Structure |
18 | 18 |
|
19 | 19 | **Connections (the seam):** |
| 20 | + |
20 | 21 | - Create `src/RustPlusBot.Features.Connections/Listening/TeamInfoSnapshot.cs` — boundary DTOs `TeamInfoSnapshot` + `TeamMemberSnapshot`. |
21 | 22 | - Modify `src/RustPlusBot.Features.Connections/Listening/IRustServerQuery.cs` — add `GetTeamInfoAsync` (public). |
22 | 23 | - Modify `src/RustPlusBot.Features.Connections/Listening/IRustServerConnection.cs` — add `GetTeamInfoAsync` (internal). |
23 | 24 | - Modify `src/RustPlusBot.Features.Connections/Listening/RustPlusSocketSource.cs` — implement on both `RejectedConnection` and `RustPlusServerConnection`. |
24 | 25 | - Modify `src/RustPlusBot.Features.Connections/Supervisor/ConnectionSupervisor.cs` — implement `IRustServerQuery.GetTeamInfoAsync`. |
25 | 26 |
|
26 | 27 | **Commands (helpers + handlers):** |
| 28 | + |
27 | 29 | - Create `src/RustPlusBot.Features.Commands/Formatting/Distance.cs` — pure distance helper. |
28 | 30 | - Create `src/RustPlusBot.Features.Commands/Formatting/TeamMemberFilter.cs` — shared partial name match. |
29 | 31 | - Create `src/RustPlusBot.Features.Commands/Handlers/OnlineCommandHandler.cs` |
|
36 | 38 | - Modify `src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs` — register the six handlers. |
37 | 39 |
|
38 | 40 | **Tests / fakes:** |
| 41 | + |
39 | 42 | - Modify `tests/RustPlusBot.Features.Connections.Tests/Fakes/FakeRustSocketSource.cs` — add `TeamResult` + `GetTeamInfoAsync`. |
40 | 43 | - Modify `tests/RustPlusBot.Features.Connections.Tests/ServerQueryTests.cs` — supervisor `GetTeamInfoAsync` coverage. |
41 | 44 | - Create `tests/RustPlusBot.Features.Commands.Tests/Formatting/DistanceTests.cs` |
|
47 | 50 | ## Task 1: Boundary DTOs (`TeamInfoSnapshot`, `TeamMemberSnapshot`) |
48 | 51 |
|
49 | 52 | **Files:** |
| 53 | + |
50 | 54 | - Create: `src/RustPlusBot.Features.Connections/Listening/TeamInfoSnapshot.cs` |
51 | 55 |
|
52 | 56 | - [ ] **Step 1: Create the DTO file** |
@@ -96,6 +100,7 @@ git commit -m "feat(connections): add TeamInfoSnapshot/TeamMemberSnapshot DTOs" |
96 | 100 | ## Task 2: Extend the seam interfaces |
97 | 101 |
|
98 | 102 | **Files:** |
| 103 | + |
99 | 104 | - Modify: `src/RustPlusBot.Features.Connections/Listening/IRustServerQuery.cs` |
100 | 105 | - Modify: `src/RustPlusBot.Features.Connections/Listening/IRustServerConnection.cs` |
101 | 106 |
|
@@ -141,6 +146,7 @@ git commit -m "feat(connections): add GetTeamInfoAsync to query/connection seams |
141 | 146 | ## Task 3: Implement `GetTeamInfoAsync` on `RustPlusSocketSource` (untested shim) |
142 | 147 |
|
143 | 148 | **Files:** |
| 149 | + |
144 | 150 | - Modify: `src/RustPlusBot.Features.Connections/Listening/RustPlusSocketSource.cs` |
145 | 151 |
|
146 | 152 | This is the integration shim — by design it has no unit tests. Mapping verified against the real 2.0.0-beta.1 DLL: `RustPlus.GetTeamInfoAsync(CancellationToken)` returns `Task<Response<TeamInfo?>>`; `TeamInfo.Members` is `IEnumerable<MemberInfo>?`; each `MemberInfo` has `SteamId`/`Name?`/`X`/`Y`/`IsOnline`/`IsAlive`/`LastSpawnTime` (DateTime, UTC)/`LastDeathTime` (DateTime, UTC). |
@@ -221,6 +227,7 @@ git commit -m "feat(connections): map GetTeamInfoAsync in RustPlusSocketSource s |
221 | 227 | ## Task 4: Implement `GetTeamInfoAsync` on `ConnectionSupervisor` |
222 | 228 |
|
223 | 229 | **Files:** |
| 230 | + |
224 | 231 | - Modify: `src/RustPlusBot.Features.Connections/Supervisor/ConnectionSupervisor.cs` |
225 | 232 | - Test: `tests/RustPlusBot.Features.Connections.Tests/Fakes/FakeRustSocketSource.cs` |
226 | 233 | - Test: `tests/RustPlusBot.Features.Connections.Tests/ServerQueryTests.cs` |
@@ -326,6 +333,7 @@ git commit -m "feat(connections): implement supervisor GetTeamInfoAsync over liv |
326 | 333 | ## Task 5: `Distance` helper |
327 | 334 |
|
328 | 335 | **Files:** |
| 336 | + |
329 | 337 | - Create: `src/RustPlusBot.Features.Commands/Formatting/Distance.cs` |
330 | 338 | - Test: `tests/RustPlusBot.Features.Commands.Tests/Formatting/DistanceTests.cs` |
331 | 339 |
|
@@ -404,6 +412,7 @@ git commit -m "feat(commands): add Distance helper for !prox" |
404 | 412 | ## Task 6: `TeamMemberFilter` helper (shared partial name match) |
405 | 413 |
|
406 | 414 | **Files:** |
| 415 | + |
407 | 416 | - Create: `src/RustPlusBot.Features.Commands/Formatting/TeamMemberFilter.cs` |
408 | 417 | - Test: `tests/RustPlusBot.Features.Commands.Tests/Formatting/TeamMemberFilterTests.cs` |
409 | 418 |
|
@@ -510,6 +519,7 @@ git commit -m "feat(commands): add TeamMemberFilter for partial name matching" |
510 | 519 | ## Task 7: Localization keys |
511 | 520 |
|
512 | 521 | **Files:** |
| 522 | + |
513 | 523 | - Modify: `src/RustPlusBot.Features.Commands/Localization/CommandLocalizationCatalog.cs` |
514 | 524 |
|
515 | 525 | All six handlers depend on these keys. Add them now so handler tests can assert exact strings. |
@@ -573,6 +583,7 @@ git commit -m "feat(commands): add EN/FR strings for team-intel commands" |
573 | 583 | ## Task 8: `!online` and `!offline` handlers |
574 | 584 |
|
575 | 585 | **Files:** |
| 586 | + |
576 | 587 | - Create: `src/RustPlusBot.Features.Commands/Handlers/OnlineCommandHandler.cs` |
577 | 588 | - Create: `src/RustPlusBot.Features.Commands/Handlers/OfflineCommandHandler.cs` |
578 | 589 | - Test: `tests/RustPlusBot.Features.Commands.Tests/Handlers/TeamIntelHandlersTests.cs` |
@@ -766,6 +777,7 @@ git commit -m "feat(commands): add !online and !offline handlers" |
766 | 777 | ## Task 9: `!team` and `!steamid` handlers |
767 | 778 |
|
768 | 779 | **Files:** |
| 780 | + |
769 | 781 | - Create: `src/RustPlusBot.Features.Commands/Handlers/TeamCommandHandler.cs` |
770 | 782 | - Create: `src/RustPlusBot.Features.Commands/Handlers/SteamIdCommandHandler.cs` |
771 | 783 | - Test: `tests/RustPlusBot.Features.Commands.Tests/Handlers/TeamIntelHandlersTests.cs` |
@@ -946,6 +958,7 @@ git commit -m "feat(commands): add !team and !steamid handlers" |
946 | 958 | ## Task 10: `!alive` handler |
947 | 959 |
|
948 | 960 | **Files:** |
| 961 | + |
949 | 962 | - Create: `src/RustPlusBot.Features.Commands/Handlers/AliveCommandHandler.cs` |
950 | 963 | - Test: `tests/RustPlusBot.Features.Commands.Tests/Handlers/TeamIntelHandlersTests.cs` |
951 | 964 |
|
@@ -1064,6 +1077,7 @@ git commit -m "feat(commands): add !alive handler with per-member survival times |
1064 | 1077 | ## Task 11: `!prox` handler |
1065 | 1078 |
|
1066 | 1079 | **Files:** |
| 1080 | + |
1067 | 1081 | - Create: `src/RustPlusBot.Features.Commands/Handlers/ProxCommandHandler.cs` |
1068 | 1082 | - Test: `tests/RustPlusBot.Features.Commands.Tests/Handlers/TeamIntelHandlersTests.cs` |
1069 | 1083 |
|
@@ -1206,6 +1220,7 @@ git commit -m "feat(commands): add !prox handler with caller-relative distances" |
1206 | 1220 | ## Task 12: Register the six handlers |
1207 | 1221 |
|
1208 | 1222 | **Files:** |
| 1223 | + |
1209 | 1224 | - Modify: `src/RustPlusBot.Features.Commands/CommandServiceCollectionExtensions.cs` |
1210 | 1225 | - Test: `tests/RustPlusBot.Features.Commands.Tests/CommandRegistrationTests.cs` (verify, may already assert resolvability) |
1211 | 1226 |
|
@@ -1306,6 +1321,7 @@ git commit -m "style: apply jb ReformatAndReorder for team-intel changes" |
1306 | 1321 | ## Task 14: Update the feature catalog |
1307 | 1322 |
|
1308 | 1323 | **Files:** |
| 1324 | + |
1309 | 1325 | - Modify: `docs/product/feature-catalog.md` (TRACKED — normal `git add`, no `-f`). |
1310 | 1326 |
|
1311 | 1327 | - [ ] **Step 1: Flip the shipped rows to Done** |
|
0 commit comments