Skip to content

Release 0.12.0: works with a stock blyg (studio 0.46.1) - #45

Merged
aneeshsathe merged 11 commits into
mainfrom
release-0.12.0
Oct 14, 2026
Merged

aneeshsathe merged 11 commits into
mainfrom
release-0.12.0

Conversation

@aneeshsathe

Copy link
Copy Markdown
Owner

Burrow now works fully against an unmodified Blygger Studio (0.40+, checked against v0.46.1), with no Worker patches.

Highlights

  • Reading sync on stock studio: reads GET /api/reading/imported in both the upstream (camelCase, cursor, limit ≤ 100) and the old patch shape. Read sync on upstream is detected from GET /api/reading's read_state flags. Lineage is known on every non-L0, non-withdrawn row. Fixes a total reading-sync failure against 0.40+ (limit=500 → 400).
  • Refused sign-in: an unrecoverable 401 stops sync once, keeps the outbox, and opens the sign-in sheet. The server owner token is gone from the sign-in UI.
  • Wire fidelity: full author object, cited on StubOf/RemoteRef, sourceUrl and generated on reading rows, "source" mentions shown as "drew on this", settings PATCH never clobbers keys Burrow doesn't own. reading:state is final.
  • Render parity re-synced to studio 0.46.1: 215/219 byte-identical. The 4 known divergences are provisional decision-#60 split cases (upstream preview/publish bugs drafted for the maintainer). TK tokens in code are text (0.41.1), in both blyg-render and blyg-core.
  • Decision #60: preview shows an own-line ![[id]] in TK output as the quote publish makes, and the publish sheet warns when the instruction didn't name it.
  • Spec §5.7: the Reader says generated-text marks are the publisher's own, unverified disclosure.
  • Tour and what's-new for 0.12.0 (echoed-quote and generated-text steps), docs (SERVER.md, site pages, SPEC decisions).

Verification

  • cargo fmt, clippy -D warnings, cargo test --workspace: 1176 passed, 0 failed.
  • BLYG_E2E_STOCK=1 scripts/e2e-local.sh against a local build of stock studio v0.46.1: 44/44 core + 2/2 markdown-notes. New tests cover cursor paging, feed lineage, a refused token, the settings round-trip, and the feed author.
  • Tour steps checked on sample data via the onboarding demo hooks, with screenshots of the app's own window.

Not run: e2e against an old patched Worker. The old shape is still covered by the existing wire/mock tests.

🤖 Generated with Claude Code

aneeshsathe and others added 11 commits October 13, 2026 21:58
GET /api/reading/imported on a stock blygger-studio 0.40+ is upstream's
listImportedReading: camelCase rows, cursor-paged, 1..100 a page, no page
flags. Burrow sent the old Worker patch's limit=500&before=, got a 400, and
every sync failed.

- wire: ReadingPage reads both shapes (camelCase rows => upstream; the old
  patch page carries read_state). upstream_row maps withdrawn, readVersion,
  stubOf, forkedFrom, transclusions; lineage is known for every non-L0,
  non-withdrawn row.
- The walk's first page sends only limit=100 (both servers take it); later
  pages send cursor= (upstream) or before= (old patch, 500 a page).
- Read sync on upstream comes from GET /api/reading's read_state and
  read_state_clear flags, read once a session; readVersion is kept when on.
- A 401 the credential can't recover from (a revoked token, an ended
  sign-in, an owner token a stock blyg doesn't take) emits SignedOut once:
  the worker stops sending and pulling until a new sign-in or a manual
  sync, queued changes stay queued, and the app opens the sign-in sheet
  (browser first) saying why.
- e2e: cursor paging with small pages (no repeats, same order), a stub's
  lineage from its feed row, a refused token stopping sync and keeping the
  change; the two-Mac read-sync test now also runs on a stock studio.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Parity fixtures now come from stock blygger-studio v0.46.1 (was the
patched Worker at 0.36.1). Embeds are presentation only upstream since
0.40, so the YouTube facade and image referrerpolicy are no longer baked
into the HTML; the preview script still shows the facade on screen.
parse_scopes looks for [TK], [=] and [/TK] outside code everywhere in a
scope (0.41.1, #68).

Decision #60: in a thread, an own-line ![[id]] left in a block scope's
output previews as the quote publish bakes, with the prose around it
still disclosed as generated. New unrequested_output_directives() (tk.ts
unrequestedOutputDirectives) names directives the instruction did not.

Parity: 215/219 byte-identical; the 4 known divergences are the #60
block-scope cases, pinned in tests/preview.rs. gen_parity.mjs runs
Miniflare from a temp dir so no .wrangler/ lands in the tree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rk is unverified

The publish sheet now also warns when a thread's generated text has an
own-line ![[id]] its instruction never named (decision #60): publishing
quotes it and notifies that author. The server's own publish warning was
already shown in the toast.

Reading view (spec 5.7, #59): text marked blyg-tk-gen gets a tooltip and
the post ends with a small note that the mark is the publisher's own
disclosure, not verified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- model::Author keeps every member it doesn't name (extra, flattened);
  wire::stock_row no longer narrows author_json to {name, url}
  (conformance §5.5).
- StubOf and RemoteRef keep cited (protocol 0.3 §16.1; studio 0.41+). A
  stub_of sent to the server drops a cited that upstream's strict Citation
  would refuse (source, url and retrieved are required).
- ReadingItem gains source_url and generated from listImportedReading.
- Client-recorded provenance sends a remote source's origin (studio 0.41+).
- Mentions with relation "source" (0.41) read as "drew on this".
- e2e: saving settings leaves the keys Burrow doesn't own (links_*,
  auto_change_notes, …); a feed row's author comes through.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1.1)

Like the studio's parseScopes since #68, every token ([TK], [=], [/TK]) is
looked for outside code, inline or fenced, not only the opening one: a
[/TK] quoted in code inside a scope is no early close, and a [TK] there is
no nesting. blyg-core now uses blyg-render's code ranges (exposed as
blyg_render::code_ranges), so it becomes a normal dependency.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- docs/SERVER.md rewritten around stock blygger-studio: what each version
  brings, 0.40+'s listImportedReading shapes, signing in (no owner token on
  a stock studio; a refused credential stops sync and asks to sign in),
  read state as upstream's (reading:state is final), and the old fork's
  extensions as legacy.
- SPEC.md and CORE.md: the reading feed, read state and 401 handling as
  they are now; e2e last green against stock 0.46.1.
- The sign-in sheet no longer points at a server's owner token. The
  limited-server sheet and About now speak of a studio older than 0.40
  ("Full reading feed" replaces "Server extensions").
- reading:state is no longer called provisional.
- Site FAQ and AI page: stock is fully supported; disclosure needs 0.28.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- What's new 0.12.0: stock blyg, sign-in (browser or a Client access token
  with reading:state), refused sign-in, the publish warning, the Reader's
  unverified note, "drew on this". Show me what's new starts at
  echoed-quote.
- echoed-quote step: a sample thread whose TK output echoed ![[id]], in the
  full editor (the preview shows the quote); ⌘⏎ opens the sheet's warning.
- generated step: Lin's fork now has a sentence marked blyg-tk-gen; ⏎
  opens it in the stream's side pane with the tooltip and the note.
- The tour no longer hides the reading WebView where it is clear of the
  tour card (stream side pane, Reader post pane), so posts show in the
  tour's reading steps.
- Tests: the 0.11 -> 0.12 launch, both steps' warning and note.
- Cargo.lock catches up with the 0.12.0 version bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- getting-started, introduction, faq, config: a stock studio 0.40+ needs
  no patches; no server owner token in sign-in; a refused sign-in opens
  the sheet (new FAQ); the 0.11 sign-in-again note softened.
- writing: a quote the AI added (the publish warning); reading: Generated
  text section, "drew on this", read-state wording; ai: both.
- dev docs, SPEC: no patched Worker; decisions #59/#60; tour notes.
- Config key docs: "your sign-in" instead of the owner token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ding

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aneeshsathe
aneeshsathe merged commit 392f3e9 into main Oct 14, 2026
3 checks passed
@aneeshsathe
aneeshsathe deleted the release-0.12.0 branch October 14, 2026 06:03
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.

1 participant