Skip to content

Open RSS on every article at once - #126

Open
abhishek-anand wants to merge 59 commits into
betafrom
app/rss-e2e
Open

Open RSS on every article at once#126
abhishek-anand wants to merge 59 commits into
betafrom
app/rss-e2e

Conversation

@abhishek-anand

@abhishek-anand abhishek-anand commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Open RSS on every article at once instead of a list of feeds, with hardened Miniflux sync and URL handling.

Test plan

  • Simulator: a synced account shows articles to read, not only feed names
  • Bad URLs and partial responses do not crash the app

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

abhishek-anand and others added 14 commits September 3, 2026 16:30
The first screen was the shelf, so reading anything took two taps and a
decision about which source to look in first. That is the wrong order:
somebody opening a reader wants the articles, and only wants the list of
sources when they are adding or removing one.

Make the combined article list the default view. Each followed feed
keeps its own cache, restored from the store on load, and the combined
list interleaves them round-robin so one prolific site cannot bury the
rest. Rows carry the publisher and date, and the article screen names
its source above the body, because a headline out of a mixed list means
little without knowing who published it. Back out of an article returns
to whichever list it was opened from, tracked in reading_parent, rather
than always to a single feed's items.

The shelf becomes Sources, reachable from the top bar and returning to
the combined list, and Refresh walks every subscription one request at a
time through a queue -- the runtime allows one task, so a fan-out would
just fail. A feed that fails while another list is in front of the
reader now says "Some feeds could not refresh" rather than replacing the
screen with a failure that belongs to a feed nobody is looking at.

Removing a subscription drops its cache too, so its articles leave the
combined list with it.

Co-authored-by: Cursor <cursoragent@cursor.com>
Copilot AI lite review requested due to automatic review settings September 4, 2026 07:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

It spans protocol/runtime behavior, installer/OTA bootstrap semantics, and multiple apps/docs, so it needs careful human review plus device-level validation beyond what I can confidently approve automatically.

Pull request overview

This PR expands the RSS example into an article-first reader with optional Miniflux syncing, while also advancing the platform/app release tooling and protocol/runtime capabilities needed for the new app behaviors (protocol 14, credential onboarding, stable launch bootstrap, and improved simulator parity).

Changes:

  • Add Miniflux request/response handling and URL hardening for RSS feeds, plus offline/durable state behavior and updated docs/drives.
  • Introduce protocol/runtime updates (protocol v14 Task::Put, orientation command, app-scoped credential install flow) and improve host simulation behavior for these features.
  • Harden app publishing/version validation and compatible-change isolation, and add a new Lichess app (with chess glyph support) alongside broader release/install documentation updates.
File summaries
File Description
tools/icon-import/icons.txt Add chess-related Tabler glyph imports.
tools/check-app-versions.test.mjs Extend versioning/isolation tests (protocol minimums, build validation, compatible blobs).
tools/check-app-versions.mjs Add build-package validation mode, protocol minimum updates, compatible-path hardening, and lockfile isolation logic.
tools/app-release-compatible-changes.json Record protocol-14 compatible-change blobs for release input isolation.
THIRD-PARTY.md Update RSS third-party service disclosure to include Miniflux.
SECURITY.md Update security documentation for OTA activation behavior.
SDK.md Update SDK docs for credential boundaries and new Put task semantics.
scripts/shoot-apps.sh Update deterministic screenshot navigation flows for launcher/gallery.
examples/rss/src/miniflux.rs Add Miniflux API task builders, parsing, namespacing, and tests.
examples/rss/src/feed.rs Add stable item IDs and resolve/validate feed-provided URLs against requested base.
examples/rss/README.md Document offline caching/state behavior and Miniflux mode details.
examples/rss/drive-standalone.kobo Add deterministic drive script for standalone mode discovery.
examples/rss/drive-miniflux.kobo Add deterministic drive script for switching to Miniflux settings.
examples/rss/Cargo.toml Add kobo-net dependency for URL resolution/validation.
examples/launcher/README.md Update launcher documentation/screens to match new Home/Apps behavior.
examples/launcher/Cargo.toml Add kobo-profile dev-dependency for profile-aware tests.
examples/gutenbird/src/main.rs Strengthen layout tests across profiles/orientations and refactor assertions.
examples/gutenbird/Cargo.toml Add kobo-profile dev-dependency for profile-aware tests.
docs/RELEASE-TRAIN.md Expand beta/OTA acceptance evidence requirements for protocol transitions.
docs/INSTALL.md Update install version, document bootstrap launcher, OTA caveats, and safer undo behavior.
docs/DEVICES.md Update setup/undo docs for bootstrap launcher and safer data-preserving undo.
docs/CONTRIBUTING_APPS.md Update contribution/publishing flow to beta-first and document credential onboarding expectations.
docs/apps/zotero-reader/index.html Bump app metadata/version and minimum platform requirement.
docs/apps/rss/index.html Update RSS app page copy, version/minimums, and add setup prerequisites UI.
docs/apps/gallery/index.html Bump app metadata/version and minimum platform requirement.
docs/APP_STORE.md Update app publishing model to beta artifacts + promotion, and document OTA/bootstrap behavior.
crates/kobod/src/main.rs Update simulation runtime to versioned protocol I/O, add orientation preview handling, and app secret handling.
crates/kobod/src/app_store.rs Add chess glyph string mappings for app catalog glyphs.
crates/kobo-ui/src/vector.rs Adjust stroke width for black chess pieces and add ink-coverage test.
crates/kobo-ui/Cargo.toml Add unicode-width and profile-aware dev dependency.
crates/kobo-text/src/lib.rs Add device serif discovery/fallback logic and update font selection behavior.
crates/kobo-sdk/src/lib.rs Add orientation command, nav/section helpers, contextual tiles, page rail, and app secret APIs; update frame versioning.
crates/kobo-sdk/src/keyboard.rs Add masked credential entry UI helpers and broaden layout tests across profiles/orientations.
crates/kobo-sdk/src/credentials.rs Add reusable credential onboarding flow (UI + device secret installation).
crates/kobo-sdk/Cargo.toml Add dev deps for profile tests and unicode width.
crates/kobo-policy/src/services.rs Treat SetSecret as capability-free in simulation service plumbing.
crates/kobo-cli/src/setup.rs Implement safer undo preserving owner data, install bootstrap, and adjust payload write logic.
crates/kobo-cli/src/panel.rs Fix CLI parse error formatting (missing semicolon).
crates/kobo-cli/src/package.rs Add stable bootstrap archive member rules and volume-layout writer; refactor member writes.
crates/kobo-cli/src/menu.rs Update NickelMenu entry to launch stable bootstrap path and delegate removal logic.
crates/kobo-cli/src/bootstrap.rs Add stable launch bootstrap install/migration/removal logic for NickelMenu entries.
crates/kobo-abi/src/lib.rs Add open_read_nofollow helper for symlink-safe reads.
Cargo.toml Bump workspace version and add Lichess app to workspace members.
Cargo.lock Update lockfile for new deps/apps (unicode-width, shakmaty, etc.) and version bump.
assets/cobalt-launch.sh Add stable launch script outside versioned trees, with recovery/owner-data handling.
apps/lichess/src/chess.rs Add chess rules, move legality, replay, and a tiny deterministic engine with tests.
apps/lichess/README.md Document Lichess app requirements, credential handling, and validation steps.
apps/lichess/drive/timeout.kobo Add deterministic drive coverage for timeout result UI flow.
apps/lichess/drive/result.kobo Add deterministic drive coverage for checkmate result UI flow.
apps/lichess/drive/promotion.kobo Add deterministic drive coverage for promotion flow.
apps/lichess/drive/home.kobo Add deterministic drive coverage for home screen expectations.
apps/lichess/drive/challenge-setup.kobo Add deterministic drive coverage for challenge setup screen.
apps/lichess/drive/challenge-player.kobo Add deterministic drive coverage for challenge player entry screen.
apps/lichess/Cargo.toml Define the new Lichess app crate and dependencies.
apps/catalog.json Add Lichess catalog entry and update RSS entry for Miniflux + protocol minimums and setup steps.
.github/workflows/apps.yml Add post-expansion package validation step using --validate-packages.
Review details
  • Files reviewed: 60/79 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants