Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
36ec2e0
added implementation ideas for extended news feeds
Firstp1ck Dec 6, 2025
89e54e6
updated news feed md
Firstp1ck Dec 6, 2025
c7ea9ac
feat: implement news feed functionality and UI enhancements
Firstp1ck Dec 7, 2025
d285960
refactor: enhance documentation and structure across modules
Firstp1ck Dec 7, 2025
2937f2e
feat: enhance news functionality and UI components
Firstp1ck Dec 7, 2025
8304411
update readme and pr
Firstp1ck Dec 7, 2025
916584b
cargo update
Firstp1ck Dec 8, 2025
5d86572
feat: extend news feed with updates and aur signals
Firstp1ck Dec 8, 2025
6df7a1f
update pr
Firstp1ck Dec 8, 2025
a4e36e9
feat: enhance news content handling and bookmark loading
Firstp1ck Dec 8, 2025
4ca6ea3
feat: enhance news read tracking and filtering functionality
Firstp1ck Dec 9, 2025
1bfcd1d
Create Demo.txt
Firstp1ck Dec 9, 2025
7096006
feat: enhance news filtering options for AUR updates and advisories
Firstp1ck Dec 9, 2025
b82c012
feat: add startup news popup configuration and UI enhancements
Firstp1ck Dec 9, 2025
c0b0570
feat: improve news fetching with timeout settings
Firstp1ck Dec 10, 2025
834468a
feat: enhance news fetching and filtering with comprehensive tests
Firstp1ck Dec 11, 2025
6983dab
feat: enhance news sorting and filtering capabilities
Firstp1ck Dec 11, 2025
aecc4d3
feat: implement news content loading timeout and enhanced logging
Firstp1ck Dec 11, 2025
a1b6dfe
fix clippy
Firstp1ck Dec 12, 2025
a3e4f80
feat: enhance news content caching and UI interactions
Firstp1ck Dec 12, 2025
f79145c
feat: enhance news content caching, loading, and UI interactions
Firstp1ck Dec 12, 2025
de74cbd
added a pr-check command for cursor
Firstp1ck Dec 14, 2025
f660739
updated announcement with importent news
Firstp1ck Dec 14, 2025
56af3f0
Recommend 'Good First Issue' for newcomers
Firstp1ck Dec 12, 2025
1396a16
docs(util): add comprehensive examples for all utility functions
Bhaavyasinha Dec 13, 2025
25ccaec
fix(docs): correct failing doctests for fuzzy_match_rank, ts_to_date,…
Bhaavyasinha Dec 14, 2025
f380178
docs: apply Copilot suggestions to fix examples
Bhaavyasinha Dec 14, 2025
2efb44e
docs(util): update User-Agent string in open_url documentation to inc…
Firstp1ck Dec 14, 2025
a4f4a33
Merge branch 'main' into feat/extended-news
Firstp1ck Dec 14, 2025
bf02e1d
fix: add checkupdates fallback for update detection when temp databas…
Firstp1ck Dec 17, 2025
3781acd
update pr
Firstp1ck Dec 17, 2025
0cfa97e
update pacman-contrib description in PKGBUILD files to clarify its ro…
Firstp1ck Dec 17, 2025
28cc79e
Merge branch 'main' into feat/extended-news
Firstp1ck Dec 17, 2025
243847c
refactor: improve footer layout and styling
Firstp1ck Dec 17, 2025
b8d1698
feat: add Shift+char keybind support across all panes and modes
Firstp1ck Dec 17, 2025
1df0e00
feat: add loading toast message for news button in UI
Firstp1ck Dec 17, 2025
a9b45e5
update pr
Firstp1ck Dec 17, 2025
cc6512f
feat: add bookmarks localization for news section in multiple languages
Firstp1ck Dec 17, 2025
fee23aa
perf: reduce aggressive archlinux.org fetching with rate limiting and…
Firstp1ck Dec 17, 2025
2016d1f
fix: exclude invalid dates from AUR comments "Recent" section
Firstp1ck Dec 17, 2025
cce7457
feat: expand cache clearing functionality to include additional cache…
Firstp1ck Dec 17, 2025
9f49097
update pr
Firstp1ck Dec 17, 2025
05af800
removed used up pr file
Firstp1ck Dec 17, 2025
16bc862
feat: update news content loading timeout from 6 seconds to 10 seconds
Firstp1ck Dec 17, 2025
3117f76
feat: add circuit breaker, conditional requests, and retry-after supp…
Firstp1ck Dec 17, 2025
43a8e9c
fix: resolve clippy warnings and test failures
Firstp1ck Dec 17, 2025
1e6d600
pr updated
Firstp1ck Dec 17, 2025
564a5c1
feat: implement comprehensive news mode with feeds, filtering, and ca…
Firstp1ck Dec 17, 2025
e59f506
fix: align update entries when text wraps in updates window
Firstp1ck Dec 17, 2025
3a328e7
update pr
Firstp1ck Dec 17, 2025
e7bb068
fix: align options menu key bindings with display order
Firstp1ck Dec 17, 2025
12f47dd
update pr
Firstp1ck Dec 17, 2025
b489711
added *.code-workspace for VSC and Fork IDE's
Firstp1ck Dec 17, 2025
014a4a8
fix: installed_packages.txt now respects installed_packages_mode setting
Firstp1ck Dec 18, 2025
a4e2326
fix: prevent archlinux.org rate limiting by serializing requests
Firstp1ck Dec 18, 2025
f07c9c3
pr update
Firstp1ck Dec 18, 2025
72c013b
fix: improve compatibility with archlinux.org DDoS protection
Firstp1ck Dec 18, 2025
3a16857
added explicit codeql runner
Firstp1ck Dec 18, 2025
42d83d2
updated codeql workflow and pr update
Firstp1ck Dec 18, 2025
b80eb2e
update release command and added suggestions for future data fetching…
Firstp1ck Dec 18, 2025
686563f
fix: coordinate news fetches and preserve pending news
Firstp1ck Dec 18, 2025
728e28a
feat: improve news feed filtering and fetching performance
Firstp1ck Dec 18, 2025
23c65e3
feat: add rate limiting to package index fetching to prevent IP blocking
Firstp1ck Dec 18, 2025
90669ee
fix: add rate limiting to package date fetching to prevent IP blocking
Firstp1ck Dec 18, 2025
4c4058e
feat: add i18n support and informative messages for news loading
Firstp1ck Dec 18, 2025
d66a3b4
update pr
Firstp1ck Dec 18, 2025
e198725
docs: add comments explaining intentionally unused parameters
Firstp1ck Dec 18, 2025
63877da
refactor: Fix clippy warnings and reduce function complexity
Firstp1ck Dec 18, 2025
beca3e7
refactor: improve clippy::too_many_lines allow comments
Firstp1ck Dec 18, 2025
79ec007
update pr
Firstp1ck Dec 18, 2025
eabecbf
fix: Fix translation keys location and improve logging visibility
Firstp1ck Dec 18, 2025
a441a09
renamed archlinux connection test script
Firstp1ck Dec 18, 2025
19a817f
refactor: modularize large source files into organized submodules
Firstp1ck Dec 19, 2025
b6d72f2
update pr
Firstp1ck Dec 19, 2025
f682d6e
fix: correct alert title for configuration directory messages
Firstp1ck Dec 19, 2025
20f297a
pr update
Firstp1ck Dec 19, 2025
b8df501
added issue command for cursor
Firstp1ck Dec 19, 2025
7573f29
update announcement
Firstp1ck Dec 20, 2025
5f68f3c
added plan to implement arch-toolkit crate
Firstp1ck Dec 21, 2025
3077eca
added cargo dry-run for publish
Firstp1ck Dec 22, 2025
d7d36fe
feat: add JSON caching, change detection, and background retry queue
Firstp1ck Dec 23, 2025
6a3d839
updated pr
Firstp1ck Dec 23, 2025
7301db5
refactor: improve code quality and documentation
Firstp1ck Dec 23, 2025
72c5e99
updated pr
Firstp1ck Dec 23, 2025
cf0559c
- chore: add TODO for Hungarian translation in news setup section of …
Firstp1ck Dec 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
199 changes: 90 additions & 109 deletions Cargo.lock

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@ futures = "0.3"
syntect = "5.0"
fuzzy-matcher = "0.3"
rpassword = "7.4.0"
scraper = "0.24.0"
scraper = "0.25.0"
chrono = "0.4"
portable-pty = "0.9"
strip-ansi-escapes = "0.2"
lru = "0.16.2"
ego-tree = "0.10"

[dev-dependencies]
tempfile = "3.10"
Expand All @@ -42,6 +43,10 @@ cognitive_complexity = "warn"
pedantic = { level = "deny", priority = -1 }
nursery = { level = "deny", priority = -1 }
unwrap_used = "deny"
# Keep docs linting consistent with clippy naming
missing_docs_in_private_items = "warn"

[lints.rust]
missing_docs = "warn"
# Ignored tests run with:
# cargo test -- --ignored
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[![Made with Rust](https://img.shields.io/badge/Made%20with-Rust-orange.svg)](https://www.rust-lang.org/)
[![Target: Arch Linux](https://img.shields.io/badge/Target-Arch%20Linux-1793D1?logo=arch-linux&logoColor=white)](https://archlinux.org/)

Pacsea is a fast, friendly TUI for browsing and installing Arch and AUR packages — built for speed and minimal keystrokes.
Pacsea is a fast, friendly TUI for browsing and installing Arch and AUR packages — plus a built-in Arch news and advisory feed — built for speed and minimal keystrokes.

## Community
<p align="center">
Expand Down Expand Up @@ -59,6 +59,7 @@ pacsea
| Feature | Description |
|---------|-------------|
| **Integrated Process Execution** | All operations execute directly within the TUI with real-time output streaming, progress bars, and inline password prompts — no external terminals |
| **News feed & advisories** | News mode shows Arch news and security advisories with filters (Arch/advisory/installed-only, age), search with history, read/unread tracking, bookmarks, and cached article content |
| **Security Scan for AUR Packages** | Comprehensive security scanning workflow with multiple tools (ClamAV, Trivy, Semgrep, ShellCheck, VirusTotal, custom patterns, aur-sleuth) and detailed scan summaries |
| **Fuzzy Search** | Toggle flexible fuzzy search mode to find packages even without exact names |
| **Unified search** | Fast results across official repos and the AUR |
Expand Down Expand Up @@ -116,6 +117,7 @@ Pacsea provides a keyboard-first interface for searching, queueing, and installi
- Review packages before installing with the Preflight modal
- Run security scans for AUR packages
- Manage installed packages, including removal and downgrade
- Switch to News mode (Options → News) to browse Arch news and security advisories, filter by source/age/installed-only, search with history, and bookmark/read items with cached article content
- All operations execute directly in the TUI with real-time output and progress indicators

For a complete reference of all keyboard shortcuts, see the [Keyboard Shortcuts](https://github.com/Firstp1ck/Pacsea/wiki/Keyboard-Shortcuts) wiki page.
Expand Down Expand Up @@ -143,6 +145,8 @@ For complete configuration documentation, including all available settings, them

Example configuration files are available in the [`config/`](config/) directory.

News defaults to 30-day items and shows Arch news plus security advisories; adjust via `app_start_mode` (`package` or `news`), `news_filter_show_arch_news`, `news_filter_show_advisories`, `news_filter_installed_only`, and `news_max_age_days` in `settings.conf`.

![Settings overview (v0.4.1)](Images/Settings_v0.4.1.png "Settings overview (v0.4.1)")

### Preflight Modal
Expand Down
16 changes: 16 additions & 0 deletions config/locales/de-DE.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ de-DE:
search_focused: "Suche (fokussiert)"
recent: "Suchverlauf:"
recent_focused: "Suchverlauf (fokussiert)"
news_recent: "News-Suchverlauf:"
news_recent_focused: "News-Suchverlauf (fokussiert)"
install_list: "Installationsliste"
install_list_focused: "Installationsliste (fokussiert)"
downgrade_list: "Herabstufungs-Liste"
Expand Down Expand Up @@ -225,6 +227,7 @@ de-DE:
show_pkgbuild: "PKGBUILD anzeigen"
hide_pkgbuild: "PKGBUILD verbergen"
url_label: "URL:"
open_url_label: "[Im Browser öffnen]"
loading_pkgb: "PKGBUILD wird geladen…"
copy_pkgbuild: "PKGBUILD kopieren"
reload_pkgbuild: "PKGBUILD neu laden"
Expand Down Expand Up @@ -300,12 +303,25 @@ de-DE:
hide_install_list: "Installationsliste verbergen"
show_keybinds: "Tastenkombinationen anzeigen"
hide_keybinds: "Tastenkombinationen verbergen"
show_history: "History (TODO: translate to german)"
hide_history: "History (TODO: translate to german)"
show_bookmarks: "Bookmarks (TODO: translate to german)"
hide_bookmarks: "Bookmarks (TODO: translate to german)"
options_menu:
list_all_packages: "Alle Pakete auflisten"
list_installed_packages: "Installierte Pakete auflisten"
update_system: "System aktualisieren"
news: "Neuigkeiten"
news_management: "News-Verwaltung"
package_mode: "Paketmodus"
news_age_days: "News-Alter: {} Tage"
news_age_all: "News-Alter: unbegrenzt"
tui_optional_deps: "TUI Optionale Abhängigkeiten"
news:
filters:
arch: "Arch"
advisories: "Advisories"
installed_only: "Installed only"

modals:
common:
Expand Down
16 changes: 16 additions & 0 deletions config/locales/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ en-US:
search_focused: "Search (focused)"
recent: "Search history"
recent_focused: "Search history (focused)"
news_recent: "News search history"
news_recent_focused: "News search history (focused)"
install_list: "Install List"
install_list_focused: "Install List (focused)"
downgrade_list: "Downgrade List"
Expand Down Expand Up @@ -225,6 +227,7 @@ en-US:
show_pkgbuild: "Show PKGBUILD"
hide_pkgbuild: "Hide PKGBUILD"
url_label: "URL:"
open_url_label: "[Open in Browser]"
loading_pkgb: "Loading PKGBUILD…"
copy_pkgbuild: "Copy PKGBUILD"
reload_pkgbuild: "Reload PKGBUILD"
Expand Down Expand Up @@ -300,12 +303,25 @@ en-US:
hide_install_list: "Hide Install List"
show_keybinds: "Show Keybinds"
hide_keybinds: "Hide Keybinds"
show_history: "Show History"
hide_history: "Hide History"
show_bookmarks: "Show Bookmarks"
hide_bookmarks: "Hide Bookmarks"
options_menu:
list_all_packages: "List all packages"
list_installed_packages: "List installed packages"
update_system: "Update System"
news: "News"
news_management: "News management"
package_mode: "Package mode"
news_age_days: "News age: {} days"
news_age_all: "News age: all time"
tui_optional_deps: "TUI Optional Dep's"
news:
filters:
arch: "Arch"
advisories: "Advisories"
installed_only: "Installed only"

modals:
common:
Expand Down
21 changes: 21 additions & 0 deletions config/locales/hu-HU.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ hu-HU:
search_focused: "Keresés (fókuszált)"
recent: "Keresési előzmények:"
recent_focused: "Keresési előzmények (fókuszált)"
# TODO: translate to hungarian
news_recent: "News search history"
news_recent_focused: "News search history (focused)"
install_list: "Telepítési lista"
install_list_focused: "Telepítési lista (fókuszált)"
downgrade_list: "Visszafejlesztési lista"
Expand Down Expand Up @@ -228,6 +231,8 @@ hu-HU:
show_pkgbuild: "PKGBUILD megjelenítése"
hide_pkgbuild: "PKGBUILD elrejtése"
url_label: "Webcím:"
# TODO: translate to hungarian
open_url_label: "[Open in Browser]"
loading_pkgb: "PKGBUILD betöltése…"
copy_pkgbuild: "PKGBUILD másolása"
reload_pkgbuild: "PKGBUILD újratöltése"
Expand Down Expand Up @@ -303,12 +308,28 @@ hu-HU:
hide_install_list: "Telepítési lista elrejtése"
show_keybinds: "Billentyűkötések megjelenítése"
hide_keybinds: "Billentyűkötések elrejtése"
# TODO: translate to hungarian
show_history: "History"
hide_history: "History"
show_bookmarks: "Bookmarks"
hide_bookmarks: "Bookmarks"
options_menu:
list_all_packages: "Összes csomag listázása"
list_installed_packages: "Telepített csomagok listázása"
update_system: "Rendszer frissítése"
news: "Hírek"
# TODO: translate to hungarian
news_management: "News management"
package_mode: "Package mode"
news_age_days: "News age: {} days"
news_age_all: "News age: all time"
tui_optional_deps: "A PacSea nem kötelező függőségei"
news:
filters:
# TODO: translate to hungarian
arch: "Arch"
advisories: "Advisories"
installed_only: "Installed only"

modals:
common:
Expand Down
69 changes: 69 additions & 0 deletions dev/IMPROVEMENTS/news_feed_implementation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# News Feed Implementation Suggestions

## Existing Coverage Snapshot
- Arch news RSS already fetched (`src/sources/news.rs`) and surfaced via CLI/startup modal.
- AUR RPC v5 search/info endpoints already used for package search/details (`src/sources/search.rs`, `src/sources/details.rs`).
- Official repo JSON search API used for indexing/search (`src/index/mirrors.rs`).
- No ingestion yet for security advisories, package-update RSS feeds, AUR bulk metadata archives, or pacman db tarballs.

## Priority Focus
- Package news for installed packages only (AUR + official), including recent AUR user comments in the feed view.
- Security news with user control over scope: toggle between installed-only and all packages.

## Source Coverage and Plan
| Source | Status | What it is / Uses | Suggested implementation notes |
| --- | --- | --- | --- |
| AUR Package Info (RPC v5) | Implemented (details) | AUR’s JSON info endpoint for specific packages; returns version, maintainer, out-of-date flag, popularity, etc. Use for precise “this package updated” detection. | Reuse existing client; build feed items for installed AUR packages when version differs from cached snapshot; include maintainer/orphan/out-of-date markers. |
| AUR Package Search (RPC v5) | Implemented (search) | AUR’s search endpoint returning lightweight results (name/desc/version/popularity). Good for discovery and link-outs. | No extra ingestion needed; surface as “related/discovery” links inside feed cards when helpful. |
| AUR Metadata Bulk (.json.gz) | Not implemented | Full compressed dump of all AUR metadata. Enables fast snapshot/diff across the entire AUR without many RPC calls. | Periodic downloader with etag/if-modified-since to cache dir; parse incrementally; filter to installed names first for feed; allow “all packages” diff on demand. |
| Official Repo Packages (JSON API) | Implemented (index build) | Arch official packages JSON API used today for index. Reliable for name/version/desc per repo/arch. | Tap existing fetches to emit feed items when versions change; persist last-seen map; default to installed set, allow “all” toggle. |
| Official Repo Search (JSON) | Implemented (search) | JSON search endpoint for official repos; user-driven lookup, not a feed source. | Keep for interactive search only; no feed ingestion needed. |
| Security Advisories (security.archlinux.org JSON) | Not implemented | Structured advisory feed with IDs, severity, affected packages, fixed versions. | Poll endpoint; generate feed with severity badges; add scope filter (installed vs all); maintain per-advisory read/unread. |
| Arch News (RSS) | Implemented | Official Arch news posts (manual interventions, announcements). Good for human-readable notices. | Store GUID/pubDate to dedupe; retry/backoff; fast-fail offline. |
| Package Updates (RSS per repo/arch) | Not implemented | RSS streams listing recent package version updates per repository/architecture. Human-friendly “recent changes” view. | Optional subscription; normalize to package/version tuples; dedupe with official index; default to installed set only. |
| Pacman Database (db.tar.gz) | Not implemented | Compressed sync dbs (`$repo.db.tar.gz`) containing package metadata/versions; usable offline. | Opt-in download; parse `desc` files to detect version bumps and metadata when APIs fail; limit to installed names to save work. |
| Arch Packaging Issues (GitLab) | Not implemented | Open issues across the Arch packaging group (pkg-level breakage reports). | Poll GitLab API for open issues under `archlinux/packaging/packages`; filter titles/labels/body against installed package names; cache ETag/Last-Modified; emit feed items with severity/label badges; default to installed set with optional “all issues” toggle. |
| AUR Comments (HTML/JSON) | Implemented (existing comment fetch) | Latest user comments on AUR packages; useful signal for build breaks or fixes. | Reuse `fetch_aur_comments`; show recent comments for installed AUR packages; track last-seen comment ID to avoid noise. |
| Arch BBS (bbs.archlinux.org feeds) | Not implemented | Forum threads (Announcements, Pacman/Upgrade Issues, Security, AUR). Atom/RSS via `extern.php?action=feed&type=atom|rss&fid=<forum_id>`; HTML fallback. | Optional and user-configurable; per-forum enable/disable; rate-limit; cache ETag/Last-Modified; parse titles/links/dates; default off to avoid noise. |
| Full repo snapshots (official/AUR) | Not implemented | Large mirror snapshots of official or AUR repos (packages and/or full metadata). | Opt-in only; for offline/air-gapped or reproducibility; not needed for routine feeds. Track size/bandwidth warnings. |

## Proposed Architecture
- Create `sources::feeds` with per-source fetchers returning `Vec<FeedItem>`; shared `FeedItemKind` enum (`News`, `Advisory`, `Update`, `AURChange`, etc.).
- Central scheduler: periodic async tasks with jitter; backoff on failure; honor global `--dry-run` (log planned fetches only).
- Persistence: store last-seen identifiers per source (e.g., advisory ID, RSS GUID/link, pkg+version) under `~/.config/pacsea/cache/news/`.
- Caching and diffing: compare newly fetched items against last-seen snapshot to generate incremental feed entries; keep small ring buffer to bound disk use.
- Graceful degradation: if `curl/reqwest` or network unavailable, surface actionable error in UI and continue with other sources.
- UI: single feed view with filters (source, severity, unread); actions to mark read, open link, copy URL; keyboard-first shortcuts aligned with existing patterns.
- Testing: add unit tests per fetcher using recorded fixtures; integration test that aggregates mixed sources and enforces dedupe and ordering.

## What the missing sources provide
- Package Updates (RSS per repo/arch): RSS feeds published per repository/architecture that list recent package version updates; each item usually contains package name, new version, link to package page, and publish date. Not required for update checks (we already have API/index paths), but useful for a human-readable “recent repo changes” lane and for cross-checking unexpected version bumps.
- Pacman Database (db.tar.gz): Compressed pacman sync database files (`$repo.db.tar.gz`) containing package metadata and versions; parsing them locally allows offline detection of version changes and metadata when APIs are unreachable. Typical size: a few MB for `core`, low tens of MB for `extra`/`multilib`; total usually under ~40–60 MB per arch. Opt-in download. Uses: offline verification, reproducing historical state, secondary diff source when JSON APIs are down, and deep metadata parsing (depends/optdepends/licensing) without invoking pacman on the live system.
- AUR Metadata Bulk (.json.gz): Periodic full AUR metadata dumps in compressed JSON; processing them yields a snapshot of all AUR packages (name, version, metadata) enabling fast diffing to detect updates without many RPC calls. Typical size: tens of MB compressed (varies with AUR churn); opt-in download. Uses: fast installed-only diffs, bulk analytics (orphaned/out-of-date stats), and reduced network chatter compared to many RPC calls. From a user perspective: quicker “what changed in my AUR packages” checks with fewer waits, less API throttling, and an optional full snapshot for deeper exploration when desired.
- Arch Packaging Issues (GitLab): Open issues in the Arch packaging group (e.g., build failures, missing deps, bad metadata). Poll the GitLab API with ETag/Last-Modified, filter by installed package names in title/labels/description, and emit feed entries with label/severity badges plus links back to GitLab. Useful for early warning of breakage affecting installed packages; default scope is installed set, with opt-in “all issues” view.
- Full repo snapshots (official/AUR): Large downloads (hundreds of MB+ depending on mirror scope) that mirror package files and/or full metadata. Opt-in only; suited for offline/air-gapped environments, reproducibility, or accelerating local diff pipelines. Not necessary for normal feed consumption.
- Arch BBS feeds: Atom/RSS endpoints exposed via `extern.php` for specific forum IDs (e.g., Announcements, Pacman & Package Upgrades, Security). Useful for surfacing forum alerts about breakage, manual interventions, or security discussions; make per-forum opt-in configurable with rate limits and caching.

## News Feed Priority List (stylistic match to Feature Priority doc)

| Tier | Item | Target | Impact | Complexity |
|------|------|--------|--------|------------|
| 🔴 | Installed-package news + AUR comments | v0.7.1 | ⭐⭐⭐⭐ | Medium-High |
| 🔴 | Security advisories (installed/all toggle) | v0.7.1 | ⭐⭐⭐⭐ | Medium |
| 🟠 | AUR metadata bulk diff (installed-first) | v0.7.x | ⭐⭐⭐ | Medium |
| 🟠 | Package update RSS lane (optional) | v0.7.x | ⭐⭐ | Low-Medium |
| 🟠 | Arch packaging issues (installed-first) | v0.7.x | ⭐⭐⭐ | Medium |
| 🟡 | Pacman db.tar.gz fallback (opt-in) | v0.7.x | ⭐⭐ | Medium |
| 🟡 | Arch BBS feeds (per-forum opt-in) | v0.7.x | ⭐⭐ | Low-Medium |
| 🟢 | Full repo snapshots (opt-in/offline) | v0.7.x | ⭐⭐ | High |

### Tier details
- 🔴 Installed-package news + AUR comments (v0.7.1): Aggregate version bumps for installed official/AUR packages and surface latest AUR comments with last-seen tracking; unread/read state; keyboard-first filters.
- 🔴 Security advisories with scope toggle (v0.7.1): Fetch security.archlinux.org JSON; show severity, affected packages, fixed versions; filters for installed vs all; per-advisory read/unread; link-out to details.
- 🟠 AUR metadata bulk diff (v0.7.x): Periodically fetch AUR .json.gz with ETag/If-Modified-Since; parse incrementally, prioritizing installed package names; optional full diff mode for all packages; emit update events while minimizing RPC calls.
- 🟠 Package update RSS lane (v0.7.x, optional): Subscription per repo/arch; human-friendly recent changes stream; dedupe against official index; default to installed set; low runtime risk if disabled.
- 🟠 Arch packaging issues (v0.7.x, installed-first): Poll GitLab API for open issues in `archlinux/packaging/packages`; filter by installed package names in title/labels/description; cache ETag/Last-Modified and last-seen issue IDs; emit feed cards with labels/severity and links; opt-in “all issues” mode; rate-limit to avoid API abuse.
- 🟡 Pacman db.tar.gz fallback (v0.7.x, opt-in): Download per repo/arch on demand; parse desc for version/metadata when APIs are down; offline verification; bandwidth-aware prompts.
- 🟡 Arch BBS feeds (v0.7.x, per-forum opt-in): Atom/RSS via `extern.php` for selected forums (Announcements, Pacman & Package Upgrades, Security). Default off; user-select forums; rate-limit and cache ETag/Last-Modified; useful for surfacing breakage/manual intervention chatter without overwhelming the feed.
- 🟢 Full repo snapshots (v0.7.x, opt-in): Large mirror snapshots (official/AUR); for offline/air-gapped/repro builds; not needed for routine feeds; require quota warnings and manual enablement.

Loading