Changelog

Every release, documented. Follow development on GitHub.

v0.9.9.9 May 11, 2026 Latest

Deploy API Gate Fix, Stale-Window Tuning, Onboarding Polling Cleanup

  • CI / Deploy API gate fix — tests now ANSI-strip Rich-rendered CLI output before substring assertions. v0.9.9.8's Deploy API was blocked on this regression, leaving api.sessionfs.dev stuck at 0.9.9.7. Pipeline unblocked for this release and going forward.
  • Dashboard polling consolidated — removed dead useRunAudit hook; audit polling now lives only in BackgroundTasksProvider. One source of truth, no duplicate timers.
  • Onboarding stops polling on completion — getting-started page no longer refetches state once the user has at least one session AND one project. Cuts idle background traffic for fully onboarded users.
  • Stale windows extended 30s/60s → 300s — folder list and inbox-handoff queries reuse cached data for five minutes instead of seconds. Mutations still invalidate so no correctness risk; the dashboard just stops hammering the API while you read.
  • Helm chart 0.9.11 → 0.9.12, appVersion bumped to 0.9.9.9. Chart evolves independently of app per Helm SemVer.
  • 1,344 backend tests + 109 dashboard UI tests passing · 33 migrations · 22 MCP tools
v0.9.9.8 May 11, 2026

Tier-Aware DLP Caps, Handoff UX Fix, Doctor PATH Drift Detection

  • DLP per-member size cap is tier-aware — was hardcoded 50 MB and ignored SFS_MAX_SYNC_MEMBER_BYTES_PAID overrides. Now derives from effective tier (10 MB free/starter, 50 MB pro/team/enterprise) with a post-redaction guard so a redact-then-repack flow can't bypass the cap.
  • sfs handoff <handoff_id> redirects to pull-handoff — used to fail with "Missing option --to" when recipients ran the command they were emailed. Now prints clear guidance pointing at sfs pull-handoff <id>.
  • handle_errors preserves Typer validation — invalid CLI options no longer get swallowed as a generic "Unexpected error". UsageError / BadParameter pass through with the original Typer formatting and exit code.
  • Manual sync per-session retry of transient exclusions — hard-delete tombstones still respected via atomic check-and-clear under fcntl.flock. TOCTOU-safe: a delete that races against retry can't be silently undone. Malformed deleted.json entries handled defensively across all helpers.
  • sfs doctor detects PATH drift — when pip installs to user-site but the shell PATH points at an older binary, doctor reports the mismatch via shebang parsing and recommends a fix. python -m sessionfs fallback added for shimless environments.
  • Helm chart 0.9.10 to 0.9.11, appVersion bumped to 0.9.9.8.
  • 1,344 backend tests + 109 dashboard UI tests passing · 33 migrations · 22 MCP tools
v0.9.9.7 May 10, 2026

Tier-Aware Sync Caps, dismiss_knowledge_entry MCP Tool, KB Performance Indexes

  • Tier-aware per-member sync size cap — free / starter capped at 10 MB per archive member, pro / team / enterprise at 50 MB. New env vars SFS_MAX_SYNC_MEMBER_BYTES_FREE and SFS_MAX_SYNC_MEMBER_BYTES_PAID for self-hosted overrides. Oversized members surface SyncTooLargeError with actionable guidance.
  • dismiss_knowledge_entry MCP tool — 22nd MCP tool. Idempotent (calling twice is a safe no-op) with full audit triple: dismissed_at, dismissed_by, dismissed_reason. PUT /entries/{id} now SELECT FOR UPDATE locks the row so concurrent dismissals can't tear the audit record.
  • Concept compiler bulk prefetch — collapsed an N+1 (concept candidates × claims) into 1 + 1 + 1 queries. Compile times on knowledge-rich projects drop from seconds to milliseconds.
  • Handoff list batching + recipient_email_normalized index — migration 032. Inbox query plan no longer N+1 over recipients; large org inboxes load in a single round trip.
  • KnowledgeEntry composite indexes — migration 033 adds covering indexes for the list / pending / cursor pagination paths. Default-sort list_entries with high-volume projects is now bounded-time.
  • Dismissal audit columns on knowledge_entries — migration 031 makes dismissed_at / dismissed_by / dismissed_reason first-class so dashboard and audit reports can show "who dismissed this and why" without recomputing from history.
  • Helm chart 3-segment SemVer fix — chart version goes 0.9.9.6 to 0.9.10 (4-segment chart versions are invalid SemVer in Helm). appVersion bumped to 0.9.9.7.
  • Security — pip-audit advisories cleared and dashboard postcss bumped (transitive npm advisory fix).
  • 1,300 backend tests + 109 dashboard UI tests passing · 33 migrations · 22 MCP tools
v0.9.9.6 May 10, 2026

MCP Tier A Read Surface, Tier-Aware Knowledge Rate Limits, Compile Race Fix

  • MCP Tier A read surface — 7 new tools (get_knowledge_entry, list_knowledge_entries, get_wiki_page, get_knowledge_health, get_context_section, get_session_provenance, compile_knowledge_base). Total MCP tool count goes 14 to 21. All tools enforce existing project membership / session ownership checks.
  • list_knowledge_entries rich filters — claim_class, freshness_class, dismissed, session_id query params plus three sort modes (created_at_desc, last_relevant_at_desc, confidence_desc) with stable id tiebreak so identical sort-key values can't reorder.
  • Keyset cursor pagination — opt-in ?cursor=<id> on list_entries (default sort). Snapshot-stable across concurrent inserts/deletes — no skipped or duplicated rows. Server emits X-Next-Cursor on every default-sort page so callers can bootstrap iteration from page 1.
  • Per-user tier-aware knowledge rate limits — free=20, starter=50, pro=100, team=100, enterprise=200, admin=500 requests/hour on POST /entries/add. Bucket key is user_id (not session_id) so MCP manual callers don't share buckets. Admin tier promoted before effective-tier resolution.
  • Project-row lock on compile + concept generation — compile_project_context and auto_generate_concepts both SELECT FOR UPDATE the project row before reading pending claims / creating concept pages. Eliminates duplicate-context-document and duplicate-concept-page races.
  • 413 graceful failure — sfs push / handoff / sync pre-scan archives for oversized members (10MB limit) and surface SyncTooLargeError with actionable guidance instead of an opaque server 413.
  • Compression-safe capture guard — shared should_recapture() helper consulted by all 7 watchers before re-write. Checks deleted-sessions exclusion list FIRST, then compares source JSONL message count against existing .sfs to prevent re-capturing a compressed session as empty.
  • sfs recapture command — manual re-capture flow with CursorComposerPurgedError guard for purged-composer cases.
  • Cross-tool MCP-over-CLI nudge — three-layer fix so agents prefer MCP tools over sfs shell commands: tool descriptions instruct "use MCP instead of sfs", a guidance block is injected into every compiled rules file, and sfs hooks install writes a SessionStart hook for Claude Code that emits the cached compiled output before the first message.
  • Dashboard "Compile now" CTA — workflow hint banner now carries an inline button. Server-side health recommendations fire at any pending count > 0 (was > 20).
  • Pre-upgrade Helm migration Job — runs Alembic upgrade head before the API rolls out, so a self-hosted upgrade that drops a new migration cannot serve traffic against an unmigrated DB.
  • Dashboard manualChunks split — explicit vite.config.ts chunk naming. Main bundle drops from 212 KB to 30 KB (8x smaller); vendors cache separately across deploys.
  • /api/v1/health alias — added alongside /health for self-hosted ingress paths that scope readiness to /api/v1/*.
  • Settings.json fcntl locking — sfs hooks install/uninstall and rules emitter use fcntl.flock on a .sfs-lock file so concurrent invocations can't corrupt the JSON.
  • KB health pending count fix — only counts claims (excludes notes). Notes don't compile, so they shouldn't drive the pending banner.
  • Daemon transient errors no longer exclude sessions — only SyncTooLargeError (413) counts toward the exclusion threshold; transient SyncError failures are retried instead of permanently excluded.
  • 1,279 backend tests + 109 dashboard UI tests passing · 30 migrations · 21 MCP tools
v0.9.9.5 April 17, 2026

First-Run Onboarding, Unified Delete Propagation, Sort & Filter Improvements

  • First-run onboarding — signup auto-authenticates and navigates to /getting-started. Three-step onboarding page (install tool, capture session, create project) with live completion indicators. State-based redirect gate: 0 sessions + 0 projects sends new users to onboarding. API key shown in dismissible banner after signup.
  • Sort direction toggle — ascending/descending on all sort modes in the dashboard. CLI adds --sort messages-asc and --sort tokens-asc for finding small sessions.
  • Tool sort mode — real "Sort: Tool" in the sessions list groups by tool label.
  • Tool filter alias normalization — gemini/gemini-cli and copilot/copilot-cli treated as the same family across list, search, and admin endpoints.
  • Unified 410 delete propagation — structured SyncDeletedError replaces string-based detection. Shared cleanup_deleted_session() helper wired into all three sync paths. Dashboard-deleted sessions are auto-cleaned locally on next sync instead of showing red 410 errors.
  • Full local cleanup on server 410 — removes .sfs directory + SQLite index entry (sessions and tracked_sessions tables) + adds to exclusion list. No more orphaned local copies.
  • Cloud Run min-instances — API deployment now sets --min-instances 1 to eliminate cold-start latency.
  • Migration 030 cross-DB fix — replaced raw PostgreSQL-only INTERVAL syntax with SQLAlchemy Core queries (works on both PostgreSQL and SQLite).
  • sfs delete/restore prefix resolution — now resolves session ID prefixes via local store for all scopes (was only resolving for local/everywhere, not cloud).
  • sfs rules init TTY guard — fails fast with clear message when stdin is not a TTY and --yes is not passed.
  • 1,205 backend tests + 109 dashboard UI tests passing · 30 migrations
v0.9.9.4 April 16, 2026

Session Delete Lifecycle — Three-Scope Delete, Trash/Restore, Admin Purge

  • Three-scope session delete — sfs delete <id> with --cloud (server only, keep local), --local (device only, keep cloud), or --everywhere (both). No default scope — explicit choice required. Confirmation prompt with --force bypass for automation.
  • Sync-aware deletes — autosync respects intentional deletes via ~/.sessionfs/deleted.json exclusion list. Push and pull skip excluded sessions. Un-delete path gated behind X-SessionFS-Undelete header with ETag conflict check — autosync can never reverse a delete.
  • sfs trash — lists soft-deleted sessions in the 30-day retention window with scope badges and purge dates.
  • sfs restore <id> — reverses a soft-delete on the server, clears local tombstone, prints sfs pull guidance when local copy was removed.
  • Dashboard delete dialog — replaces the single confirm() with a two-choice dialog: "Remove from cloud" or "Delete everywhere". One-line explanation per option.
  • Dashboard Trash view — filter toggle on the session list showing soft-deleted sessions with scope badges, purge dates, restore buttons, and scope-aware restore guidance toast.
  • Admin purge endpoint — POST /admin/purge-deleted hard-deletes expired soft-deleted sessions and their blobs. Single-session or bulk. Returns purge count and bytes reclaimed.
  • Restore response guidance — POST /sessions/:id/restore returns restored_from_scope and local_copy_may_be_missing so clients show accurate recovery guidance.
  • DELETE endpoint breaking change — now requires ?scope=cloud|everywhere query parameter (was parameterless). Returns 200 with session record including purge_after (was 204). Old clients without ?scope= get 400.
  • Storage quota fix — soft-deleted sessions excluded from used-bytes calculation.
  • Share links for deleted sessions — return 410 Gone (was 404).
  • Autosync un-delete bug fix — original soft-delete was immediately reversed by autosync pushing the local copy. Now gated by explicit intent header + ETag check.
  • Security — CVE-2026-40347 (python-multipart DoS via crafted multipart preamble/epilogue) + purge endpoint hardening (session_id format validation + atomic audit logging).
  • 1,203 backend tests + 98 dashboard UI tests passing · 30 migrations
v0.9.9 April 14, 2026

Rules Portability — Canonical Project Rules, Five Tool Compilers, Resume-Time Sync

  • Canonical rules per project — new project_rules + rules_versions tables (migration 028) with 4 new instruction-provenance columns on sessions. Managed via GET/PUT /projects/:id/rules and POST /projects/:id/rules/compile with ETag-based optimistic concurrency (SELECT FOR UPDATE row lock).
  • Five tool compilers — deterministic, partial-compile-aware compilers for Claude Code (CLAUDE.md), Codex (codex.md), Cursor (.cursorrules), Copilot (.github/copilot-instructions.md), and Gemini (GEMINI.md). Each embeds a SessionFS managed marker at the top of the file.
  • Knowledge + context injection — compilers pull active claims (default convention + decision types) and project context sections (default overview + architecture) with per-tool token ceilings and progressive condensation.
  • sfs rules CLI — init (auto-detects existing rule files + recent session-history tool usage), edit, show (in-sync state), compile (--tool, --dry-run, --force), push, pull. Default is shared-in-repo; --local-only adds compiled files to .gitignore.
  • Managed-file safety — sfs rules compile refuses to overwrite a user-maintained rule file unless --force is set. Detection reads only the first 512 bytes so markers buried in hand-written content don't trigger false positives.
  • Session instruction provenance — manifests now carry rules_version, rules_hash, rules_source (sessionfs/manual/mixed/none), and instruction_artifacts[]. SFS_CAPTURE_GLOBAL_RULES=off suppresses global hashing for privacy-sensitive environments.
  • Resume-time rules sync — sfs resume preflights the target tool's rule file from current canonical rules before launching the tool (claude-code, codex, copilot, gemini supported). New flags: --no-rules-sync skips preflight; --force-rules overwrites an unmanaged target as a one-time permission (file becomes SessionFS-managed afterward).
  • Source-session provenance display — resume shows the rules version that shaped the original session vs current project rules (e.g. "Source session used rules v3 (sessionfs). Current project rules are v5. Synced codex.md from SessionFS rules v5.").
  • Non-fatal semantics — rules sync failure never fails the resume itself. Warning to stderr, resume continues, exit 0. Partial compiles never bump canonical version history.
  • MCP tools — read-only get_rules and get_compiled_rules for agents. No agent self-modification of rules.
  • Dashboard Rules tab — new RulesTab under ProjectDetail with version badge, static preferences editor, enabled-tools checklist, knowledge/context injection settings, per-tool compiled output viewer, version history, and compile action. ETag optimistic concurrency with 409 toast on stale saves.
  • Helm chart semver fix — 0.9.8.6 was an invalid four-segment chart version. v0.9.9 returns the chart to valid 3-segment semver matching the Python package.
  • Compile hash is marker-independent — content_hash is now the body hash only, so no-op detection doesn't break after a version bump (no more infinite-version-bump loops).
  • Path traversal defense — _safe_target_path() in cli/cmd_rules.py used by both sfs rules compile and resume preflight; validates against canonical TOOL_FILES[tool] and confirms the resolved path stays inside git_root.
  • Concurrent compile + first-create safe — version-number contention retries idempotently; same-body-hash collision short-circuits to no-op; get_or_create_rules catches IntegrityError on first-time creation.
  • Knowledge-injection determinism — claim ordering priority (decision > convention > pattern > dependency) moved into SQL ORDER BY so LIMIT respects it; deterministic id DESC tie-breaker.
  • Security — pytest bumped to >=9.0.3,<10.0 for CVE-2025-71176 (dev-only /tmp DoS).
  • 1,171 backend tests + 89 dashboard UI tests passing · 28 migrations
v0.9.8.6 April 13, 2026

Knowledge Base v2 — Three-Layer Claim Model, Per-Type Freshness, Writeback Gates

  • Three-layer claim model — every knowledge entry is now evidence (raw fact from sync), claim (promoted active truth), or note (rejected/dismissed). Migration 027 adds claim_class, entity_ref, freshness_class, supersession_reason, promoted_at, retrieved_count, used_in_answer_count, compiled_count.
  • Per-type freshness decay — bug 30d, dependency 60d, pattern/discovery 90d, convention 180d, decision 365d. Entries decay current → stale → archived from last_relevant_at.
  • Auto-promotion at compile — evidence with confidence ≥ 0.5 and content ≥ 30 chars is promoted to claim at the start of every compile pass.
  • Writeback gates for agent contributions — add_knowledge defaults to note. Auto-promotes to claim only if specificity gate, semantic dedup (Jaccard-min ≥ 0.85), and rate limit pass. Agents see classification feedback.
  • Supersession + refresh + rebuild endpoints — PUT /entries/:id/supersede retires a claim with a reason and links it to the replacement. PUT /entries/:id/refresh resets last_relevant_at (replaces the old "Still valid" no-op). POST /projects/:id/rebuild + sfs project rebuild force a full re-compile on settled projects.
  • Section pages as true projections — compile iterates ALL slug_map types, not just types in the pending batch. Pages with zero active claims are deleted inline.
  • used_in_answer tracking — MCP ask_project and API search expose a _used_in_answer flag that increments on retrieval, feeding the freshness signal.
  • Dashboard KnowledgeEntriesTab v2 — health banner with stale review queue, claim/freshness badges, filter controls, provenance blocks (entity ref, promoter, retrieved/used counts), promote/supersede/refresh/dismiss actions, rebuild button.
  • Compile default budget lowered to 2,000 words (from 8,000) — active-truth-per-token principle produces sharper context documents.
  • Concept page prune fix — page_type filter was looking for "auto" but concept pages store as "concept", so dead pages were never pruned.
  • Daemon fixes — startup order (settings fetch before full_scan), Codex watcher NoneType crash, sfs daemon stop PID resolution fallback to daemon.json.
  • 1,091 backend tests + 76 dashboard UI tests passing · 27 migrations
v0.9.8.5 April 12, 2026

Security Fixes, Lifecycle Hardening, Dashboard Help, 93 New Tests

  • Security fixes — GitLab webhook user binding (HIGH), GitHub installation claim IDOR (HIGH), effective-tier leak (MEDIUM), pr_comments unique index scoped (MEDIUM)
  • Dashboard Help page — MCP-first guidance, 8-tool installer, agent prompt examples, curated CLI reference, 12-tool MCP reference
  • Admin org endpoints — GET/POST /api/v1/admin/orgs + PUT /api/v1/admin/orgs/:id/tier for internal provisioning
  • Knowledge lifecycle hardening — LLM compile budget enforcement, semantic dedup on all extraction paths, concept page pruning, bulk dismiss-stale endpoint
  • Daemon fixes — Codex watcher null-content crash, startup delay (308 ms vs 96 s), sfs daemon stop fallback with PID resolution
  • Dashboard fixes — signup broken on app.sessionfs.dev, unguarded localStorage hardened via storage helper
  • Helm + Dockerfile hardening — postgres StatefulSet securityContext, helm test hook pod, non-root UID 10001 in both Dockerfiles
  • CVE patches — vite 7.3.2 (3 CVEs), defu 6.1.5 (prototype pollution). Security Scan workflow rewritten with raw trivy binary.
  • Self-hosted Security Posture docs + sfs dlp CLI documentation
  • 1,091 backend tests + 76 dashboard UI tests passing
v0.9.8.4 April 10, 2026

Dashboard Help Page, Signup Fix, Security Hardening

  • New dashboard Help page — 8-tool MCP installer, agent prompt examples, curated CLI reference, full 12-tool MCP reference
  • Signup fix — VITE_API_URL baked into production bundle; api.<domain> derived from app.<domain> in fallback chain
  • Helm chart + Dockerfile hardening — postgres StatefulSet securityContext, non-root UID 10001
  • Security Scan workflow rewritten; 4 CVE patches (vite, defu)
  • 1,052 backend tests + 22 dashboard UI tests passing
v0.9.8.3 April 9, 2026

Connection Pool Optimization, Sync Atomicity

  • Client-side upload concurrency limiter and per-user server semaphore with 429+Retry-After
  • sync_push split into phases — DB connection held ~70ms instead of ~5s
  • Commit-then-promote sync with temp blob preservation; PK constraint for creates, FOR UPDATE for updates
  • New /health/pool endpoint for pool utilization metrics
  • Sync summary shows error count alongside pushed/pulled/conflicts
v0.9.8.2 April 9, 2026

Database Pool Configuration

  • Configurable SQLAlchemy pool via SFS_DATABASE_POOL_SIZE (20), SFS_DATABASE_MAX_OVERFLOW (40), SFS_DATABASE_POOL_TIMEOUT (60s), SFS_DATABASE_POOL_RECYCLE (1800s)
  • pool_pre_ping=True — stale connections detected before checkout
v0.9.8.1 April 9, 2026

Knowledge Base Lifecycle, Billing Isolation

  • Entry decay (0.8x confidence after 90 days unreferenced), auto-dismiss past retention period
  • Quality gates — 20 char minimum, 20/hr rate limit per session, 85% similarity rejection
  • Context document 8,000 word budget with priority-aware trimming; section page caps (30 items)
  • Concept auto-refresh on 50% cluster growth; auto-delete when all entries dismissed
  • Actionable health endpoint; sfs resume --model for target tool selection
  • Billing webhook isolation — org state only mutates on positive customer_id AND subscription_id match
  • Migration 025: lifecycle fields on knowledge_entries + project settings
v0.9.8 April 9, 2026

DLP / Secret Scrubbing

  • Pre-sync content protection — 14 PHI patterns and 22 secret patterns
  • Three enforcement modes: BLOCK, REDACT, WARN — server-side scan of all archive files
  • Org policy via settings JSON; custom patterns and allowlist support
  • CLI: sfs dlp scan, sfs dlp policy; sfs push shows DLP preview
  • Dashboard: Settings > DLP tab for admins; session detail shows findings
  • DLP API feature-gated to Pro+; migration 024 (dlp_scan_results column)
  • 43 new DLP tests
v0.9.7.1 – v0.9.7.4 April 6–7, 2026

Dashboard UX Overhaul, Docs Refresh, MCP Roots, Billing Isolation

  • MCP workspace detection via roots/list protocol; explicit git_remote parameter on all 6 project-scoped tools
  • 0-byte index.db recovery — auto-rebuild on truncated files
  • New docs: knowledge base, dashboard guide, organizations, billing & tiers
  • CLI reference updated with 15 missing commands; all 12 MCP tools documented
  • Dashboard code splitting — main bundle 676KB → 262KB; 12 lazy route chunks
  • Command palette search (Cmd+K), mobile nav drawer, focus trapping, ARIA live regions, Zod form validation
  • Sessions hero redesign, project card health badges, typography polish, product identity sync
  • Billing isolation — org Team checkout uses separate Stripe customer, webhooks org-first
  • Handoff security — recipient verification on claim, claimed summaries blocked, session ID persisted
  • Knowledge compiler content-level dedup across batches; backfill on project creation
  • Share-link passwords moved to POST body with PBKDF2-HMAC-SHA256 hashing
  • GitHub webhook signature enforcement; GitLab MR comment dedup; per-user webhook secrets
  • Migrations 020–023
v0.9.7 April 4, 2026

Living Project Context, Wiki Pages, 12 MCP Tools, Self-Healing Index

  • Living Project Context — auto-summarize on sync, knowledge entries (6 types), structured compilation
  • Wiki pages with multi-document structure, backlinks, and section pages
  • 12 MCP tools — 3 write tools + 2 search tools added
  • Auto-narrative toggle per project (LLM narrative on sync)
  • Self-healing SQLite index — auto-rebuild from .sfs files on corruption
  • sfs doctor — 8 health checks with auto-repair
  • handle_errors decorator on all CLI commands (no raw tracebacks)
  • Message pagination with newest-first default and order toggle
  • Dashboard: Knowledge Entries, Pages, History tabs on project detail
  • Project-level access control on all 13 knowledge + wiki routes
  • CLI: sfs project compile, entries, health, dismiss, ask, pages, page, regenerate, set
  • 1,052 tests passing
v0.9.5 March 30, 2026

FSL Licensing, Organizations, Stripe Billing, Security Pipeline

  • FSL licensing — MIT core + FSL enterprise with Helm license validation
  • Server-side tier gating (5 tiers, 30+ feature flags)
  • Organizations + RBAC (admin/member roles, org management)
  • Stripe billing integration with subscription lifecycle
  • LLM Judge revamp — confidence scores, CWE mapping, evidence linking, dismiss/confirm
  • Narrative LLM summaries for session overviews
  • Dashboard analytics + resume preview
  • Handoff UX — status stepper, session context display
  • CLI: sfs init wizard, sfs org, sfs security scan
  • 7 MCP tools (added get_session_summary, get_audit_report)
  • Security pipeline — Dependabot, Trivy, Bandit, pip-audit
  • 921 tests passing
v0.9.3 March 28, 2026

Judge V2, Session Summarization, GitLab Integration

  • Severity-classified findings (CRITICAL, HIGH, LOW) with auto-categorization
  • Contradictions-first audit dashboard with metric cards
  • Audit history stored in database with model comparison
  • GitLab MR integration (cloud + self-hosted)
  • Auto-audit trigger (manual, on_sync, on_pr)
  • Session summarization — files, tests, commands, packages extracted automatically
  • Claim extractor fixed for Claude Code sessions (0 claims to 50+)
  • 848 tests passing
v0.9.0 March 28, 2026

Autosync, Handoff Session Copy, Single-Ingress

  • Autosync with three modes: off, all, selective (per-session watchlist)
  • Handoff claim now copies session blob and creates recipient's session
  • Single-ingress via dashboard nginx (removed separate API/MCP ALB targets)
  • Nginx client_max_body_size 100m for session uploads
  • 835 tests passing
v0.8.2 March 27, 2026

Custom Judge Base URL, Project Context, Resume Auto-Launch

  • Custom base URL for LLM Judge (LiteLLM, vLLM, Ollama, Azure OpenAI)
  • Shared project context (sfs project init/edit/show + MCP tool)
  • Resume auto-launches native tool (Claude Code, Codex, Gemini)
  • Codex resume format fixed (source: "cli", missing fields added)
  • 819 tests passing
v0.8.0 March 26, 2026

Storage Management, EKS Fixes, Multi-Provider Email

  • Local storage management: sfs storage, sfs storage prune
  • Multi-provider email: Resend, SMTP, NullProvider
  • EKS deployment fixes: security contexts, nginx non-root, asyncpg SSL
  • Gemini model extraction from logs.json
  • 763 tests passing