ReachWeaver 0.4.0 release notes
Released on 2026-10-16.
Made for use inside Claude Code on a subscription, and safer against posting the same thing twice: a guided way to connect accounts, a repeat guard, seven more channels (100 in all), a rewritten README and docs for newcomers, and a skill that loads about a third of the text it used to. 3 new commands (85 in all, none removed). A minor version because approve gains a new refusal (below).
Upgrade notes (behaviour you may notice).
approverefuses an exact repeat. If the same account has already published, sent, left unresolved, or recorded withmark-sharedthe same video file, image file or identical wording on the platform,approverefuses andcheckprintsBLOCKED. Re-approving an identical evergreen post now needsapprove POST_ID --allow-repeat, which leaves arepeat_overrideaudit event. Similar wording, another account and the same link only warn.- A new
shared_materialtable is created, empty, the first time a database is opened. Nothing existing is migrated or changed. - The skill is smaller.
SKILL.mdwent from about 37.5 KB to about 12.7 KB; the removed detail moved unchanged intoreferences/routing-detail.md,references/workflows.mdandreferences/cli-cookbook.md, which Claude loads only when a request needs them. No behaviour changed.
- Skill optimised for Claude Code on a subscription.
SKILL.mdnow opens with a statement that ReachWeaver makes no model calls and needs no API key, keeps the router and the rules that override reach targets, and loads detail on demand from three new references (routing-detail.md,workflows.md,cli-cookbook.md; the text was moved verbatim). New docs/CLAUDE-CODE.md covers install, a first session, who does what and how to keep usage low.tests/test_skill_budget.pyfails ifSKILL.mdgrows past 16 KB or any source file calls a paid model API. - Repeat guard: do not post the same material twice (owner request, 2026-10-16).
repeat-check(read-only) andmark-sharedare new;check,showandapprovenow compare a draft with the platform’s history. Compared: the exact bytes of the video file and of each image (SHA-256), the wording (word 3-gram overlap, the measurecampaign-check --history-dbalready uses; identical is an exact repeat, 60% or more is similar) and the canonical link. History is every non-cancelled post for the platform in the local database plus the newshared_materialledger of things posted by hand. An exact video, image or wording repeat of material this account has already shared (published,sending,needs_review, or recorded by hand) makescheckprintBLOCKEDandapproverefuse, unless the owner passesapprove --allow-repeat, which records arepeat_overrideaudit event. Everything else (similar wording, queued twins, another account on the same platform, the same link) is a warning. The same file on another platform is never a repeat. Reports carry ids, statuses and dates, never the earlier post’s text. Limits: exact files and wording only (a re-encoded video is not recognised), nothing is read from the platform, and the check runs atcheck/show/approve, not again at send time. See docs/REPEAT-GUARD.md. The approval step gains one more precondition and a human-only override; the send claim, dry-run default, pause, credential isolation and reconciliation are unchanged, and a send-time recheck is deliberately left for a separate security review. - Fixed in
connect(found while testing this): with an existing database the status table raisedUnboundLocalError, because a local import in the same function shadowed the read-only opener.tests/test_repeat_guard.pynow covers it. - Seven more channels in the distribution registry (93 to 100), all manual-only (2026-10-16). PeerTube (scheduled publication is documented for PeerTube 6.0 or later when the instance enables it), Nostr, Farcaster, Pixelfed, HackerNoon, and the human-only Matrix rooms and Kaggle. Each entry cites the official page that was fetched; where a page is rendered by script and nothing about scheduling or rules could be read, the entry says
unverifiedinstead of guessing. Patreon, Ko-fi and Dailymotion were left out because their official pages returned a 403 challenge to a direct fetch. No adapter, account connection or ranking was added;distribution-planrankings are unchanged. connect: a guided way to connect your accounts (experimental, owner-chosen 2026-10-16).reachweaver connectprints an offline status table (credential variable names only; nothing is read from the network or written to the database).reachweaver connect --guidewalks through the accounts one at a time with you at a terminal: the official sign-in page and steps per platform (Bluesky, Mastodon, Telegram, LinkedIn), a hidden-input way to set each variable, and then, only after you answeryfor that account, the same read-only identity check asconnect-check --online. It asks for no secret, opens no browser, posts nothing, leaves approval, dry-run, pause, credential and reconciliation rules untouched, and refuses to run without an interactive terminal.tests/test_connect_guide.py(20) pins this, including a static check that the module cannot read the environment, open a browser or touch the network.
Documentation
Section titled “Documentation”- README rewritten as a front page for newcomers. It now opens with what ReachWeaver is in plain words, what it will never do, which platforms really work today, how one post travels from draft to approval, three ways to get started and the five commands most people use. The honest-limits statement, the liability notice and the read/run/send disclosure are unchanged. The full command list stays in the README (collapsed), because the release gate requires every subcommand to be named there.
- New Start here guide, glossary and documentation index by goal. The long feature guides that used to fill the README moved unchanged to docs/FEATURES.md (links adjusted).
- The quickstart and troubleshooting pages point newcomers to the guide and glossary; the quickstart no longer calls
approval-mode --max-age-hoursa draft. tests/test_plain_language_docs.pypins the structure;tests/test_readme_channel_count.pyalso checks the channel count in FEATURES.md.
