Capture the proven backend issues (F1 topic mis-classification, over-clustering with mismatched headline/summary, missing per-story tags) plus open client/CI work in docs/BACKLOG.md, and expand scripts/create-issues.sh to file all 14 on the Gitea repo once it exists. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
Backlog
Open issues, seeding the Gitea tracker via scripts/create-issues.sh (run once the
repo exists). [client] = iOS, [backend] = the platform service on the Docker host,
[ci] = build/test.
Backend — data quality (highest priority)
- [backend] F1 stories are mis-classified into tech/finance/politics. The topic
classifier has no sport category, so F1 (with 100% F1 sources) scatters across topics.
Evidence from the live feed: "Monaco Grand Prix stewards…" →
tech, "F1 reports 35% CO2 reduction…" →finance, "McLaren launch appeal against Gasly penalty" →politics. Add asport(orf1) topic and route motorsport sources there. - [backend] Over-clustering merges unrelated articles. Stories pair a headline with a
summary about something else, e.g. an Ebola/Bunia (DR Congo) headline carried a
South-Africa summary, and a CRISPR headline carried Drakensberg/SA text. Raise the
TF-IDF similarity threshold (~0.22 → 0.30–0.40) and make the canonical
headlineandsummarycome from the same representative article. This also inflatessourceCount/crossSourceConfirmationand the signal score. - [backend] Add accurate per-story tags (topic + region). So the client can read tags (sport, uganda, east-africa, south-africa, …) instead of keyword-guessing. Unblocks moving the filter pills to server-side. Pairs with #1/#2.
- [backend] Topic-classifier coverage for the 47 feeds. Ensure science/world/tech map sensibly into the supported topics.
Backend — features
- [backend] Server-side push for breaking alerts (APNs or ntfy). Needed for breaking-story notifications while the app is fully closed; the backend already computes the stories. Client currently does local notifications + background refresh only.
Client
- [client] Move interest filters server-side once tags exist (#3). Replace the client-side keyword filters (F1 / Uganda / East Africa / South Africa) — which only see loaded stories and match the headline — with backend tag filtering for full coverage.
- [client] SSID-based trusted networks. Pin trusted Wi-Fi by name. Needs the Access WiFi Information entitlement (real device + paid account); no-ops in the simulator. Currently approximated by LAN reachability.
- [client] Optional in-app WireGuard tunnel. NetworkExtension packet-tunnel so Jarvis can bring up a WireGuard tunnel itself (WireGuard/Netmaker configs only). Entitlement + real device. Deferred.
- [client] App icon + launch assets.
AppIconis an empty placeholder. - [client] Flesh out Latest / Search tabs. (Saved is now an explicit bookmarks list.) Add proper empty/loading states and dedicated behavior.
- [client] Verify hero image loading.
AsyncImageagainst real feedimageUrls (ATS, redirects, grey fallback) in the article reader. - [client] Offline-first polish. Pre-cache top stories for true offline-first; today the green "cached" dot depends on opening an article.
CI
- [ci] Add unit/UI tests + a test matrix leg. The build matrix compiles but runs no tests yet.
- [ci] Backend CI build matrix. Python 3.11–3.13 + lint + Docker image build/health probe, for the backend repo (template lives in chat/handoff).
Recently shipped (this iteration)
Signal feed + detail + reader + feed manager; LAN⇄Tailscale connectivity; notifications (morning/evening briefings + breaking alerts) with Open-Meteo weather; device code signing; feed resilience (no blank-on-refresh, ignore cancelled, coalesced WS refresh); clearer empty states; deterministic feed order; read/unread (drop stripe on open); 6-line summary preview; pinned mutually-exclusive filters (F1 split out, regions non-overlapping, Finance/Tech by topic); swipe actions (left = save, right = share + mark read).