Upgrade guide
How to upgrade between sessionwiki releases. Most releases are drop-in
(pip install -U sessionwiki or brew upgrade sessionwiki) — this page
documents the exceptions: schema migrations, config changes, and
behaviour flips that affect what happens on your next sync.
The canonical per-release detail is CHANGELOG.md — this guide focuses on "what might break".
v1.3.0 — consolidated 1.2.x patch roll-up
Released: 2026-04-26.
Summary
Drop-in upgrade from any 1.2.x. v1.3.0 consolidates 38 in-tree patch versions (1.2.1 → 1.2.38) under one minor release tag — no breaking API changes, no schema migrations, no config changes.
pip install -U sessionwiki # → 1.3.0
sessionwiki --version # → 1.3.0
What's in it
The full per-fix detail is preserved under the [1.2.x] entries in
CHANGELOG.md. Two themes:
-
Opus 4.7 deep code-review backlog (#403, ~26 issues) — every correctness, perf, and observability finding got a one-issue-one-PR fix. Headliners:
is_subagentstrict path check (#406),derive_session_slugUUID-prefix collision (#424), tilde-fence counting in_close_open_fence(#419),wiki_queryranking length normalisation (#418),wiki_searchcap (#413), per-vault synth state (#420),--forcesync persisting_meta/_counters(#426), subprocessclaude_pathresolved viashutil.which(#421). -
Performance + features —
DuplicateDetectionlint rule rewritten with bucket+fingerprint+SequenceMatcher (1s vs minutes on 500 pages, #412), perf-budget test suite (-m slow, #429),md_to_plain_textcache (#417), auto-seeded project stubs pre-populated from session metadata (#425), 2 new lint rules (frontmatter_count_consistency,tools_consistency, #378),wiki-allslash command,_context.mdfolder convention (#60).
Breaking — none
Same CLI surface, same config schema, same on-disk state format.
The only thing that changed is that the next plain sync after a
forced re-sync will now correctly identify already-processed files
as unchanged (was: re-processed every time, #426).
Schema migrations — none
State files written by 1.2.x are read verbatim by 1.3.0.
v1.2.0 — first stable on the 1.x line
Released: 2026-04-25.
Install changes
- PyPI distribution name — upstream llmwiki was published as
llm-notebookbecausellmwikiwas taken on PyPI. sessionwiki uses one name everywhere (distribution, module, CLI): ```bash pip install sessionwiki # upstream: pip install llm-notebook sessionwiki --version # upstream CLI: llmwiki --version python3 -c "import sessionwiki" # still works (import name unchanged)
### Removed CLI subcommands
The CLI was slimmed in #362. If you scripted any of these, replace as
noted:
- `sessionwiki schedule` — removed. Schedule `sessionwiki sync` directly via
your OS's job runner (launchd / systemd / Task Scheduler).
- `sessionwiki install-skills` — removed. Manually copy
`.claude/commands/wiki-*.md` into `~/.claude/commands/` for global
availability.
- `sessionwiki check-links` — removed. Use the GitHub Actions link-check
workflow instead.
- `sessionwiki watch`, `sessionwiki manifest`, `sessionwiki link-obsidian`,
`sessionwiki export-obsidian`, `sessionwiki export-marp`, `sessionwiki export-qmd`,
`sessionwiki eval` — also removed.
- `sessionwiki export marp` is the new path for Marp slide export.
### Removed adapters
`jira_adapter`, `meeting`, `pdf` were removed in #363. If you depended
on any of them, pin v1.1.0-rc8 until you migrate.
### Demo data correctness
`user_messages` / `tool_calls` counts on the 8 demo session files were
2–10× higher than the body actually contained. The values are now
recomputed from body content. Two new lint rules (`#16
frontmatter_count_consistency`, `#17 tools_consistency`) prevent
regression.
### `sync --force` no longer drops colliding sessions
If you ran `sync --force` against a corpus where two sources had the
same canonical filename (rare but real on large corpora), one of them
was silently overwritten. Fix: per-run filename tracking now
disambiguates regardless of `--force`. Affected ~200 of 495 sessions
on a real corpus we tested.
### New: `sessionwiki all`
One-shot pipeline runner for CI:
```bash
sessionwiki all # build → graph → export → lint
sessionwiki all --strict # exit 2 on any lint warning
Schema migrations
None. JSON sibling files now correctly emit int and bool types for
user_messages / tool_calls / is_subagent (were strings); any
downstream that string-compared is_subagent == "false" now needs
is_subagent is False.
v1.1.0-rc5
Released: 2026-04-21.
New behaviour
-
Session transcripts strip project-local file refs. Anchors pointing at
tasks.md,user_profile.md,settings.gradle.kts,.kiro/…,/Users/…, etc. are unwrapped into inline<span class="session-ref dead-link">— the filename stays visible but the anchor doesn't 404. No action required. -
README.mdandCONTRIBUTING.mdnow compile as site pages.site/README.htmlandsite/CONTRIBUTING.htmlship alongsidechangelog.html. Link rewriter routes to the compiled page instead of GitHub for these two files. -
/wiki-synthesizeslash command — wrapssessionwiki synthesizewith natural-language flags ("estimate cost", "dry run", "force"). Copy.claude/commands/wiki-synthesize.mdinto~/.claude/commands/for global availability. (sessionwiki install-skillswas removed in v1.2.0; manual copy is the supported path.) -
Dual-mode docs landing pages.
docs/modes/api/anddocs/modes/agent/exist as skeletons; the actual API / Agent backends ship with #315 / #316.
Schema migrations
None. Fully backwards-compatible with rc4 state files.
Breaking
None.
v1.1.0-rc4
Released: 2026-04-20.
New behaviour
- Obsidian is opt-in now. Past versions fired the Obsidian adapter
on every
syncby default. If your workflow relied on that, add this tosessions_config.json:
```json { "obsidian": { "enabled": true } }
Context: [#326](https://github.com/Pratiyush/llm-wiki/issues/326).
Runs as of rc3; surfaced in `sessionwiki adapters` column `will_fire`.
- **Graph clicks respect compiled-site existence.** Nodes whose
corresponding page wasn't rendered to HTML show a tooltip instead
of opening a 404. No action needed — if you see the tooltip on
entity / concept / nav pages that's the new design.
- **Backlinks now propagate.** Run `sessionwiki backlinks` once to inject
managed `## Referenced by` sections into every linked-to page.
Idempotent, dry-runnable, prune-able:
```bash
sessionwiki backlinks --dry-run --verbose # preview
sessionwiki backlinks # commit writes
sessionwiki backlinks --prune # strip every block
Schema migrations
-
.llmwiki-state.jsonkeys rewrite from absolute paths to<adapter>::<home-relative-path>on first load under rc3+. Migration is automatic and idempotent. If you moved your repo to a new machine, old state will be preserved verbatim — re-sync to reindex. -
.llmwiki-quarantine.jsonis a new local file (gitignored). First appears when a convert error happens. Inspect withsessionwiki quarantine list. -
Frontmatter
tags:/topics:convention is lint-enforced (rule #14tags_topics_convention) — projects usetopics:, everything else usestags:. Runsessionwiki tag conventionto see violations.sessionwiki tag rename <old> <new>rewrites across every page.
Breaking — none
No breaking CLI or config changes. Every test pre-upgrade keeps passing post-upgrade.
v1.1.0-rc3
See the release notes for the full rc3 gap-sweep bundle. No migration required.
v1.0.0 → v1.1.0-rc1
Config: synthesis.backend now accepts "ollama" in addition to the
default "dummy". See docs/reference/prompt-caching.md for the
ollama setup.
wiki/candidates/ directory is new — created automatically by ingest
when it sees a brand-new entity/concept. Triage with /wiki-candidates
(renamed from /wiki-review in rc3).
Older versions
Pre-v1.0 milestones shipped under internal sprint tags. Upgrade from
v0.9.x to v1.0.0 in one step — no intermediate migration required. If
you're on a pre-0.9 build, start fresh: sessionwiki init in a new tree
and re-run sync.