Synthadoc Community Edition v1.2.0 Release Notes
Synthadoc Community Edition v1.2.0 is released.
Release Type: Feature release — two major capabilities
What's New in v1.2.0
1. Content Snapshots & Rollback
Every wiki page now carries a full audit trail of its content, not just who changed its lifecycle state, but exactly what the page said at each transition point. Snapshots are captured automatically; nothing needs to be configured.
When a snapshot is recorded:
| Trigger | Example |
|---|---|
| Manual lifecycle transition via CLI, Obsidian, API, or MCP | synthadoc lifecycle activate alan-turing |
| Lint-driven state change — promotion, stale detection, contradiction resolution | synthadoc lint run --auto-resolve |
| Manual page edit in Obsidian (2-second debounce, only when content changed) | Editwiki/ada-lovelace.md and save |
CLI: browsing history and rolling back:
# List the full snapshot history for a page
synthadoc lifecycle history alan-turing -w my-wiki
# Preview a specific snapshot's content
synthadoc lifecycle history alan-turing --index 2 --show-content -w my-wiki
# Roll back to snapshot 2 (current body is saved first — always undoable)
synthadoc lifecycle rollback alan-turing --index 2 --reason "restoring activation body" -w my-wikiObsidian plugin: Content Snapshots tab:
The Manage Page Lifecycle modal now includes a Content Snapshots tab. It shows the complete snapshot history across all pages with the triggering state transition, the actor (lint, cli, api, MANUAL_EDIT), timestamp, and content size. Filter by slug to focus on one page.
- View: opens an inline line-by-line diff (added lines green, removed lines red) of the snapshot against the current file, with YAML frontmatter stripped so the diff shows only content.
- Rollback: restores the page body to that snapshot in one click; the current body is auto-saved first, so every rollback is immediately undoable by rolling back to index 1.
Business Value:
- Recover content overwritten by an accidental edit or a failed re-ingest
- Audit exactly what a page contained when it first went live
- Satisfy compliance requirements ("when was this page reviewed and what did it say?") without maintaining any separate record
- Every rollback is non-destructive: the pre-rollback body is always preserved as snapshot index 1
For the full walkthrough including diff commands and Obsidian screenshots, see Snapshots and content recovery in the Quick-Start Guide.
2. Agentic Maintenance Workflows
Wiki maintenance can now be driven entirely from the chat interface — no terminal, no commands. Type a maintenance request in plain English; the system asks for confirmation, re-ingests pages, runs lint, and reports back, all in a single conversation turn.
Two built-in workflows:
| Workflow | Trigger phrase | What it does |
|---|---|---|
| Stale-pages bulk reingest | "re-ingest stale pages" | Finds every stale page, confirms the list with you, force-re-ingests each one in sequence, runs a full lint pass, and summarises every outcome |
| Page-by-slug reingest | "re-ingest the alan-turing page" | Looks up the source path for any named page (regardless of state), confirms, force-re-ingests it, runs lint, and summarises |
How it works:
Each workflow runs as a tool-call loop driven by the action agent:
- Discover —
find_stale_pagesorfind_page_source(slug) - Confirm — a confirmation card appears in the chat with Yes / No buttons; nothing runs until you approve
- Ingest —
ingest_sourceforce-ingests each page and waits for the job to finish (one at a time, partial failures do not abort the rest) - Lint —
run_lintqueues a full lint pass - Poll —
poll_jobwaits for lint to reach a terminal state - Summarise — a plain-text summary of every re-ingest outcome and the lint result (pass/fail)
Real-time tool_progress events stream inline in the chat so you see each step as it happens. Declining the confirmation card exits cleanly with a cancellation message.
Maintenance chips in the graph sidebar:
Open the Graph tab in the web UI and click any node. A Maintenance section appears at the bottom of the node panel with two chips:
- ⚑ Check this page for issues — sends "Check the [slug] page for issues" to chat
- ↻ Re-ingest this page — triggers Workflow B for that slug directly from the graph
Supported surfaces: web chat UI and the Obsidian plugin query modal.
Value:
- Zero-terminal wiki maintenance: useful for team members who don't have the CLI installed
- Confirmation-gated: the agent never touches pages without explicit approval
- Full lint cycle is included: pages land in the correct lifecycle state after reingest, not just re-ingested to draft
- Agentic framework is extensible: new workflow plugins can be added without modifying the core engine
For the demo walkthrough and full protocol specification, see Step 26 — Agentic Maintenance Workflows in the Quick-Start Guide, and the Agentic Maintenance Workflows section in the Design Doc.
Installation & Upgrade
New Installation
pip install synthadoc
synthadoc --version # should print 1.2.0
synthadoc install history-of-computing --target ~/wikis --demoConsult the Quick-Start Guide to launch the engine and explore the new features.
Upgrading from v1.1.x
pip install synthadoc --upgrade
synthadoc plugin upgrade
synthadoc demo sync --forcesynthadoc demo sync --force refreshes the History of Computing demo wiki to v1.2.0 templates, including the konrad-zuse page used in the Content Snapshots and Agentic Workflows walkthroughs. Your own ingested pages, .synthadoc/ config, and audit data are never modified.
Other Enhancements & Fixes
Reliability — File I/O:
- All wiki page writes are now atomic (write to
.tmp, then rename) to prevent partial-write corruption if the process is interrupted mid-save - JSON writes (
schedules.jsonand all configuration files) use the same atomic pattern - Line endings are consistently
\nacross all file write paths, fixing subtle diff noise on Windows
API & Lifecycle:
- Pagination
limitparameter no longer has an upper bound — callers can request as many records as needed in a single call /lifecycle/eventsnow uses the databasetotalcount directly instead of re-counting the filtered result, fixing incorrect pagination totals/provenance/citationsnow fetches up to 100,000 rows to compute the accurate total before applying limit/offset- Audit log entries are now recorded for pages bootstrapped from archived frontmatter
Session Skill:
- Large conversation files (100+ turns) are now chunked in 30-turn batches before ingest, preventing provider token-limit errors
- Unknown session formats fall back to Codex-style parsing silently rather than logging a warning
Scheduler:
- Scheduled operations with spaces in arguments are now parsed with
shlex.splitinstead of naïvestr.split, fixing commands that include quoted paths schedules.jsonis written atomically; a crash during a schedule update no longer corrupts the file
Web UI:
- Recent-sessions navigation from the left sidebar now correctly loads the session when the Knowledge Graph panel is active
- Default query timeout raised from 90 s to 300 s to accommodate agentic workflow round-trips
Obsidian Plugin:
- Dialog backdrop now correctly blocks Escape key and outside-click dismissal for lifecycle modals
MCP Integration:
mcpmoved to required dependencies — fresh installs no longer fail withModuleNotFoundError: No module named 'mcp.server.fastmcp'- Duplicate snapshot entries triggered via MCP
write_pagecalls are suppressed
Knowledge Graph:
- Concurrent graph builds no longer race: a lock prevents duplicate simultaneous computations
Security:
- Domain-block filter now correctly matches
www.-prefixed variants of blocked domains
Acknowledgements
Built and maintained by the Synthadoc team.