Repository navigation
Release 0.11.0: extensions UX, notes vaults, reading slots, lineage counts - #44
Merged
Merged
Conversation
extensions/community.toml lists third-party extensions (none yet). The docs build renders it into a Community extensions page with a plain use-at-your-own-risk disclaimer; CI checks the file's format only. Submissions come as a pull request (template) or an issue form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Studio 0.39 moved markRead, markUnread and both batch read-state ops from owner:manage to a new, provisionally named scope, reading:state. - oauth: READ_STATE_SCOPE is the one place the name is spelled (a macro feeds SCOPE, OWNER_SCOPES and the manual-token wording). The browser sign-in asks only for the scopes the studio lists in scopes_supported, so an older studio isn't sent a scope it would refuse. - sync: a 403 on a read-state write no longer drops the ops. They stay queued and are skipped for the rest of the session, new marks keep queueing, and the rest of the outbox syncs. One notice per session names the missing scope and says to sign in again (or make a new token). The next sign-in sends what waited. There's no retry loop. - e2e: the harness mints tokens with reading:state (falling back to the four scopes on an older studio). New tests: a four-scope token is refused, its read stays queued, and a later credential sends it; and signing in again with a kept 0.10 client grants reading:state. - Docs, sign-in copy and the getting-started page name the scope and note that the name is provisional. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each vault is its own library: vault=<folder> stays the first (existing configs read as before), vault-<label>=<folder> adds more (kebab keys, so the config check accepts them and "later line wins" never drops one). The manifest asks for fs:<folder> per vault and only ui with none; a vault without its grant refuses while the others work. Drawer: a vault switcher (chips, Add folder…, Remove from Burrow), an empty state with Choose a folder…, needs-permission state with Allow…; the chosen vault is remembered in state.json (notes_vault). The quote picker searches every vault. Settings › Notes folders lists them with Remove and adds several at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions
Ports blygger-studio 0.39.0's entryByline / entryActions slots to BXP
(extension/entry.byline, extension/entry.action, behind reading.read) and
ships its two default extensions as bundled, opt-in Burrow extensions:
reading-time ("· 4 min" on each reading byline, the word count on hover)
and inspect (an ⋯ row showing the record Burrow holds, bodies elided).
Markers are asked off the main thread and cached by entry and version.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user decided on 2026-10-09 that the lineage glyph may show counts, since the data is available. SPEC rule 1 gets a narrow, dated exception for the glyph, the ⌘J view and the ring only. - blyg-core/lineage.rs: the lineage-glyph extension's contract types (vendored from blygger-studio dc632c5, PR #53) and a port of its counting rules over what this Mac holds (lineage::Local). - api/lineage.rs: GET /api/ext/lineage-glyph/summaries and /lineage; a 404 means "not enabled", silently, remembered for six hours. - store/lineage.rs: lineage_cache (summaries by reading entry key, graphs by query, 30 s fresh) and meta lineage_glyph. - Backend: additive lineage_summaries / lineage_graph (+ cached_*). - App: the glyph draws "up · down" next to the kinds; ⌘J shows the count each way and on the list headings, and is built from the node's graph when served; the ring shows how many of each kind already exist. Opening a post from ⌘J goes through open_reading, so it's marked read. - Tests: core unit tests mirroring the studio's lineage tests, store tests on SQLite, GPUI tests, and an e2e against a real local studio. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e consent sheet Manage extensions gets Turn off for every enabled extension, in any state (running, failed, waiting for permission, not installed). It removes the extension's `extension` line(s) with the comment-preserving write-back, keeping its extension-allow and extension-setting lines so Turn on brings it back as it was. Forget permissions also removes its extension-allow lines. The consent sheet gets a ⌘⌫ Turn off next to Allow / Not now, so an extension can be backed out of from the sheet that shows its folder. Any pending question or status-bar notice for it goes away, and a toast says "<name> turned off". disable_changes() in extensions/mod.rs builds the config changes. The host already stopped a child whose extension line went away on reload; a new host test pins that down, including one waiting out a crash backoff. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A macro run (cross-post to Substack Notes) forced the browser pane to OpenMode::Full, and its Preview and Post sheets hid the web view while they were up. Now a run opens (or reuses) the ordinary side pane; the sheets sit beside it over the app's content so the page stays in view; the pane can be folded mid-run (esc, x, Shift-Cmd-B) without stopping the run (the web view is parked off-screen, a status-bar mark unfolds it); it unfolds itself before typing and for the Post sheet; and it goes back to how it was when the run ends, unless the user toggled it or the page still matters (click Post yourself, a failure, stopped after Post). "Open <site>" for signing in uses the side pane too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blyg > Import Subscriptions from OPML... (and Import OPML... on the
Subscriptions screen) reads another reader's export with one lenient
parser (opml::outlines, now also behind profile::parse_opml: nested
folders, entities, BOM/UTF-16/Windows-1252, 5 MB / 2,000 feeds), shows
a preview sheet with ticks and "already following", then subscribes
each ticked feed with POST /api/subscriptions {url, confirm:true}, two at
a time and at most 30 a minute, waiting out 429 Retry-After. 201 is
added and filed in the local Reader folder "Imported feeds", 409 already
following (left where it's filed), 422 not a feed with the server's
reason. Cancellable, with a summary and Retry failed.
Blyg > Export Subscriptions as OPML... saves OPML 2.0 of every
subscription in the studio's blogroll.opml shape. CLI: blygger
+import-opml <file> [--dry-run] and +export-opml <file>.
Tests: parser fixtures in five readers' styles, pacing/429/cancel, the
folder on real SQLite, GPUI sheet tests, and an e2e against a real
local studio (201/409/422, filing, blogroll, export, the CLI).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eage-glyph Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a what's-new guard The 0.10.0 card started at the old reading-notes step and no step taught a 0.10.0 feature. Every step now names the release it teaches (since), and whats_new's tests hold each entry from 0.10.0 on to start at the first of its own steps, and fail for an x.y.0 with no entry. New steps: new (⌘N), slots (reading-time, inspect), opml (caption only), notes-library (several folders), clip (✂ Clip), cross-post (fold mid-run), extensions (⇧⌘P), manage (Turn off, Forget permissions), consent (⌘⌫). Edited: create (the toolbar's New is ⌘N), lineage and ring (counts), notes (its Notes tab), browser (⌘-click). The tour parks the user's extension host and runs the bundled markdown-notes, reading-time and inspect over invented notes in a temp folder; nothing in the tour writes the config file. Docs: extensions, notes and browser, reading, FAQ (sign in again for reading:state, OPML), getting started, SPEC. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After merging OPML import: the opml step rings the Subscriptions header, and in the tour Import OPML… opens the preview of a sample export (one feed already followed, two new) instead of a file picker. What's new and the FAQ name Blyg › Import Subscriptions from OPML…. The tour's unallowed sample folder is Shelf, after Garden, as the step asks for Garden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A tour the app quit during left its temporary folder behind. The sample now lives in <data dir>/tour-sample/, deleted when the tour ends and cleared when the next one starts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dows CI) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Release 0.11.0: extension UX, notes vaults, reading slots, lineage counts, and studio 0.39 read state.
extensions/community.toml, or with the issue form. CI checks the format, and the docs build renders a "Community extensions" page with a prominent at-your-own-risk notice (the maintainers don't review or verify these extensions). The list starts empty.~/Notesdefault, a vault switcher in the drawer, folder management in Settingsreading:statescope (studio 0.39.0); old tokens keep read ops queued and prompt a re-sign-inreading-timeandinspectextensions (ports of the studio's)+import-opml/+export-opml)🤖 Generated with Claude Code