Skip to content

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.

  • 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 terminal published_manual one, 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 in docs/, 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 by scripts/build_docs_site.py from the Markdown, which stays the single source; private documents are never read (git ls-files of 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.txt and llms-full.txt, robots.txt. scripts/check_docs_site.py checks 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).
  • The package’s Documentation link (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 shows reachweaver share --web --open --idea ID with 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 --json output is unchanged):
    • “How did my week go”: posted LINK --likes N at a terminal now ends with This week so far: 3 posts · 49 likes · 3 replies · best: ... and More: reachweaver report --week. The line is the first line of report --week under another heading, built by the same functions (report_format.summary_line over storage.report and results.post_results for the same 7-day window, via results.week_summary; read-only). Piped, the last line stays Next: reachweaver report --week. J3 drops from 5 commands to 4 (bare, then 3x posted).
    • “What next”: idea "first" "second" (and idea add "first" "second") saves several ideas in one locked write, all or none; an empty idea is refused and nothing is saved, and --source belongs to one idea only. At a terminal it then prints rank 1 of next (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 --json print a list. next is unchanged. J4 drops from 4 commands to 2 (bare, one idea).
    • “Connect Bluesky”: account-add at a terminal (stdin and stdout), for Bluesky, Mastodon, Telegram or LinkedIn, asks Connect 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; y runs connect --guide --account ID in the same process through the same parser and connect branch, 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 when connect itself adds a first account. J5 drops from 3 commands to 2 (bare, account-add bluesky).
    • Tests: tests/test_ux5_cli.py.
  • The dashboard Overview no longer prints the word “null” next to your ideas; posted keeps the account in the first line and gives the date hint on its own line; connect --guide --account ID with no accounts yet says so and names account-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.md linked to an alert-rules heading that had been renamed; the site’s anchor check found it.
  • The terminal report’s best post said 1 replie for a single reply; it now says 1 reply (results.SINGULAR).