WIP(initial-implementation): parallel batch P2/P3/P5 — code complete, unreviewed
Snapshot of the parallel batch (Phases 2 + 3 + 5) at session pause. Solution does
NOT build cleanly yet — known cross-phase compile issues remain to be resolved
before review. See plans/initial-implementation/PLAN.md "Resume Notes" section
for the exact tomorrow-morning action list.
Phase 2 (Storage):
- Repository interfaces in Marathon.Application/Abstractions
- DateRange, ExportKind, StorageOptions in Marathon.Application/Storage
- EF Core 8 + SQLite (WAL) persistence: 7 entities + configurations + 4 repos
- Hand-written InitialCreate migration (dotnet ef blocked by parallel work)
- ClosedXML ExcelExporter with exact customer-spec wide columns
- PersistenceModule.AddMarathonPersistence DI extension
- Round-trip + export tests (cannot run yet — see cross-phase issues)
Phase 3 (Scraping):
- IOddsScraper, IBetPlacer in Marathon.Application/Abstractions
- ScrapingOptions in Marathon.Infrastructure/Configuration
- MarathonbetScraper with 4 parsers (Upcoming, Live, EventOdds, Results)
- Helpers: ServerTimeProvider, PeriodScopeMapper, OutcomeCodeMapper, MoscowDateParser
- UserAgentRotatorHandler + Polly v8 resilience pipeline
- ScrapingModule.AddMarathonScraping DI extension
- GlobalUsings.cs aliases for EventId / Configuration disambiguation
- Parser tests with trimmed HTML fixtures
- ScrapeResultsAsync interim no-op (Phase 8 will replace via watch-list polling)
Phase 5 (UI shell — killed mid-final-verify, assumed ~95%):
- Marathon.UI populated: MainLayout, App.razor, Pages (Home, Settings),
Components, Theme (MarathonTheme.cs + Tokens.cs + app.css), Resources
(SharedResource.{cs,ru.resx,en.resx}), Services (ISettingsWriter), wwwroot
- WPF host: App.xaml(.cs), MainWindow.xaml(.cs), Marathon.Hosts.WpfBlazor.csproj
with Microsoft.AspNetCore.Components.WebView.Wpf + MudBlazor + Serilog
- appsettings.json + appsettings.Development.json with all sections wired
- bUnit tests: MainLayoutTests, LocaleSwitcherTests, ThemeToggleTests,
JsonSettingsWriterTests + Support helpers
Cross-phase issues to resolve at next session:
1. Phase 2 repository classes are 'internal' — Phase 3's tests can't reference
them. Fix: add InternalsVisibleTo to Marathon.Infrastructure.csproj.
2. Phase 5: LocalizationOptions namespace ambiguity (AspNetCore vs Extensions).
3. Phase 5: WpfBlazor Serilog API mismatch.
Reviewer has NOT run on this batch. Move to Phase 4 only after build is green
and a combined parallel-batch reviewer passes.
This commit is contained in:
@@ -64,10 +64,10 @@ parameter configurable.
|
||||
|---|---|---|---|---|---|
|
||||
| Phase 0: Scraping spike | backend | ✅ Done | ⚠️ Pass with notes (Sonnet) | ⏭️ N/A (research) | ✅ 070e34b |
|
||||
| Phase 1: Solution + Domain | backend | ✅ Done | ⚠️ Pass with notes (Sonnet) | ✅ Build OK + 96/96 Domain tests | ✅ 61114ea |
|
||||
| Phase 2: Storage | backend | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
| Phase 3: Scraping | backend | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
| Phase 2: Storage | backend | 🔨 Code done, not committed | ⬜ Pending | ⏭️ Big Bang (own code 0/0) | ⬜ WIP |
|
||||
| Phase 3: Scraping | backend | 🔨 Code done, not committed | ⬜ Pending | ⏭️ Big Bang (own code 0/0) | ⬜ WIP |
|
||||
| Phase 4: Application + Workers | backend | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
| Phase 5: Host + Theme + i18n | frontend | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
| Phase 5: Host + Theme + i18n | frontend | 🔨 ~95% (killed mid-final-verify) | ⬜ Pending | ⏭️ Big Bang | ⬜ WIP |
|
||||
| Phase 6: Event browsing UI | frontend | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
| Phase 7: Anomaly detection | fullstack | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
| Phase 8: Results loader | fullstack | ⬜ Not Started | ⬜ | ⏭️ Big Bang | ⬜ |
|
||||
@@ -82,6 +82,65 @@ parameter configurable.
|
||||
- [ ] User merge approval
|
||||
- [ ] Merged to `main`
|
||||
|
||||
## Resume Notes (2026-05-05 — paused at end of parallel batch P2/P3/P5)
|
||||
|
||||
**Where we left off:**
|
||||
The parallel batch (Phases 2, 3, 5) completed code-wise. Phase 5 was killed near the
|
||||
end of its "verify build" step. All files are committed as a single WIP snapshot
|
||||
on `feature/initial-implementation` so nothing is lost. No reviewer ran on this batch
|
||||
yet, and the solution does NOT build cleanly — there are known cross-phase compile
|
||||
issues to resolve before review.
|
||||
|
||||
**Tomorrow's action list (in order):**
|
||||
|
||||
1. `git pull` (or just verify branch) — confirm we're on `feature/initial-implementation`
|
||||
at the WIP commit.
|
||||
2. Run `dotnet build Marathon.sln` to capture the current error set as a baseline.
|
||||
3. **Resolve known cross-phase compile issues:**
|
||||
- **Phase 2 ↔ Phase 3:** Phase 2's repository classes are `internal`; Phase 3's
|
||||
`Marathon.Infrastructure.Tests` references them directly. Fix: add
|
||||
`<InternalsVisibleTo Include="Marathon.Infrastructure.Tests" />` to
|
||||
`src/Marathon.Infrastructure/Marathon.Infrastructure.csproj`. (Or make the
|
||||
repos public — choose by reading the actual csproj first.)
|
||||
- **Phase 5:** `LocalizationOptions` namespace ambiguity (Microsoft.AspNetCore
|
||||
vs Microsoft.Extensions). Fix in WPF host or UI project — qualify or alias.
|
||||
- **Phase 5:** Serilog API mismatch in WPF host (likely `UseSerilog` extension
|
||||
not found because Serilog.Extensions.Hosting wasn't pulled in transitively
|
||||
via the right namespace, OR the API call site uses an older Serilog API).
|
||||
4. Once `dotnet build Marathon.sln` is green:
|
||||
- Run `dotnet test Marathon.sln` to see how many tests pass.
|
||||
- Spawn the phase-reviewer agent (Sonnet) to review the parallel batch as a
|
||||
single combined review (Phase 2 + 3 + 5 diff). Pass `git diff 144c936...HEAD`.
|
||||
- Address blocker findings; re-review until pass.
|
||||
5. After review passes, finalize with one or more clean commits (the WIP commit
|
||||
can be `git reset --soft` to base and re-committed cleanly per phase, OR left
|
||||
as-is and the review passes apply). Update PLAN.md tracking rows for P2/P3/P5
|
||||
to ✅ Done with commit hashes.
|
||||
6. Move to **Phase 4** (Application + Workers — backend, Sonnet 4.6). Phase 4
|
||||
composes the per-module DI extensions (`PersistenceModule.AddMarathonPersistence`
|
||||
and `ScrapingModule.AddMarathonScraping`) into a top-level
|
||||
`Marathon.Infrastructure/DependencyInjection.cs` and adds `BackgroundService`
|
||||
pollers (`UpcomingEventsPoller`, `LiveOddsPoller`, plus a future
|
||||
`ResultsWatchListPoller` per the Phase 8 amendment).
|
||||
|
||||
**Useful pointers:**
|
||||
|
||||
- Phase 2 implementer report: see `tasks/a56ecc5e24bd7ea43.output` (don't read —
|
||||
context-heavy; the summary is in the conversation transcript).
|
||||
- Phase 3 implementer report: agent ID `a8a537ba5721fba3d`. Same caveat.
|
||||
- Phase 5 implementer was killed; final state is the WIP commit. The agent had
|
||||
finished implementation and was about to verify build — assume code is ~95%
|
||||
complete but unreviewed.
|
||||
- All 3 phase subplans have their `## Handoff to Next Phase` sections filled.
|
||||
- Cross-phase issues already documented in the conversation by the parallel
|
||||
agents — see Phase 2 and Phase 3 reports for the specifics.
|
||||
|
||||
**Do NOT:**
|
||||
|
||||
- Reset/discard the WIP commit without first reading what's in it.
|
||||
- Skip the cross-phase fix step — Phase 4 cannot proceed against a broken build.
|
||||
- Move to Phase 4 before reviewing the P2/P3/P5 batch.
|
||||
|
||||
## Amendment Log
|
||||
|
||||
### Amendment 1 — 2026-05-05 — Phase 8 strategy change (deferred — formal approval will be requested when Phase 8 begins)
|
||||
|
||||
Reference in New Issue
Block a user