59 lines
2.6 KiB
Markdown
59 lines
2.6 KiB
Markdown
# Progress
|
|
|
|
Last updated: 2026-03-06
|
|
|
|
## Current Status
|
|
The project is in a functional prototype stage: core feed aggregation and embedding-based grouping are implemented, but production hardening and test quality are still pending.
|
|
|
|
## Completed
|
|
- Flutter app shell with desktop platform support (macOS, Linux, Windows).
|
|
- Navigation between Home and Settings pages (`go_router`).
|
|
- Persistent settings management via `Provider` + `SharedPreferences`.
|
|
- Default catalog of business/finance feeds.
|
|
- Feed parsing for both RSS and Atom formats.
|
|
- Concurrent feed retrieval and aggregation.
|
|
- OpenRouter embeddings integration (`openai/text-embedding-3-small`).
|
|
- Relevance filtering using keyword embedding similarity.
|
|
- Event grouping by cosine similarity.
|
|
- JSON output export pipeline for raw/enriched/relevant/grouped datasets.
|
|
|
|
## In Progress / Partial
|
|
- UX for long-running pipeline execution:
|
|
- Processing runs on button tap with console logs only.
|
|
- No progress indicator, cancellation, or error surface in UI.
|
|
- Data quality controls:
|
|
- No deduplication or normalization layer before grouping.
|
|
- No source weighting/confidence scoring.
|
|
- Architecture maturation:
|
|
- Core pipeline is orchestrated in UI layer rather than dedicated service/use-case layer.
|
|
|
|
## Known Defects and Risks
|
|
- `SettingsPage` can crash when API key is empty:
|
|
- `apiKey.substring(0, 8)` is called even when key is `""`.
|
|
- Disabled feeds are still processed:
|
|
- Home page currently sends all feed URLs, not only `enabled == true`.
|
|
- `updateFeed` replaces feed object and can change derived `id`:
|
|
- If title/url changes, later operations using old id may become inconsistent.
|
|
- No guardrails for invalid/empty API key before embedding requests.
|
|
- Error handling is mostly `print`-based and non-user-visible.
|
|
|
|
## Validation Snapshot (run on 2026-03-06)
|
|
- `flutter analyze`: fails with 24 issues
|
|
- Includes 2 warnings (immutability, unused import) and multiple lint infos.
|
|
- `flutter test`: fails
|
|
- Existing test is the default counter smoke test and does not match current UI.
|
|
|
|
## Testing Coverage
|
|
- No meaningful unit tests for:
|
|
- feed parsing
|
|
- similarity calculations
|
|
- grouping behavior
|
|
- settings persistence
|
|
- No widget/integration tests for Home and Settings user flows.
|
|
|
|
## Next High-Impact Steps
|
|
1. Fix the `SettingsPage` API key crash and respect feed `enabled` flags during aggregation.
|
|
2. Replace template widget test with app-specific widget tests for navigation + settings.
|
|
3. Extract pipeline orchestration from `HomePage` into a dedicated service for testability.
|
|
4. Add structured error/reporting model surfaced in the UI.
|
|
5. Add retry/backoff and timeout handling for external requests.
|