#!/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" } mk "Add Sport (F1) and World topic pills" \ "The 47 feeds include heavy F1 + global-news coverage squeezed into finance/tech/politics/africa. Add pills in Topic.filters; backend classifier must emit sport/world slugs to match. [client][backend]" mk "Wire the Tailscale remote host in Connectivity" \ "Populate the Remote Access card's host so away-from-home auto-selects the Tailscale address. Verify the LAN<->Tailscale switch via /health probing. [client]" mk "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]" mk "Optional in-app WireGuard tunnel" \ "NetworkExtension packet-tunnel so Jarvis can bring up a WireGuard tunnel itself (WireGuard/Netmaker configs only). Needs entitlement + real device. Deferred. [client]" mk "App icon + launch assets" \ "AppIcon is an empty placeholder. [client]" mk "Flesh out Latest / Saved / Search tabs" \ "Currently minimal reuse of the feed components; add proper empty/loading states and dedicated behavior. [client]" mk "Verify hero image loading in the reader" \ "AsyncImage against real feed imageUrls (ATS, redirects, grey fallback) in the article reader. [client]" mk "Validate infinite scroll / pagination at scale" \ "Validate loadMore/cursor round-trips against the live ~850-story dataset; guard against dupes. [client]" mk "Topic-classifier coverage for the 47 feeds" \ "Ensure science/tech/world/sport map sensibly into the supported topic slugs. [backend]" mk "Add unit/UI tests + test matrix leg" \ "The build matrix compiles but runs no tests yet; add a test target and a test matrix leg. [ci]" mk "Offline-first polish" \ "Green cached dot + Saved tab depend on opening an article; consider pre-caching top stories. [client]" echo "Done."