docs(changelog): August 2026 — plugin system, voice meme generator, scratchpad editor - #245
Merged
Conversation
…cratchpad editor Adds the 2026-08 release entry covering everything shipped after the 2026-07 entry (v1.0.19 → v1.1.0+177), and re-renders changelog.html from the JSON. 18 entries — 9 features, 6 fixes, 3 improvements — verified against `git log v1.0.18+173..v1.1.0+177`, docs/PLUGINS.md, and the manifest in PluginRegistry.swift rather than from PR intent. The lead story is the plugin system (#244 / MAK-100) split into three entries, because "there are plugins now", "the first one makes memes", and "you can drive it hands-free from refine" are three different things a reader needs: - Plugins are opt-in twice over — the pane defaults to nothing enabled, and the entry says so, along with the networkHosts disclosure being a label rather than a sandbox (the honest limit docs/PLUGINS.md states). - The meme entry discloses the only network use: api.imgflip.com, i.imgflip.com and api.memegen.link serve the blank template image; captioning and rendering are local, and imported templates need no network at all. memegen.link's server-side captioning is deliberately unused, and the entry doesn't claim capability the plugin declines. - The voice-command entry spells out both flows (selection vs. spoken remainder), the EN + RU triggers, and the strict prefix/word-boundary matching — the reason "create a memo about Q3" is never eaten. Remaining entries cover the Scratchpad quality editor (MAK-95/96/97), in-note find (#240), AI actions + file-transcript import (MAK-98/99), model-readiness UX (MAK-94), the stream-overlay counter (#232), and the fixes: vocabulary substitutions before translation (#238), ru/uk detection (#235/#238), app-wide ⌘V (#242), per-keystroke Scratchpad saves, "Model: Not checked", and the "in 0s" timestamp. Every `howTo.availability` is "live" — each was checked against the shipping code path, per the truth contract in docs/changelog/README.md. stats.testsPassing = 2685 is the measured `swift test` count on this tree, not a carried-forward number. changelog.html renders only the latest release (its established behavior), so July's entries move out of the reference render and stay canonical in the JSON. The <style> block and page skeleton are byte-identical; only the content under div.wrap is regenerated. Gates: swift test 2685 passing, 0 failures (docs-only change — untouched). Co-Authored-By: Claude <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.
Adds the 2026-08 release entry to
docs/changelog/changelog.jsonand re-rendersdocs/changelog/changelog.htmlfrom it. Docs-only — no source changed.Scope verified against
git log v1.0.18+173..v1.1.0+177 --oneline --no-merges(v1.0.19 → v1.1.0+177),docs/PLUGINS.md, and the real manifest inPluginRegistry.swiftrather than from PR intent.18 entries — 9 features, 6 fixes, 3 improvements.
stats.testsPassing = 2685is the measuredswift testcount on this tree.Entry summary (the
lede)The lead story, split three ways
"There are plugins now", "the first one makes memes", and "you can drive it hands-free" are three different things a reader needs, so they're three entries:
PluginEnablementdefaults to empty, so an untouched install runs no plugin code). ThenetworkHostsdisclosure is described as a label, not a sandbox — the honest limitdocs/PLUGINS.mdstates — and the note carries the roadmap (out-of-process next, dylibs permanently rejected).api.imgflip.com,i.imgflip.com,api.memegen.linkserve only the blank template image; captioning and rendering are local. memegen.link's server-side captioning is deliberately unused, and the entry doesn't claim capability the plugin declines (it declinesclipboardAccess).Remaining entries: Scratchpad quality editor (MAK-95/96/97 · #239), in-note find + query highlighting (#240), AI actions + file-transcript import (MAK-98/99 · #241), model-readiness UX (MAK-94 · #237), stream-overlay voice counter (#232), and the fixes — vocabulary substitutions before translation (#238), ru/uk auto-detect (#235/#238), app-wide ⌘V (#242), per-keystroke Scratchpad saves, "Model: Not checked", and the "in 0s" timestamp.
Every
howTo.availabilityis"live", each checked against the shipping code path per the truth contract indocs/changelog/README.md.Notes on the render
changelog.htmlrenders only the latest release — its established behavior — so July's entries move out of the reference render and stay canonical in the JSON (which the site consumes). The<style>block and page skeleton are byte-identical; only the content underdiv.wrapis regenerated. Verified well-formed: zero unclosed/mismatched tags, 9<details>guides, 6 + 3 plain entries,say-listrenders the Cyrillic triggers correctly.Gates
swift test— 2685 passing, 0 failures (docs-only change; suite untouched)Site integration — what's needed to surface this on openwhisp.app
Read-only investigation of
~/projects/mnaboka/openwhisp-site(separate repo, not modified by this PR).How the site gets the changelog: it does not link or copy
changelog.html. The site is Bun + Vite + React 19 + TS + Tailwind v4 (all code underreact/), and it renders its own/changelogpage from a vendored snapshot of this repo'schangelog.json:react/src/ChangelogPage.tsx· route inreact/src/routes.tsx· accessorreact/src/changelog.ts(import raw from "./data/changelog.json")react/src/data/changelog.json(committed)react/scripts/fetch-changelog.mjs, wired asprebuildinreact/package.json, so every build refreshes it fromhttps://raw.githubusercontent.com/initcore0/openwhisp/main/docs/changelog/changelog.jsonmainon GitHub, not from a local checkout — so this PR must be merged first. On fetch failure the script keeps the committed snapshot (non-fatal), which means merging a site PR before this one lands would silently deploy the stale July-only JSON.Build:
bun run buildfromopenwhisp-site/react(devbun run dev:5173, preview :4173). Toolchain is Bun, not Node — the "homebrew node" note in project memory doesn't match this repo and should be corrected.Deploy: automatic.
.github/workflows/deploy.ymltriggers on push tomain→bun install --frozen-lockfile→bun run build→ GitHub Pages (actions/deploy-pages@v4), custom domain viareact/public/CNAME(openwhisp.app). A third job mirrors the build toinitcore0/openwhisp-mirror. History is 100% squash-merged PRs.Steps to publish (in order):
initcore0/openwhispmain.main; fromreact/runbun install && bun run fetch:changelog— expectchangelog: updated (2 release(s), generated 2026-08-04). If it says keeping committed snapshot, step 1 hasn't landed; don't hand-edit the JSON as a workaround.react/src/App.tsx<section id="features">(~L306-354), viafunction Feature({icon,title,children})(~L748). Icons are@phosphor-icons/reactwithweight="duotone", imported at the top ofApp.tsx. The grid islg:grid-cols-4with 10 cards today, so adding one leaves a ragged row — add two, or rebalance. For a launch this size the precedent (commit5d66cb0, stream overlay) is a dedicated spotlight<section>+ a homepage card + the changelog.react/src/blog/posts.tsx(Post=slug, title, description, keyword, datePublished, dateModified, readingTime, answer, body, faq[], related[]). Adding one auto-generates the route, sitemap entry, Atom feed entry, and JSON-LD.bun run build && bun run preview, check/changelog/; commitreact/src/data/changelog.json(+App.tsx/posts.tsxif touched), notreact/dist/.main— the push deploys to openwhisp.app and the mirror automatically.The site uses
CHANGELOG.generatedas the sitemaplastmodfor/and/changelog/, so thegeneratedbump to2026-08-04in this PR is what refreshes those SEO dates.🤖 Generated with Claude Code