Open RSS on every article at once - #126
Open
abhishek-anand wants to merge 59 commits into
Open
Conversation
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>
There was a problem hiding this comment.
🔵 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.
…ts catalog inputs moved.
# Conflicts: # Cargo.toml # apps/catalog.json # crates/kobo-cli/src/main.rs # docs/APP_STORE.md # docs/CONTRIBUTING_APPS.md # docs/apps/chat/index.html # tools/check-app-versions.mjs # tools/check-app-versions.test.mjs
# Conflicts: # crates/kobo-cli/src/main.rs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.