Files
jarvis/docs/BACKLOG.md
Robin Kutesa 20dd49a53c
Some checks failed
CI / Build · macos-14 · Debug (push) Has been cancelled
CI / Build · macos-15 · Debug (push) Has been cancelled
CI / Build · macos-14 · Release (push) Has been cancelled
CI / Build · macos-15 · Release (push) Has been cancelled
Update issue tracker: backend data-quality bugs + full backlog
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>
2026-06-19 01:15:56 +03:00

3.8 KiB
Raw Blame History

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)

  1. [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 a sport (or f1) topic and route motorsport sources there.
  2. [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.300.40) and make the canonical headline and summary come from the same representative article. This also inflates sourceCount / crossSourceConfirmation and the signal score.
  3. [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.
  4. [backend] Topic-classifier coverage for the 47 feeds. Ensure science/world/tech map sensibly into the supported topics.

Backend — features

  1. [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

  1. [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.
  2. [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.
  3. [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.
  4. [client] App icon + launch assets. AppIcon is an empty placeholder.
  5. [client] Flesh out Latest / Search tabs. (Saved is now an explicit bookmarks list.) Add proper empty/loading states and dedicated behavior.
  6. [client] Verify hero image loading. AsyncImage against real feed imageUrls (ATS, redirects, grey fallback) in the article reader.
  7. [client] Offline-first polish. Pre-cache top stories for true offline-first; today the green "cached" dot depends on opening an article.

CI

  1. [ci] Add unit/UI tests + a test matrix leg. The build matrix compiles but runs no tests yet.
  2. [ci] Backend CI build matrix. Python 3.113.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).