ReachWeaver 0.17.0 release notes
Released on 2026-10-22.
A documentation website: mskazemi.com/reachweaver. The studio needs fewer clicks: write from an idea in one click, previews that follow your typing, and Mark as posted (with numbers) straight from a preview card. In the terminal, posted shows the week so far, idea "a" "b" saves several ideas and says what to write next, and account-add can go straight on to connecting the account.
Security
Section titled “Security”- New composer route
/api/save-and-mark(owner approved 2026-10-21): “Save as new package” and Mark as posted in one request, behind the composer’s existing loopback, token, Host/Origin, JSON size and write-lock checks. Every check of both runs before anything is written (the post for every network, the network, link, account, numbers, a posted time in the future and a link already recorded, the last one with the database opened read-only and only if it exists); a refusal writes nothing and never creates the database. It always saves a NEW package (never an update). If the database refuses the record after the save, the answer names the package that was kept. The record is the usual terminalpublished_manualone, which can never be approved, scheduled or sent. The dashboard stays GET/HEAD-only.
- Documentation website (Astro Starlight, deployed to GitHub Pages by
.github/workflows/docs-site.yml). Every public guide indocs/, the README, the bundled skill and its references, contributing, security, privacy and disclaimer pages, one page per release from this changelog, and a command reference for all 133 commands generated from the real argument parser. Full-text search, light and dark themes, mobile layout. Built byscripts/build_docs_site.pyfrom the Markdown, which stays the single source; private documents are never read (git ls-filesof the public index, plus a second name check).make site,make site-check,make site-dev. - Search and AI-answer visibility for the site: a unique title and a 50-160 character description per page, canonical URLs, sitemap, Open Graph and Twitter cards with a social image, JSON-LD (
SoftwareApplication,WebSite,Person,TechArticle,BreadcrumbList),llms.txtandllms-full.txt,robots.txt.scripts/check_docs_site.pychecks every built page; Lighthouse on the home, quickstart and a command-reference page: performance 99, accessibility 100, best practices 100, SEO 100 (local build, 2026-10-22).
Changed
Section titled “Changed”- The package’s
Documentationlink (PyPI) and the repository’s About homepage now point to the documentation website, verified live on 2026-10-22. - Fewer clicks in the studio, measured with the same strict rule as 0.16.0 (every click counts, a click into a text field included; typing, Tab and Enter do not) in headless Chrome at 1280 and 375 px on a synthetic workspace: “what next via ideas” 2 -> 1, “write and copy for my 3 networks” 5 -> 3 (4 on a phone when the composer is opened directly rather than from a dashboard Write link, because the keyboard is not opened unasked), “mark as posted with the right account and numbers” 4 -> 1 (2 if you click Record as posted instead of pressing Enter); “write from the dashboard” and “weekly results” stay at 1. No page wider than the screen, no console error and no control under 44 px at 375.
- Dashboard: when the next steps include your ideas, the Overview lists your newest open ideas (at most three), each with Write this, which opens the composer with that idea as the caption (
reachweaver studio); the dashboard alone showsreachweaver share --web --open --idea IDwith a Copy button. - Composer: the previews follow what you type (checked again 400 ms after you stop; a newer check cancels an older one and a stale answer is dropped), so Preview my posts is now only a Refresh previews fallback, and Copy caption is there as soon as a card exists. An empty caption has the cursor on a wide screen, and on a phone when you came from a dashboard Write link.
- Composer: Mark network as posted on each preview card. The form opens with the cursor in the link field; Tab goes to Likes, Replies, Reposts and Views, then the optional account and time; Enter records. Account preselection is unchanged.
- Dashboard: platforms by name as the terminal prints them (“Bluesky”, “LinkedIn”); results say “3 days after posting” instead of “83.7 h”; the Ideas filters are read out as “All (2)” and its search box is labelled “Search your ideas”; the two Settings checkboxes are 44 px tap rows. A fresh composer no longer says “Saving…” before you type.
- Fewer commands in three terminal journeys (measured with the same literal commands as the 0.16.0 re-measure; extras appear only at a terminal, piped and
--jsonoutput is unchanged):- “How did my week go”:
posted LINK --likes Nat a terminal now ends withThis week so far: 3 posts · 49 likes · 3 replies · best: ...andMore: reachweaver report --week. The line is the first line ofreport --weekunder another heading, built by the same functions (report_format.summary_lineoverstorage.reportandresults.post_resultsfor the same 7-day window, viaresults.week_summary; read-only). Piped, the last line staysNext: reachweaver report --week. J3 drops from 5 commands to 4 (bare, then 3xposted). - “What next”:
idea "first" "second"(andidea add "first" "second") saves several ideas in one locked write, all or none; an empty idea is refused and nothing is saved, and--sourcebelongs to one idea only. At a terminal it then prints rank 1 ofnext(whats_next.build_next, read-only):Write it now: reachweaver share --guide --text '...' or in the browser: reachweaver share --web --open --idea ID. One idea, piped output and--json(one record) are unchanged; several ideas with--jsonprint a list.nextis unchanged. J4 drops from 4 commands to 2 (bare, oneidea). - “Connect Bluesky”:
account-addat a terminal (stdin and stdout), for Bluesky, Mastodon, Telegram or LinkedIn, asksConnect it now so ReachWeaver can post for you? [y/N]after writing the account. Enter means no (posting by hand needs no connection) and prints the usual next steps;yrunsconnect --guide --account IDin the same process through the same parser andconnectbranch, so its official steps, the credential lines and the “not inside an AI chat” wording are byte-identical, and no secret is asked for. Not asked without a terminal, with--dry-run, or whenconnectitself adds a first account. J5 drops from 3 commands to 2 (bare,account-add bluesky). - Tests:
tests/test_ux5_cli.py.
- “How did my week go”:
- The dashboard Overview no longer prints the word “null” next to your ideas;
postedkeeps the account in the first line and gives the date hint on its own line;connect --guide --account IDwith no accounts yet says so and namesaccount-add; the connection guide no longer prints the same link twice; Results says “1, all by you” instead of “1 1 posted by you”. docs/WORKER-OPERATIONS.mdlinked to an alert-rules heading that had been renamed; the site’s anchor check found it.- The terminal report’s best post said
1 repliefor a single reply; it now says1 reply(results.SINGULAR).
