#!/usr/bin/env bash # Create issues on self-hosted Gitea from docs/BACKLOG.md. # You supply the token (this script never stores it). Generate one in Gitea: # Settings → Applications → Generate New Token (scope: write:issue, read/write repo) # # Run: # GITEA_URL=http://10.10.1.21:3002 GITEA_OWNER=kutesir GITEA_REPO=jarvis \ # GITEA_TOKEN=xxxxxxxx bash scripts/create-issues.sh set -euo pipefail : "${GITEA_URL:?set GITEA_URL e.g. http://10.10.1.21:3002}" : "${GITEA_OWNER:?set GITEA_OWNER e.g. kutesir}" : "${GITEA_REPO:?set GITEA_REPO e.g. jarvis}" : "${GITEA_TOKEN:?set GITEA_TOKEN (Gitea → Settings → Applications → Generate Token)}" API="$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/issues" mk() { local body body=$(python3 -c 'import json,sys; print(json.dumps({"title":sys.argv[1],"body":sys.argv[2]}))' "$1" "$2") curl -sf -X POST "$API" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "$body" >/dev/null && echo " + $1" } # --- Backend: data quality --- mk "[backend] F1 stories mis-classified into tech/finance/politics" \ "The topic classifier has no sport category, so F1 (100% F1 sources) scatters across topics. Live evidence: 'Monaco Grand Prix stewards…' -> tech, 'F1 reports 35% CO2 reduction…' -> finance, 'McLaren launch appeal against Gasly penalty' -> politics. Add a sport/f1 topic and route motorsport sources there." mk "[backend] Catastrophic over-clustering: unrelated articles merged on one shared word" \ "Confirmed on-device: a story merged a Russian-film-director article + 'Who is afraid of Michael Jackson?' + 'Chelsea Jackson Roberts' (wellness), grouped on the surname Jackson. Another merged 'Gunfire at Niger airport' + 'L.A. County Whiteman Airport crash' + 'Niger fintech', grouped on airport/Niger. Wrong headline/summary/topic + inflated signal. Raise TF-IDF threshold hard (~0.22 -> 0.45-0.55), require multiple shared distinctive terms / named-entity overlap + tight time window; if still over-merging move to sentence embeddings (all-MiniLM-L6-v2, cosine >= 0.6). Canonical headline + summary must come from the SAME article. No client fix possible." mk "[backend] Add accurate per-story tags (topic + region)" \ "Expose accurate tags (sport, uganda, east-africa, south-africa, ...) so the client reads them instead of keyword-guessing. Unblocks server-side filter pills. Pairs with the F1 and over-clustering fixes." mk "[backend] Topic-classifier coverage for the 47 feeds" \ "Ensure science/world/tech map sensibly into the supported topic slugs." # --- Backend: features --- mk "[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 --- mk "[client] Move interest filters server-side once backend tags exist" \ "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." mk "[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." mk "[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." mk "[client] App icon + launch assets" \ "AppIcon is an empty placeholder." mk "[client] Flesh out Latest / Search tabs" \ "Saved is now an explicit bookmarks list. Add proper empty/loading states and dedicated behavior to Latest and Search." mk "[client] Verify hero image loading in the reader" \ "AsyncImage against real feed imageUrls (ATS, redirects, grey fallback) in the article reader." mk "[client] Offline-first polish" \ "Pre-cache top stories for true offline-first; today the green cached dot depends on opening an article." # --- CI --- mk "[ci] Add unit/UI tests + a test matrix leg" \ "The build matrix compiles but runs no tests yet; add a test target and a test matrix leg." mk "[ci] Backend CI build matrix" \ "Python 3.11-3.13 + lint + Docker image build/health probe for the backend repo (template in the handoff)." echo "Done."