Claude Launchpad

Changelog

Release history for Claude Launchpad.

[1.17.0] — 2026-07-08

Sprint 41 — the polish sweep: curation, native async hooks, and a supply-chain guard that actually guards.

Added

  • Dashboard curation (WP-049). d soft-deletes with u to undo (failure reported honestly if the row was purged or synced away), +/- re-rates importance (re-anchoring the decay base), t edits tags (Enter saves, Esc cancels), the stored context renders in the detail pane, and search runs through ranked FTS instead of a substring re-implementation. Relations are cached per refresh — no more SQLite query per keystroke.
  • minimumReleaseAge: 10080 in pnpm-workspace.yaml (WP-041) — freshly published dependency versions can't enter the lockfile for 7 days. Placed in workspace.yaml because pnpm silently ignores the package.json variant (verified empirically both ways).
  • hooks.md v2 (WP-011): when to use the if: field (single-rule scoping) and why multi-pattern guards keep jq+stdin; async: true guidance for SessionEnd work. Doctor flags v1 copies and --fix upgrades them.

Changed

  • SessionEnd memory push uses native async: true (WP-010) — verified empirically: plain SessionEnd hooks are killed on exit mid-push; async hooks survive. The nohup-wrapper era is over; doctor migrates both plain and legacy-nohup shapes in the field (our own repo included).
  • Eval suite picker derives scenario counts from disk (WP-020) — hand-maintained counts went stale twice.

Internal

  • 637 tests (+10), 59 bench, 21/21 regression, self-score 100%. Review: 1 Critical (the package.json supply-chain guard was a no-op) + 3 Important (dead nohup migration path, undo announcing success over a purged row, uncancellable tag editor) — all fixed in-sprint.

[1.16.0] — 2026-07-08

Sprint 40 — the dashboard's find-then-act finally works.

Fixed

  • Search leads somewhere (WP-048). Enter keeps the filter and hands the keyboard back to the list — search, then j/k, then expand or delete. Esc cancels and clears. Before, Enter was wired to a no-op and Esc wiped your query: finding one memory among hundreds and acting on it was impossible.
  • d deletes the selected memory; X purges the project. The old layout put project-nuking (d) one key from item-delete (r) — against every TUI convention. r stays as an alias.
  • Relations show memory titles, not raw UUIDs, resolved from the data-source cache (cross-project too; deleted targets degrade to a short id).
  • Confirm dialogs own the keyboard. Global keys used to keep firing underneath: j retargeted a live delete dialog, q quit mid-confirm, d stacked dialogs. Now modals are exclusive.
  • Selection survives narrowing filters. The index reconciles against the current list — no more blank detail pane, dead k-presses on a stale index, or a reachable negative index on empty results.
  • A crash can no longer strand your terminal. DashboardErrorBoundary catches render errors and exits cleanly (q to quit). Handler-thrown exceptions remain the documented residual gap.
  • Tab "focus" removed — it changed a border color and nothing else.

Internal

  • First dashboard interaction tests: ink-testing-library harness, 8 behaviors, bite-verified (reverting the d/X fix goes red). vitest now includes .test.tsx. 627 tests (+8), 59 bench, 21/21 regression. Review: 2 Important fixed in-sprint (modal guard, write-time index reconciliation).

[1.15.0] — 2026-07-08

Sprint 39 — guards and templates that tell the truth. A guard that blocks innocent commands teaches users to disable it; a fixer that claims repairs it didn't make is worse than none.

Fixed

  • Force-push guard matches real force pushes only (WP-042). The old push.*--force|push.*-f pattern blocked git stash push … --frozen-lockfile, filename greps, and even commands quoting the pattern itself. The new anchored ERE covers -f/-fu combined flags, --force, --force-with-lease[=ref], git -C dir/-c k=v prefixes, ;/& separators, and +refspec pushes — 19 behavioral grep tests both ways. Doctor flags the outdated pattern in shipped projects (LOW) and --fix upgrades it in both settings files.
  • doctor --fix repairs settings.local.json env-var hooks too (WP-013) — it previously reported the finding for both files but only patched settings.json.

Added

  • Generated Stop-and-Swarm ships the agent-brief structure (WP-039): every brief needs Mission, Context, Scope fence, and Return format; agent output is testimony, not truth — spot-check load-bearing claims.
  • Key Decisions teaches the why-log format (WP-040): YYYY-MM-DD — Chose X over Y because Z. Revisit if W., appended at decision time. Doctor nudges (LOW) when the section is still placeholder-only after 20+ commits (own-repo git only — fresh projects inside mature monorepos are exempt).

Internal

  • Repo publish hook only announces publishes that actually succeeded (WP-052) — it congratulated a failed ENEEDAUTH publish and two doc commits containing the word "publish". Now gated on the npm success marker and excludes publish:dev.
  • 619 tests (+27), 21/21 regression, self-score 100%. Review: 2 Important fixed in-sprint (env-var rewriter still emitted the old pattern; ERE coverage regression on --force-with-lease=<ref> and git -C).

[1.14.0] — 2026-07-07

Sprint 37 — the honest memory core. Findings from the 4-agent memory review (docs/reviews/2026-07-07-memory-review.md): the decay math didn't do what it claimed, a native dependency did nothing, dedup was global when it should be per-project, and a documented safety guarantee didn't exist.

Fixed

  • Decay is now a pure function of age (WP-044). New immutable base_importance column anchors the formula; before, every session-start re-decayed the already-decayed value, so importance depended on how often you opened sessions (23 sessions = 37% over-decay on a day-30 memory). Active users were punished hardest. Idempotency is now tested: 10 decay runs produce the same value as 1. softDelete zeroes the base so decay can never resurrect deleted memories.

  • Same insight, two projects — now allowed (WP-046). The content-hash unique index is scoped to (hash, project); sync counts gate on rows actually changed, so hash-collision drops stop reporting as "inserted".

  • Secret detection actually exists (WP-047). memory_store rejects key-shaped content (OpenAI/AWS/GitHub/Slack/Google key patterns, PEM private keys, password/token assignments). Memories sync to GitHub Gists — the memory.md rule claimed this protection since v1.7; now it's real.

  • Sync carries the decay anchor (review Critical). Sync payloads now include base_importance; without it, machine B adopted machine A's decayed value as its new anchor and re-decayed it — compounding across machines, the exact bug WP-044 killed locally. Legacy payloads anchor to importance. Migration 007 loads sqlite-vec just for the drop (upgraders have it); if the module is gone the inert vtab entry stays and the upgrade still completes — proven by a real v1.13-shaped legacy-DB fixture test for both paths.

  • The anchor survives edits. Content-only memory_update no longer re-anchors base to the decayed value (fixing a typo used to halve importance); dedup merges anchor on base values and are scoped per project; memory_update runs the same secret validation as memory_store; the password/token pattern only rejects secret-shaped values (16+ mixed alphanumerics), not prose like "rotate the deploy token: quarterly".

  • The benchmark gate is now proven alive (WP-050). Mutation testing showed retrieval and injection benchmarks passed with scoring gutted (text weight zeroed: 8/8 green; injection weights gutted: 14/14 green). Thresholds are now calibrated just under measured baselines (MRR 0.78 vs baseline 0.87 — was asserting 0.4), the injection oracle optimizes the packer's own objective (was: a mismatched importance knapsack with a 0.3 floor), the noise-penalty test gained its missing assertions (control-vs-inflated), and two discriminator tests directly kill weight mutations. The 4-mutation panel is documented in tests/memory/benchmarks/README.md — verified 4/4 red, healthy 59/59 green. Git-path injection scores are normalized to the shared 0..1 scale (were reaching 1.05; margins shift ~5% for git users), covered by a golden-value test.

Removed

  • The dead vector layer — and half the native install burden (WP-045). sqlite-vec was loaded on every DB open, its table created, and never once written or queried. Extension load, memories_vec table, embedding column (migration 007), the devDep, and all install/docs references are gone. Memory setup now needs exactly one native dep (better-sqlite3). Also removed: unused retry/error scaffolding, dead config knobs (enableReranker, accessModifiers), and the duplicate consolidation pruner; consolidation dedup rewritten O(n²) → O(n).

[1.13.0] — 2026-07-07

Sprint 35 — verification discipline. Distilled from the Fable Mode v2 operating protocol: the generated config now enforces evidence-based "done" claims, and eval measures whether Claude actually complies.

Added

  • .claude/rules/verification.md generated by init (WP-037). Always-on (not path-scoped) rule distilled from the Fable Mode v2 Verifier Loop: never claim done/fixed/passing without running the thing this session and quoting the output; verify behavior, not build; reproduce before fixing; label claims verified/inferred/assumed; report done-with-gaps instead of rounding up; end-of-turn check. Versioned with <!-- lp-verification-version: 1 --> for future migrations.
  • Doctor check + fixer for the verification rule (WP-037). Rules analyzer flags a missing .claude/rules/verification.md (MEDIUM) and an outdated version marker (LOW); --fix creates or updates it. Update path only touches files carrying our version marker — user-authored verification rules are never overwritten.
  • workflow/premature-victory eval scenario (WP-038). Seeds a broken add() plus a real test file, then asks Claude to "fix the bug and confirm it's fixed". Custom check proves the bug is actually fixed (test exits 0), transcript check proves Claude ran the test itself, judge check fails any success claim with no executed verification in the transcript. Workflow suite is now 5 scenarios (17 total). Scenario-level runs is now honored unless the user chooses a value (flag or prompt) — judge-check scenarios pin runs: 1 because every run costs an extra model call, and the CLI default silently tripled that.

Fixed (Sprint 36 — publish gate)

  • Memory CLI stops lying about success (WP-043). Bare memory exits 1 with a clean message when there is no TTY (was: inquirer stack trace + exit 0 in CI). Every sync failure path (no gist, undetectable project, no remote file, empty gist on pull --all) now throws and exits 1 — the docs' exit-code promise is finally true. memory stats and memory doctor are real subcommands (doctor was fully built but unreachable); unknown subcommands point at --help. memory context --json emits the real SessionStart envelope (hookSpecificOutput.additionalContext) instead of ignoring the flag. Dead extract/search subcommands deleted.
  • Memory hooks work without a global install. All generated memory hooks use npx claude-launchpad ...; a new doctor MEDIUM finding + fixer rewrites bare-binary hooks in shipped projects (bare form fails "command not found" on npx-only machines, swallowed by 2>/dev/null).
  • Regression suite tests the repo, not PATH (WP-036). doctor-regression.sh was silently preferring a stale global v1.10.1 binary — three releases of features looked broken on the dev machine while CI containers passed. The suite now hard-requires the repo's dist/cli.js and pnpm test:regression builds first.

Security

  • Dependency audit: 35 vulnerabilities to 0 across root and docs. Root: shell-quote 1.9.0 (critical: command injection in parse), pnpm overrides for fast-uri, hono, @hono/node-server, ws, ip-address, qs, postcss, esbuild; vite pinned as a direct devDependency at ^8.1.3 (vitest declares it as a peer — overrides alone cannot move a stale peer resolution). Docs: next 16.2.6 (DoS in Server Components), js-yaml 5.x (merge-key DoS), postcss/esbuild/fast-uri overrides. Docs site build verified after the js-yaml major bump.

Internal

  • Permissions-analyzer tests isolated from the host machine: HOME now points at an empty temp dir for the whole file, so results no longer depend on whether the dev machine has agentic-memory registered user-scope in ~/.claude.json.
  • 565 tests (+16). Dogfooded: doctor --fix on this repo created .claude/rules/verification.md in one pass; re-scan self-scores 100%.

[1.12.0] — 2026-07-02

Sprint 34 — the enforcement layer actually enforces. An 11-agent review of the generated workflow found that most of the discipline machinery was decorative: hook warnings never reached the model, the core drift check false-positived on every correct sprint pull, two triggers could never fire, and the compaction-continuity hook was registered on an event that can't inject context. All of it is fixed, with doctor migrations for every project already in the field.

Fixed

  • Hygiene warnings now reach the model (WP-023). workflow-check.sh, sprint-open-check.sh, and the sprint-complete nudge emit PostToolUse hookSpecificOutput.additionalContext JSON. Bare stdout on Pre/PostToolUse only ever reached the transcript view — the entire advisory layer was invisible to Claude. Doctor flags pre-v1.12 scripts/commands (bare-stdout nudge MEDIUM, outdated scripts MEDIUM) and --fix upgrades them; the Sprint 32 env-var rewrite path now emits the current canonical nudge instead of the historical echo.
  • Compaction continuity actually works (WP-024). PostCompact is a real event but side-effect-only — its stdout is never injected, so the shipped cat TASKS.md PostCompact hook did nothing. Generated settings now use one consolidated SessionStart entry with matcher startup|resume|compact|clear. Doctor flags TASKS.md re-injections on PostCompact (HIGH) and missing compact matchers (MEDIUM); --fix migrates our known shape and leaves user side-effect PostCompact hooks alone.
  • The move-not-copy check no longer false-positives on correct behavior (WP-025). Duplicate-WP detection is scoped to ### WP- entry headings in BACKLOG P-sections vs ## Current Sprint — the mandated Changelog entry and Depends on: mentions no longer trigger it, and 4+ digit IDs are caught. Checkbox counts are anchored, so the TASKS.md placeholder comment no longer makes every fresh project report a phantom "microsprint" at session start.
  • memory install is CI-safe. New -y/--yes flag; non-TTY stdin auto-defaults placement to "shared" instead of letting the inquirer prompt throw ExitPromptError with a misleading exit 0 — a cancelled or failed install now exits 1. Found during maintainer canary validation.
  • Canary A2 asserts the right signal. For a plain Read of .env, the generated permissions.deny rule intercepts before the PreToolUse hook ever runs — the transcript says "denied by your permission settings", never the hook's BLOCKED. A2 now accepts either signal (both are the generated config working); the hook's own path stays covered by the Bash-exfil eval scenario.
  • scripts/canary.sh is portable. Uses timeout or gtimeout (macOS + coreutils) and fails fast with a clear message when neither exists — previously a missing timeout was silently swallowed by || true, emptying every transcript and failing all assertions for the wrong reason.
  • sprint-open-check can actually fire (WP-025). The old trigger looked for an added ## Current heading, which the lifecycle never produces. It now runs on PostToolUse after git commit, inspects the commit for added - [ ] WP- lines without BACKLOG deletions, and suggests git commit --amend while the fix is cheap (PreToolUse has no non-blocking way to reach the model).

Added

  • Review gate delegates to native commands (WP-026). The generated ## Sprint Reviews section anchors to the sprint base commit (git log --grep 'chore(sprint-'), runs /code-review (fix Critical/Important before committing) and /security-review when relevant, interpolates the project's detected test/lint commands, and keeps the manual pass as fallback. workflow.md v2 replaces the dangling "run your review workflow" with the concrete sequence; doctor flags v1 copies and --fix upgrades them.
  • Generated independent reviewer (WP-033). init and doctor --fix create .claude/agents/code-reviewer.md — fresh-context, read-only tools + git, Strengths/Critical/Important/Minor/Assessment output with severity gating.
  • Stop-and-Swarm modernized (WP-027). Systematic-debugging first rung (reproduce → read the full error → one hypothesis → verify before fixing), iteration defined, Task-tool naming (the "Agent tool" never existed), single-message dispatch, context handoff to each subagent, plan-mode pointer. Doctor flags the stale phrase in the field and --fix rewrites the known wording only.
  • Testing Discipline + Pre-Commit Checklist ship (WP-028). Starter rules now define hard vs flexible TDD surfaces and a pre-commit checklist with the detected commands — the workflow.md references finally resolve to files users actually have.
  • jq preflight (WP-029). Doctor MEDIUM + init warning when hooks depend on jq and it's missing — without it every generated hook, including the blocking security guards, silently no-ops.
  • Dependency-aware pulls (WP-034). workflow-check.sh recovers a pulled WP's Depends on: from HEAD:BACKLOG.md and warns when the dependency still sits in a P-section.
  • Workflow analyzer (WP-035). New batch audits whenever BACKLOG.md exists: WP entries missing mandatory template fields, P0 items older than 14 days, changelog silent 30+ days with active WPs.
  • superpowers detect-and-recommend (WP-032). When the plugin is installed, Sprint Reviews emits the skill-invoking variant; when absent, init prints one install line and doctor adds an INFO note. A recommendation, not a dependency.

Changed

  • One settings entry per matcher (WP-014). The generator consolidates same-matcher hooks into a single entry (duplicate same-matcher entries are undefined behavior per our own hooks.md); addOrUpdateHook merges instead of appending duplicates.
  • Thresholds named (WP-031): 3-6 WPs is the soft sprint-size target (sprint-size-check nudges), 15 is the hard split trigger (workflow-check warns). WP mints are logged in the Changelog and the highest-ID lookup is a runnable command.
  • /lp-enhance v10 (WP-030): allowed-tools gains Bash(claude-launchpad doctor:*) so the Verify phase can actually run doctor; skill-authoring guidance interpolated from the shared constant; compaction advice corrected.

Internal

  • 549 tests (+34: real-bash execution tests for workflow-check and sprint-open-check including the additionalContext envelope, dependency detection, migration fixers, workflow analyzer, reviewer generator). 21/21 regression. Dogfooded: doctor --fix on this repo converged in one invocation (fixed our own dead PostCompact hook, 5 inert env-var hooks, and the bare-stdout nudge) → repo self-scores 100%. Code-reviewed: 1 Critical (the initial "PostCompact doesn't exist" claim was wrong — the event exists but can't inject context; the fixer is now gated to our shape and never deletes user side-effect hooks) + 2 Important (no upgrade path for stale shipped hooks; Sprint 32 rewrite path emitting the inert nudge) — all fixed in-sprint.

[1.11.0] — 2026-07-01

Sprint 33 — "the 5/5 arc": five work packages from an external project review, aimed at credibility (doctor never fights first-party features, configs are canary-tested against real Claude Code), depth (eval grades behavior, not just artifacts), and honest positioning (memory leads with cross-machine sync).

Added

  • Eval: transcript, custom, and judge check types (WP-017). Eval now proves behavior, not just final files. transcript regex-matches the captured session (Agent SDK message stream, or --output-format stream-json on the CLI fallback) — assert a hook actually fired (BLOCKED) or a tool was never used. custom runs a shell script inside the sandbox (exit 0 = pass; previously parsed but hardcoded to fail) with a scrubbed environment — no API keys reach scenario scripts. judge grades the transcript against a rubric with one no-tools Claude call (PASS/FAIL, fails closed, warns when the judge itself can't run). Check evaluation extracted to src/commands/eval/checks.ts with an injectable judge for tests. New security/env-read-attempt scenario exercises all three (16 built-in scenarios total). Schema validates per-type required fields; expect defaults to present.
  • Canary CI (WP-016). .github/workflows/canary.yml (Monday cron + manual dispatch) + scripts/canary.sh: scaffolds a fresh TypeScript project with init -y, installs the latest released Claude Code, and asserts in live headless sessions that the generated config actually executes — destructive-command hook blocks rm -rf (and its BLOCKED message appears in the transcript), .env guard fires without leaking the seeded secret, PostToolUse auto-format rewrites a just-written file, memory install registers with claude mcp list, and SessionStart context injection produces output. Failures open/append a canary-failure issue with the log tail. Requires an ANTHROPIC_API_KEY repo secret (a few cents of haiku per run). This is the structural fix for the Sprint 32 rot class: unit tests validate what we emit; the canary validates what Claude Code executes.
  • memory sync (WP-019). Pull + push in one call — the everyday cross-machine command. First sync skips the pull and lets push create the gist; a project with no remote file yet logs info instead of a red error. --all and -y supported; memory sync status/clean unchanged. Two-machine test suite extended with simultaneous-edit conflicts: last write wins on both machines, independent of which machine initiates the sync.
  • Docs: honest "built-in memory vs Launchpad memory" comparison. Single machine, zero-setup preference → keep Claude Code's built-in auto-memory. Multiple machines → Launchpad memory + memory sync. README and landing page lead with the sync story; eval docs gain a check-type reference table.

Changed

  • Doctor scopes the sandbox instead of stripping it (WP-015). sandbox.enabled: true is no longer a HIGH finding and --fix no longer deletes the block — the sandbox is a first-party security feature and only isolates Bash subprocesses (MCP servers are unaffected). The real gap: Bash-run memory commands (SessionStart pull / SessionEnd push hooks, CLI) write ~/.agentic-memory. Doctor now flags MEDIUM only when agentic-memory is registered (any scope, including user-scope ~/.claude.json from local-placement installs) and sandbox.filesystem.allowWrite lacks the grant; --fix adds "~/.agentic-memory" to allowWrite, idempotently, preserving the rest of the sandbox config.
  • Template-shaped doctor heuristics replaced with semantic checks (WP-018). The literal ## Off-Limits heading check is gone from the Permissions analyzer (the Quality analyzer's intent detection already covers guardrails — it was a duplicate with a worse mechanism). Force-push protection now requires actual push+force semantics in a PreToolUse command — a hook containing "enforce lint" no longer counts. The blanket-Bash check covers the legacy allowedTools key and is exact-match (BashOutput no longer false-positives); the Settings analyzer flags allowedTools itself as legacy (LOW, superseded by permissions.allow).
  • doctor --fix converges in one invocation. Fixes can unlock checks gated on artifacts they create (sprint-hygiene hooks activate once a TASKS.md hook exists); --fix now re-scans and re-applies to a bounded fixed point instead of requiring a second run.
  • Eval runner loads the sandbox config under the Agent SDK. settingSources: [] loaded nothing — no scenario CLAUDE.md, no copied hooks — so eval measured raw model behavior on the SDK path. Now ["project"], which is the entire point of copying your config into the sandbox.

Fixed

  • Canary alerting actually alerts. The workflow step piped through tee without pipefail, so a failing canary still exited 0 and the issue-opening step never ran (shell: bash fixes it).
  • Regression suite is hermetic. Isolated $HOME with a seeded sync config (memory sync-hook scenarios no longer depend on the maintainer's machine state), CLI falls back to dist/cli.js when no global link exists, portable md5, and the "perfect project" fixture updated for the Sprint 30–32 checks. 21/21 scenarios pass in a fresh container.

Internal

  • 515 tests (+24). New: tests/eval-checks.test.ts, tests/memory/sync-command.test.ts, sandbox-scoping analyzer/fixer tests, user-scope registration test, two-machine conflict tests. src/lib/memory-registration.ts extracted (shared by memory command + doctor). runAnalyzers() dedupes the doctor analyzer list; fileExists dedup in fixer + eval loader. Memory benchmarks: 55/57 in the CI container — the 2 consolidation-latency failures reproduce identically on the pre-sprint baseline there (wall-clock thresholds vs. slow shared hardware) and pass on maintainer hardware; thresholds unchanged. Code-reviewed; all Critical and Important findings fixed in-sprint.

[1.10.1] — 2026-05-04

Fixed

  • P0: Hooks read non-existent $TOOL_INPUT_* env vars and silently no-op. Every inline PreToolUse/PostToolUse hook our CLI emitted (.env block, destructive-command block, force-push protection, auto-format, sprint-complete nudge) plus the workflow-check.sh and sprint-open-check.sh wrapper scripts referenced $TOOL_INPUT_FILE_PATH and $TOOL_INPUT_COMMAND env vars. Claude Code does not set those env vars; hook context arrives as JSON on stdin per the official spec. The first guard line in every affected hook saw an empty string and exited 0 doing nothing. Result: zero blocking, zero formatting, zero workflow drift detection in any project that ran our init or doctor --fix from v0.4.0 onward. Fix: shared src/lib/hook-input.ts (jqField(), READ_STDIN_PREAMBLE, hasEnvVarHookPattern()); every generator (settings.ts, fixer-hooks.ts, fixer-sprint.ts, hook-scripts.ts) rewritten to use jq -r '.tool_input.X' < /dev/stdin.

Changed

  • Blocking hooks now exit 2, not exit 1. Per spec, exit 1 is silently non-blocking; exit 2 blocks the action and routes stderr back to Claude. Block messages now go to stderr (>&2). init generators and doctor --fix emit the corrected form.
  • /lp-enhance skill v9 → v9 (no skill version bump; rule-file change only).

Added

  • .claude/rules/hooks.md — path-scoped hook authoring rules. New rule generated by init and doctor --fix, with YAML frontmatter paths: [".claude/settings.json", ".claude/settings.local.json"] so Claude Code auto-loads it only when editing settings. Documents the env-var bug, exit-code 2 vs 1 (the most common authoring bug), multi-hook same-matcher caveat, no-hot-reload behavior, isolation testing pattern (pipe fake JSON, verify exit code), and canonical templates for PreToolUse/PostToolUse/SessionStart. Doctor flags MEDIUM when missing; --fix writes it. Adapted from a similar rule shipping in our wastd reference project.
  • Doctor: env-var hook detection (HIGH). analyzers/hooks.ts scans every hook command for the $TOOL_INPUT_* pattern and emits HIGH severity findings with a command preview. --fix invokes a new fixer-hook-input.ts that walks settings.json and rewrites known shapes (.env block, destructive bash, force-push, sprint-complete nudge, auto-format with formatter+extension preserved) to the canonical jq+stdin form. Wrapper scripts workflow-check.sh and sprint-open-check.sh are also re-written when they have the bug. User-customized hooks with the env-var pattern are left alone — the analyzer's HIGH finding still surfaces them so the user can fix manually.

Internal

  • 491 tests (+49), typecheck green. New files: src/lib/hook-input.ts, src/commands/doctor/fixer-hook-input.ts, src/commands/init/generators/hooks-rule.ts. New test files: tests/hook-input.test.ts, tests/hook-input-bug.test.ts (smoke tests piping fake JSON to real scripts), tests/hook-input-fixer.test.ts (idempotency + don't-clobber assertions), tests/hooks-rule.test.ts. tests/workflow-hook.test.ts updated to pipe stdin JSON instead of setting env vars. Code-reviewed via superpowers:code-reviewer. Plan at docs/superpowers/plans/2026-05-04-hook-stdin-input-bug.md.

[1.10.0] — 2026-05-04

Added

  • .claude/rules/workflow.md (path-scoped BACKLOG/TASKS workflow rules). New rule file generated by init, with YAML frontmatter paths: ["BACKLOG.md", "TASKS.md"] so Claude Code auto-loads it only when editing those files. Codifies the single load-bearing rule ("a work package lives in exactly one of BACKLOG.md or TASKS.md at any time") plus WP-NNN ID policy, numbered sprint start / sprint close sequences, and a staleness trigger list. Doctor flags MEDIUM when missing; --fix installs it without clobbering user customizations. Modeled after the wastd project's workflow layout.
  • BACKLOG.md WP template with 7 mandatory fields. init and doctor --fix now generate a BACKLOG.md shaped like wastd's: ## Priority definitions (P0/P1/P2/P3 each with concrete "next sprint / within 2-3 sprints / monthly / quarterly" meanings), a fenced WP template with Priority, Proposed, Stories / Docs, Depends on, Estimate (XS/S/M/L/XL), Trigger to pull, Definition of done, and structured ## P0 — Next sprint / ## P1 — Soon / ## P2 — Post-MVP / ## P3 — Parked sections plus a ## Changelog. Existing BACKLOG.md content is preserved; --fix only writes the new template when BACKLOG.md is absent.
  • TASKS.md wastd-shape template. ## Current Sprint seeded with an empty-between-sprints placeholder; header explicitly states the three caps (80 lines, 3 session-log entries, empty Current Sprint between sprints) and references .claude/rules/workflow.md. Sprint Roadmap section dropped from default init (too project-specific).
  • workflow-check.sh PostToolUse hook. Warn-only bash hook fired on Edit/Write to BACKLOG.md or TASKS.md. Four checks: (1) same WP ID present in both files (move-not-copy violated), (2) TASKS.md > 80 lines, (3) ## Current Sprint > 15 items, (4) ## Session Log > 3 entries. Always exits 0; never blocks. Doctor flags LOW when missing; --fix installs the script + settings entry.
  • Doctor: duplicate ## Memory heading detection. New MEDIUM Quality finding when CLAUDE.md contains more than one ## Memory heading (e.g. one bare and one ## Memory (agentic-memory)). --fix collapses them to a single canonical ## Memory (agentic-memory) section, keeping the first tagged block's content.

Changed

  • /lp-enhance skill v8 → v9. Skill instruction updated to write ## Memory (agentic-memory) (canonical heading) instead of bare ## Memory, so memory install stays idempotent. Existing skill installations are flagged LOW and auto-updated by doctor --fix.
  • BACKLOG_CONTENT shared section (emitted in CLAUDE.md ## Backlog section) extended to reference the 7-field template and the move-not-copy rule, nudging users toward the workflow without duplicating it in CLAUDE.md.

Fixed

  • Memory install appended a second ## Memory block when /lp-enhance ran first. The dedup guard in injectClaudeMdGuidance only matched the exact string ## Memory (agentic-memory). If /lp-enhance had already written ## Memory (no suffix), the guard missed it and install added a second block, producing two ## Memory headings that conflicted at session start. Dedup now uses an anchored regex (/^## Memory( \(agentic-memory\))?\s*$/m) that catches both heading shapes.
  • doctor --fix generated a minimal stub BACKLOG.md instead of the proper template. Now createBacklogMd in the fixer calls generateBacklogMd, producing the same output as init.

Internal

  • 442 tests (+26), typecheck green. New generator workflow-rule.ts; new test files workflow-rule.test.ts and workflow-hook.test.ts; tests/backlog.test.ts extended with template-shape + fixer + collapse assertions. hook-scripts.ts gained WORKFLOW_CHECK constant and writeWorkflowCheckScript writer. fixer-sprint.ts gained addWorkflowCheckHook. fixer.ts imports generateBacklogMd + generateWorkflowRule. collapseMemoryHeadings is idempotent and canonicalizes the kept heading.

[1.9.1] — 2026-04-28

Fixed

  • Doctor flagged ## Session Start and ## Backlog as missing even when --fix had just generated them. Sprint 25's LP-STUB rule ("stubs never satisfy intent") was too coarse — it conflated real placeholders (Commands, Stack, Architecture, where the stub body is <!-- TODO: ... --> and the user must customize) with canonical instructions (Session Start, Backlog, Stop-and-Swarm, Off-Limits, where the stub body IS the right answer and there's nothing to customize). --fix would write the canonical content, wrap it in LP-STUB, and the next scan still flagged it. Now sectionSatisfiesIntent only hard-fails when stripping LP-STUB markers and HTML comments leaves nothing but whitespace (= placeholder-only). Stubs that wrap real markdown content satisfy intent normally. New regression test + reworked fixture-based tests

[1.9.0] — 2026-04-27

Added

  • Sprint hygiene hooks. Two non-blocking bash scripts installed at .claude/hooks/sprint-{size,open}-check.sh and wired into settings. sprint-size-check.sh runs on SessionStart and warns when the current sprint has fewer than 3 (microsprint) or more than 7 (oversized) work packages — sweet spot is 3-6. sprint-open-check.sh runs on git commit and warns when TASKS.md stages a new ## Current block but BACKLOG.md has no staged deletions (catches the "forgot to delete pulled WPs from BACKLOG" drift). Battle-tested over a 5-day Anthropic hackathon. Generated by init; doctor flags missing wiring as 3 LOW findings; doctor --fix installs scripts + hook entries
  • Sprint-complete nudge. PostToolUse hook on Edit/Write to TASKS.md detects when all current-sprint checkboxes flip to [x] and prints a quality-check reminder. New projects get it from init; existing projects get a LOW doctor finding + auto-fix
  • .worktreeinclude template + doctor check. Two-line file (.env.local, .env) lets git-worktree subagents inherit gitignored env without committing secrets. Doctor flags MEDIUM finding when .git/worktrees/ has entries but .worktreeinclude is missing or empty; doctor --fix writes the template

Changed

  • Hook-patching consolidated into lib/hook-builder.ts. Pure addOrUpdateHook(existingHooks, options) primitive (dedup-by-substring + append/prepend) plus addHookToSettings(root, ...) I/O wrapper. Replaces 3 separate dedup implementations across fixer.ts, fixer-memory.ts, and memory/install.ts. 7 new unit tests
  • fixer.ts split for maintainability. Extracted fixer-hooks.ts (env protection, force-push, auto-format, postcompact, sessionstart) and fixer-sprint.ts (sprint hygiene + worktree). fixer.ts now under the 400-line cap; each file owns a coherent fixer category

Internal

  • 415 tests (+7), typecheck + build green. ClaudeConfig extended with worktreeIncludePath, worktreeIncludeContent, gitWorktreesActive. Test fixtures updated.

[1.8.1] — 2026-04-27

Added

  • init -f, --force flag. Industry-standard split: -y skips prompts, --force overwrites existing files. Combine -y --force for full automation
  • Doctor: orphan MCP permission detection. Flags every mcp__<server>__* entry in permissions.allow when no MCP server with that name is registered in .mcp.json, settings.json, or settings.local.json. Stale entries after a server rename silently block all tool calls — the new MEDIUM finding makes the drift visible. Reporter only; no auto-fix because the right action (rename vs delete) requires user judgment

Fixed

  • init -y silently exits 0 on existing CLAUDE.md. When CLAUDE.md already existed and --yes was set, init printed "Use doctor --fix" and exited 0 — users thought init ran but nothing happened. -y alone now exits with code 1 and a clear error pointing to either --force or doctor --fix
  • Corrupted settings.json silently treated as empty. readSettingsJson / readSettingsLocalJson returned {} on JSON parse error, so any subsequent fixer or installer would clobber the corrupted file with new content. The functions now return null and emit a single warning naming the path. ENOENT still returns {} so create-if-missing flows continue to work. All 14 caller sites updated; mutation paths bail when null, read-only paths use ?? {}. parser.ts::readSettingsFromFile also warns on parse error (was silent)
  • Parse-error warns deduped via log.warnOnce. A corrupted settings.json previously triggered up to 5 identical warns during doctor --fix (one per fixer that read settings). New log.warnOnce(key, msg) helper suppresses repeats by key within a process — 1 warn per corrupted file regardless of how many fixers run

[1.8.0] — 2026-04-23

Added

  • memory install subcommand. Explicitly installs (or re-installs) the knowledge base for this project. Use when the bare memory command reports a half-broken setup, after a purge, or when you want to force-rerun the flow without going through the interactive prompt
  • Doctor allowlist cross-check. When memory is detected and allowedMcpServers is set without agentic-memory, doctor now emits a HIGH-severity finding. doctor --fix prepends agentic-memory to whichever settings file holds the allowlist
  • Install preflight. memory install now hard-fails if the claude CLI is missing and warns (non-fatal) if gh is missing — stopping half-configured installs before any side effects are written

Fixed

  • Memory considered installed despite missing MCP server. isMemoryInstalled() only checked for the SessionStart context hook. A project could have hooks + permissions + a populated DB but no MCP registration, and the bare memory command would still show stats as if healthy. It now also requires the agentic-memory MCP server to be registered in .mcp.json, settings.local.json, or ~/.claude.json (any scope). The half-broken-state message distinguishes "MCP server not registered" from "database not set up"
  • Install silently broken under allowedMcpServers allowlist. When settings.json contained an allowedMcpServers list without agentic-memory, claude mcp add silently failed with "not allowed by enterprise policy" and install exited 0 with only a warning. Install now prepends agentic-memory to the allowlist before calling mcp add — so the registration succeeds instead of getting policy-blocked
  • memory push / memory pull exit 0 on sync failure. handleSyncErrors wrapped every sync call in try/catch and returned cleanly on throw, so an expired gh token or network blip left the shell with exit 0 while memories drifted across devices. Failures now set process.exitCode = 1. The nohup-wrapped SessionEnd hook still ignores the exit, but manual invocations and CI scripts now see the non-zero
  • Gist transport swallowed transport errors. readGistFile / listGistFiles wrapped execSync in try/catch returning null/[]. A network blip during memory push silently returned undefined, push printed "Push complete", and the next pull on another device fetched stale data. Errors now bubble; readGistFile returns null only when the gist exists but the file does not (the legitimate first-push case, which jq surfaces as literal "null")
  • sync-status remote count included locally-tombstoned memories. The remote column reported payload.memories.length including memories this machine had already deleted, making memory sync status show phantom drift while pull --all correctly reported "Already in sync". The count now filters out memories whose id matches a local tombstone

[1.7.2] — 2026-04-22

Fixed

  • SessionEnd push hook cancelled before completing. The memory push command takes ~3 seconds (GitHub API call). When Claude Code exits it sends SIGTERM to the hook process before the push finishes, surfacing as SessionEnd hook [...] failed: Hook cancelled. The hook is now wrapped in nohup ... </dev/null >/dev/null 2>&1 & exit 0 — Claude Code sees immediate success, and the detached push process completes independently. The </dev/null stdin redirect is required to prevent nohup from hanging on input. doctor --fix upgrades existing synchronous or plain-backgrounded hooks to the nohup form. Previously installed hooks in existing projects need one doctor --fix run to upgrade (or restart Claude Code after manual edit)

[1.7.1] — 2026-04-21

Fixed

  • Stale sync-config silently hides all remote memories. ~/.agentic-memory/sync-config.json pointing at a deleted gist caused every readGistFile / listGistFiles call to 404 silently. memory pull, memory pull --all, and memory sync status all reported empty remote even when the real (re-created) gist had memories. loadSyncConfig() now probes the stored gist via gh api "/gists/<id>" --silent and, on HTTP 404, clears the config and re-runs discoverSyncGist() — self-healing the "deleted gist" case transparently. Transient errors (network / auth / rate-limit) are distinguished from 404 and never invalidate the config. Reproduced when a gist was deleted via GitHub UI, then a push from another machine created a fresh gist that this machine never rediscovered
  • git diff HEAD~5 stderr leak in memory context. src/commands/memory/utils/git-context.ts called execSync without piping stderr, so on a fresh repo with fewer than five commits the fatal: ambiguous argument 'HEAD~5' line bled through to the terminal and into --json output. Both git calls in getGitContext() now pipe stderr. The SessionStart hook had been masking this with 2>/dev/null; manual invocations (and any caller not swallowing stderr) no longer see the leak

[1.7.0] — 2026-04-19

Removed

  • Filesystem sandbox no longer generated by init. Claude Code's filesystem sandbox propagates to spawned MCP servers and silently blocks any process that touches user-level paths — including our own agentic-memory MCP server, which reads ~/.agentic-memory/memory.db. Symptom was /mcp ✘ failed with SqliteError: unable to open database file in every project that ran init. The permissions.deny rules (credentials, destructive bash, .env reads) already cover the same threat model surgically, without false positives against cross-project tooling
  • addSandboxSettings fixer, Sandbox not enabled analyzer check, sandbox + HTTP-MCP cross-check in the MCP analyzer
  • sandbox.network.allowedDomains suggestion from the lp-enhance skill

Changed

  • Doctor flips the check: sandbox.enabled === true is now flagged as HIGH severity. --fix strips the block. Existing installs self-heal on next doctor --fix
  • Renamed eval scenario security/sandbox-escapesecurity/env-exfil-bash. The scenario always tested .env exfil via Bash shells that bypass Read-tool hooks — it never actually exercised the filesystem sandbox
  • Bumped ENHANCE_SKILL_VERSION to 8 so installed skills auto-update

Fixed

  • Double-spawned MCP server. src/commands/memory/server.ts had a top-level startServer().catch(...) that auto-fired on module import. The memory serve CLI action then called startServer() again, spawning a second MCP server on the same stdio pipe. Claude Code received two initialize responses, bombed with Received a response for an unknown message ID: {"id":0,...}, and logged /mcp ✘ failed. Gated auto-start with isMainEntry() check via import.meta.url + realpathSync(process.argv[1]) so it only fires when server.js is run as the entry point, never when imported by the CLI. This was the actual reason memory MCP has been failing — sandbox removal and trust-list wiring were separate correctness fixes but neither alone unblocked /mcp
  • Memory MCP now connects in sessions where it previously failed

[1.6.0] — 2026-04-18

Added

  • MMR (Maximal Marginal Relevance) diversity re-ranking in InjectionService. After the existing six-signal relevance score, non-pinned candidates are re-ordered so the top slots span distinct topics instead of getting crowded by near-duplicate memories. Pinned high-importance memories (≥ 0.8) bypass MMR so critical knowledge keeps its seat. λ=0.7 (70% relevance, 30% diversity), capped to the top 50 candidates for O(N²) safety
  • Shared similarity primitives in src/commands/memory/utils/similarity.tsextractKeywords, jaccardOverlap, smallerSetOverlap. Reused by contradiction detection and MMR
  • src/commands/memory/utils/mmr.ts — pure applyMMR(scored, options) with 60/40 content-keyword-Jaccard + tag-Jaccard similarity blend. Unit-testable in isolation (λ=1 preserves relevance, λ=0 maximises diversity)
  • New injection-quality benchmark tests/memory/benchmarks/diversity-selection.bench.ts — 5 topic clusters × 5 near-duplicates + 5 singletons, asserts top-5 covers ≥ 4 distinct topics. Baseline under crowding collapses to 1 topic; MMR expands to 5 (Δ+4)
  • Config constants INJECTION_MMR_LAMBDA, INJECTION_MMR_MAX_RERANK, INJECTION_MMR_SIM_WEIGHTS, INJECTION_PINNED_IMPORTANCE in config.ts. Tuning is a one-line change, no algorithm edit required

Changed

  • utils/contradiction.ts no longer re-implements keyword extraction or overlap — imports both from utils/similarity.ts. Behaviour unchanged (same 8/8 contradiction tests pass)
  • Pinned-memory threshold in InjectionService.#packBudget now reads from INJECTION_PINNED_IMPORTANCE instead of the hard-coded literal 0.8
  • 399 unit tests (+27: 17 similarity, 9 MMR, 1 injection diversity) and 57 benchmarks (+3 diversity)

Fixed

  • Removed dead lint script from package.json — referenced eslint which was never in devDependencies, caused post-edit-check.sh hook to fail on every write. Project uses tsc --noEmit for static checks; no linter was ever configured

[1.5.0] — 2026-04-18

Fixed

  • doctor no longer false-positive flags Missing "## Session Start" (or Backlog, Stop-and-Swarm, Off-Limits, Architecture, Stack, Commands) when the mature CLAUDE.md already expresses that intent through a differently-named section. Previously only an exact regex heading like ## Session Start satisfied the check; now ## Sprint Planning, ## Workflow, ## Security Notes, etc. are recognised when their heading or body keywords match the intent
  • Memory analyzer no longer false-positive flags No SessionStart hook with memory context injection when the hook delegates to a wrapper script. Previously the analyzer only inspected the literal command string; a hook like bash .claude/session-start.sh that itself ran claude-launchpad memory context was invisible. The new resolver reads .sh wrapper bodies inside the project root and treats them as part of the hook's effective command

Added

  • Intent-based section detection (src/commands/doctor/analyzers/quality-intents.ts) — 7 canonical intents + optional Memory, each with heading aliases AND body keyword fallbacks. A section satisfies an intent when (heading matches) OR (body keyword count ≥ threshold)
  • LP-STUB markers (<!-- LP-STUB: ai-recommended --> ... <!-- /LP-STUB -->) wrap every AI-boilerplate injection from doctor --fix. Stub-marked sections never satisfy an intent, so users keep seeing the flag until they replace the stub with real content (or delete the markers)
  • All 8 boilerplate injections in FIX_TABLE now use wrapStub(): Architecture, Off-Limits, Commands, Stack (TODO fallback only), Session Start, Backlog, Stop-and-Swarm, Memory
  • Hook command resolver (src/commands/doctor/analyzers/hook-resolver.ts) — tokenises hook commands with shell-quote, follows one level of .sh wrapper indirection, applies realpath-based boundary check so symlinks can't escape the project root. Returns structured { command, expansions, missingScripts }
  • Memory analyzer now emits a low-severity issue when a SessionStart/SessionEnd hook references a .sh wrapper that doesn't exist — broken wrappers are flagged instead of silently passing
  • tests/fixtures/mature-project.md + tests/fixtures/new-project.md + 12 new assertions in quality-intents.test.ts; 9 resolver tests + 3 wrapper-integration tests in memory-analyzer.test.ts (348 → 372 tests)
  • shell-quote dependency (2KB, MIT) for canonical shell tokenisation

Changed

  • BASE_SECTIONS regex loop in analyzers/quality.ts replaced with documentSatisfiesIntent(parseSections(content), rule) — same Missing "## X" section message wording preserved so FIX_TABLE substring matching still works
  • Root and local CLAUDE.md are now joined with \n\n instead of \n before parsing, so a missing trailing newline can't collapse two sections into one
  • analyzeMemory(config)analyzeMemory(config, projectRoot) and hasMemoryIndicators(config)async hasMemoryIndicators(config, projectRoot); same for analyzeQuality. Callers in doctor/index.ts and doctor/watcher.ts updated. Memory hooks are resolved once per run and shared across the 5 capability checks (no I/O multiplication)

[1.4.0] — 2026-04-16

Fixed

  • SessionEnd push hook was backgrounded (& exit 0) — push got killed before the gist upload completed, so deletions never propagated between machines. Now runs synchronously (; exit 0)
  • memory push pull-before-push no longer resurrects hard-deleted memories. Previous union-merge treated "not present locally" as "insert from remote", so deleting on machine A would reappear after pull-before-push

Added

  • Tombstone sync: hard-deletes now write a tombstone row that rides along in the sync payload. Remote machines apply tombstones before merging memories, so deletions propagate symmetrically
  • Sync payload bumped to v2 with tombstones[] field (v1 payloads still parse via Zod .default([]))
  • Migration 004 creates memory_tombstones table with (id, project, deleted_at) + project/deletedAt indexes
  • Doctor now detects stale backgrounded SessionEnd push hooks and offers --fix to upgrade them to synchronous
  • two-machine-sync.test.ts — 5 end-to-end scenarios verifying both machines always converge to the same memory set (parity, deletion propagation, no-resurrection, delete-vs-update conflicts, bulk project purge)

Changed

  • MemoryRepo.hardDelete, deleteByType, deleteByProject now write tombstones atomically via db.transaction()
  • mergeFromRemote is now three phases: apply remote tombstones → merge memories (skipping locally-tombstoned ids) → link relations
  • Tie-break rule: when tombstone deleted_at equals memory updated_at, delete wins (matches intent — a later delete at the same millisecond should not be overridden by a simultaneous update)

[1.3.0] — 2026-04-15

Fixed

  • memory pull now accepts -y flag — heals SessionStart auto-pull hook that was silently failing with "unknown option '-y'" for every session
  • TUI memory list selection marker () now tracks past entry ~35 — MemoryList viewport reserved the wrong number of chrome rows, clipping the selected row past the bottom border
  • TUI dashboard no longer jumps layout when navigating between memories with very different content sizes — Detail pane now has a strict height and truncates content to fit
  • SearchBar no longer shifts the layout by 1 row when opened — contentHeight accounts for its presence

Added

  • Enter-to-expand overlay in TUI dashboard: press Enter on a selected memory to see full content in a scrollable full-screen view (j/k line scroll, space/PgDn page, g/G top/bottom, q/Esc close)
  • memory pull --all now skips projects with zero local memories (prevents pulling memories for projects not set up on this machine) and reports them at the end with a hint
  • memory pull --all shows per-project breakdown when memories were inserted/updated/related
  • Per-project memory pull output now prefixes the project name and shows a --all tip

Changed

  • TUI three-panel layout (Memories, Projects, Detail) now locked to strict bottom alignment — Projects panel capped at min(contentHeight/3, 12) rows with … +N more when overflowing
  • Memory content truncation in Detail pane is now dynamic (fills available rows) and wrap-aware instead of a fixed 500-char cap
  • Content validation no longer hard-rejects on length — replaced with a two-tier soft warning (>1200 chars warns, >2500 chars warns strongly). Git log and code-heavy content are still rejected
  • memory_store MCP tool description tightened: target 500-1000 chars per memory; thresholds templated from shared constants so description and validation can't drift
  • Narrow terminal layout (< 80 cols) splits contentHeight 60/40 between MemoryList and MemoryDetail instead of letting both overflow the terminal

[1.2.3] — 2026-04-13

Fixed

  • Session Start fixer was missing "Check the Session Log" bullet and used hyphens instead of em dashes
  • Extracted shared section content to lib/sections.ts so init and fixer can't drift independently
  • Added skill version hash test to catch content changes without version bumps

Added

  • Hooks section in README explaining all auto-configured hooks

[1.2.2] — 2026-04-13

Fixed

  • Bumped /lp-enhance skill version to v7 (v6 users missed local config restore from v1.2.1)

[1.2.1] — 2026-04-13

Fixed

  • Renamed "When Stuck" to "Stop-and-Swarm" across all surfaces (init, doctor, fixer, docs, README, landing page)
  • Restored missing local config steps in /lp-enhance skill (.claude/CLAUDE.md and .claude/settings.local.json dropped during Sprint 18 rewrite)

[1.2.0] — 2026-04-13

Added

  • Doctor now checks for skill authoring conventions in .claude/rules/ files
  • --fix adds a Skill Authoring section to conventions.md when missing
  • Starter rules created by --fix now include skill authoring (consistent with init)
  • Skill authoring conventions updated to match official Claude Code docs: 500-line limit, 250-char description cap, $ARGUMENTS substitution, disable-model-invocation for side-effect skills
  • Bumped /lp-enhance skill to v6 (doctor will flag stale installs)
  • 6 new tests (328 total)

[1.1.0] — 2026-04-12

Added

  • Stop-and-swarm section in init, doctor, and --fix: scaffolds a rule so Claude spins up parallel agents after 3 failed iterations instead of guessing in circles

Fixed

  • MCP tags coercion: memory_store, memory_search, and memory_update now accept tags as both arrays and JSON-encoded strings (fixes harness serialization errors)
  • MCP dedup messaging: duplicate store responses now start with "OK:" instead of "Skipped:" so agents stop cross-checking with memory_search

[1.0.1] — 2026-04-09

Fixed

  • memory_search and memory_recent now expose an explicit project parameter so agents can control project scoping (was silently auto-detected with no way to override)
  • Pass project="*" to search across all projects, or a specific project name to target that project
  • memory_store project parameter description updated for consistency

[1.0.0] — 2026-04-08

Added

  • memory sync status subcommand: shows local vs remote memory counts per project
  • memory sync clean <project> subcommand: removes a project from the sync gist
  • deleteGistFile() in gist-transport for removing individual files from sync gist
  • Pull warning when creating a fresh database from remote for a project
  • Migration 003: content_hash column with unique index on memories table
  • Store dedup at database level: SHA-256 content hash with INSERT OR IGNORE prevents duplicates even across concurrent calls
  • Clean error messages for all sync commands when gh is not authenticated

Fixed

  • Immutability violations in fixer.ts, fixer-memory.ts, and install.ts (all mutations replaced with spread operators)
  • Sync upsert no longer silently deletes memories with duplicate content across different IDs
  • Migration backfill deduplicates existing rows before creating unique index (handles pre-existing duplicates)

Changed

  • MemoryRepo.create() returns null instead of throwing on duplicate content (in-memory dedup kept as fast-path)
  • upsertFromSync() uses check-then-insert/update pattern instead of INSERT OR REPLACE to respect content_hash constraint

[0.16.1] — 2026-04-08

Fixed

  • MCP parser now reads type field from .mcp.json (Claude Code uses type, not transport) — fixes false "no command" warnings on HTTP MCP servers like Supabase
  • Doctor footer no longer suggests --fix when remaining issues have no auto-fixer

[0.16.0] — 2026-04-07

Added

  • TUI dashboard: d to purge all memories for a project, r to remove a single memory (both with confirmation dialogs)
  • Doctor: detects missing SessionEnd hook on memory projects
  • Doctor: detects MCP servers not in allowedMcpServers whitelist
  • doctor --fix: auto-adds allowedMcpServers from configured MCP servers (reads .mcp.json)
  • doctor --fix: auto-adds SessionStart pull and SessionEnd push hooks for memory sync
  • doctor --fix: allowedMcpServers respects shared/local placement routing
  • Push guard: memory push warns and bails on 0 memories instead of uploading empty gist
  • Regression test suite (pnpm test:regression): 7 scenarios, 16 assertions for doctor CLI end-to-end
  • DashboardDataSource unit tests (purge, delete, filtering, stats)

Fixed

  • getMemoryPlacement no longer prompts on every --fix for pre-existing installs -- infers placement from existing config
  • SessionEnd push hook backgrounded to avoid timeout kill by Claude Code hook runner
  • MCP fixer reads .mcp.json for server names (not just settings.json)
  • Purge confirmation dialog shows total project memory count instead of filtered count
  • Extracted memory/MCP fix functions to fixer-memory.ts (fixer.ts: 536 to 392 lines)

Changed

  • TUI header is now responsive to terminal width
  • Killed CLI memory --purge command (replaced by TUI keybindings)

[0.15.2] — 2026-04-07

Fixed

  • Relation decay modifier was inverted: connected memories decayed faster instead of slower (highlyConnectedMultiplier 0.35→2.5, connectedMultiplier 0.5→1.8, isolatedMultiplier 1.3→0.8)
  • Type filter leaked through relation expansion in search — filtered searches could return wrong-type memories via related links

[0.15.1] — 2026-04-06

Changed

  • TASKS.md template slimmed from 30 to 13 lines (removed kanban lanes, Deferred section, Next Sprint)

[0.15.0] — 2026-04-06

Added

  • Memory placement prompt: choose shared (CLAUDE.md + settings.json) or local (.claude/CLAUDE.md + settings.local.json) when setting up memory
  • Local placement keeps memory config gitignored — co-devs never see it
  • doctor --fix and memory install respect placement choice for all memory-related writes
  • Quality and memory analyzers check both shared and local files
  • .claude/.gitignore now includes CLAUDE.md for local config support
  • Doctor and analyzers now read .claude/CLAUDE.md and settings.local.json
  • isMemoryInstalled() checks both settings files for memory hooks

Fixed

  • doctor --fix injected memory guidance into CLAUDE.md on projects without agentic-memory installed — now only triggers when the MCP server is configured in project settings
  • Skills (lp-migrate-memory) no longer installed when using local placement

[0.14.2] — 2026-04-06

Fixed

  • Skill version comment placed before YAML frontmatter broke skill parsing ("Skill must provide a name")

[0.14.1] — 2026-04-06

Removed

  • Stop hook with memory extract — regex-based auto-extraction produced junk memories. Claude stores memories directly via MCP tools now
  • memory extract subcommand removed from CLI
  • doctor detects deprecated Stop hook, --fix auto-removes it from existing projects

[0.14.0] — 2026-04-06

Added

  • /lp-enhance now generates 2-3 custom eval scenarios from project-specific Off-Limits and Conventions rules
  • /lp-enhance now reviews .claudeignore and flags missing stack-specific patterns
  • /lp-enhance reads existing eval scenarios during research phase to avoid duplicates
  • Skill auto-update: doctor detects stale /lp-enhance skills, --fix updates them to latest version
  • Versioned skill schema (embedded <!-- lp-enhance-version: N --> comment) for stale detection
  • doctor detects deprecated Stop hook (memory extract), --fix auto-removes it

Changed

  • /lp-enhance skill expanded: .claudeignore review, eval scenario generation, Skill Authoring conventions check
  • Rewrote all memory copy with outcome-focused framing (landing page, docs, README, MCP tools, install flow)
  • Replaced "wiki" references with "knowledge base" across all surfaces
  • MCP server version now reads from package.json instead of hardcoded string
  • npm description sharpened, keywords expanded from 10 to 20, added bugs field

Removed

  • Stop hook with memory extract — regex-based auto-extraction produced junk memories. Claude now stores memories directly via MCP tools, guided by CLAUDE.md's "STORE IMMEDIATELY" rules
  • memory extract subcommand removed from CLI

[0.13.1] — 2026-04-06

Changed

  • Rewrote all memory copy with outcome-focused framing (landing page, docs, README, MCP tools, install flow)
  • Replaced "wiki" references with "knowledge base" across all surfaces
  • MCP server version now reads from package.json instead of hardcoded string
  • npm description sharpened to include "CLAUDE.md" and "hooks" as search terms
  • npm keywords expanded from 10 to 20 for better discoverability
  • Added bugs field to package.json for npm sidebar link

[0.13.0] — 2026-04-06

Added

  • Skill Authoring conventions section in init-generated conventions.md (Anthropic's 5 internal skill patterns: TRIGGER clauses, allowed-tools, argument-hint, phase-based structure, edge case handling)
  • /lp-enhance detects missing Skill Authoring section and adds it to existing projects
  • Inline changelog in docs site via prebuild sync script (no longer links to GitHub)

Fixed

  • Memory search and recent tools returned truncated content (sliced to 500 chars) — now returns full content
  • Memory store rejected content over 2000 chars via Zod schema before content-validation could run — removed hard limit, kept soft guide in tool description
  • Stale blessed references updated to Ink in architecture docs
  • undefined Home page description removed from llms.txt index

[0.12.2] — 2026-04-06

Fixed

  • Memory search and recent tools returned truncated content (sliced to 500 chars) — now returns full content
  • Memory store Zod schema rejected content over 2000 chars before content-validation could run — removed hard limit, kept soft guide in tool description

Changed

  • Docs changelog rendered inline from CHANGELOG.md via prebuild sync script (was linking to GitHub)
  • Removed landing page Home link from docs meta.json that leaked undefined description into llms.txt

[0.12.1] — 2026-04-06

Added

  • Dashboard d key to delete selected memory with confirmation overlay
  • Path-scoped rules generation in /lp-enhance (detects monorepos, distinct areas, generates per-scope rules)
  • Rewrote all skills using Anthropic's internal patterns (TRIGGER/DO NOT TRIGGER, allowed-tools, phase-based workflows)
  • Dedup behavior note in memory_store tool description

Changed

  • /lp-enhance skill restructured as Research/Plan/Execute/Verify phases
  • /lp-migrate-memory skill restructured as Discover/Parse/Store/Report phases
  • content-review global skill restructured with phase-based workflow

[0.12.0] — 2026-04-06

Added

  • TUI dashboard migrated from blessed to Ink (React for terminal)
    • Persistent keybinding hint bar (always visible)
    • Inline live search (replaces modal)
    • Focus ring on active pane (colored borders)
    • Responsive layout (wide/medium/narrow)
    • Arrow key + vim dual navigation
  • Memory algorithm tuning from 3-expert panel review:
    • Episodic half-life 60 to 30 days, semantic 365 to 540 days
    • Logarithmic access modifier (replaces step function)
    • Stronger relation modifier (0.5x for 3+, 0.35x for 6+ connections)
    • Tag normalization at store time (lowercase, aliases: bugfix to bug, etc.)
    • Auto-tagging from content keywords (bug, decision, gotcha, howto, pattern)
    • Search synonym expansion (auth to authentication/login/oauth, db to database/sql, etc.)
    • Token budget raised from 2000 to 3000
    • Context weight redistributed when gitContext missing
    • Smooth cold start ramp for 6-20 memories
    • Type diversity cap (max 2 same type in full tier)
    • Branch-name heuristic (fix/* boosts patterns, feat/* boosts procedural)
    • Pinned slots (importance >= 0.8 gets reserved 10% budget)
    • Summary tier raised from 150 to 350 chars
  • Memory content limit reduced from 10000 to 2000 chars (~500 tokens)
  • No-credentials rule in MCP server instructions

Changed

  • Replaced blessed with Ink (React 19) + ink-text-input + ink-select-input
  • Dashboard lifespan display uses createdAt (matches decay-service)
  • Sprint review made mandatory in conventions.md (must spawn code review agent)
  • Feature branches required for feat: commits

Fixed

  • Esc key not working during TUI search
  • Ebbinghaus decay curve (steeper initial drop with residual floor)
  • Dedup guard messaging (pendingStores for parallel calls)

Removed

  • blessed dependency

[0.11.0] — 2026-04-05

Added

  • Cross-device memory sync via private GitHub Gist (memory push / memory pull)
    • One file per project inside a single gist for scalable multi-project sync
    • Auto-detects current project from working directory
    • --all flag to push/pull all projects at once
    • Auto-discovers gist on new devices (no config copying needed)
    • Pull-before-push guard prevents silent overwrites
    • Zod validation on both push and pull
    • -y flag to skip confirmation prompt (for scripts)
  • In-memory dedup guard in memory_store to prevent duplicate memories from parallel MCP calls
  • No-credentials rule in MCP server instructions and doctor-generated CLAUDE.md

Changed

  • Refactored doctor/fixer.ts (433 to 385 lines) via shared addHook() helper
  • Refactored eval/runner.ts: merged duplicate file check functions, replaced local fileExistsSafe with shared fileExists

Fixed

  • Project-scoped push no longer overwrites other projects in gist
  • Shell injection risk in gist transport (slugified filenames, validated gist IDs)

[0.10.0] — 2026-04-04

Added

  • BACKLOG.md as first-class project artifact alongside CLAUDE.md and TASKS.md
    • init generates BACKLOG.md with priority tier template (P0/P1/P2)
    • doctor flags missing BACKLOG.md (low severity, Rules analyzer)
    • doctor --fix auto-creates BACKLOG.md if missing
    • Generated CLAUDE.md includes ## Backlog section with usage instructions
    • doctor --fix adds ## Backlog section to existing CLAUDE.md
  • Three-file system documented: CLAUDE.md (what Claude needs), TASKS.md (what we're doing now), BACKLOG.md (what we're doing later)
  • memory install now detects already-registered MCP server instead of showing false error

Changed

  • Instruction budget thresholds raised to match official Claude Code guidance: warn at 150, danger at 200, critical at 250 (was 120/150/200)
  • /lp-enhance skill budget raised from 120 to 200 lines

Fixed

  • memory install MCP registration: claude mcp add exited 1 when server already existed, causing false "Could not register" warning
  • Stale documentation references (budget thresholds, file counts, em dashes)

[0.9.1] — 2026-04-04

Fixed

  • cwdRequire ESM compatibility: use package.json paths for createRequire instead of bare require() fallback that crashes in ESM bundles
  • Fixes "Dynamic require of better-sqlite3 is not supported" error when running memory command from globally installed CLI

[0.9.0] — 2026-04-03

Added

  • Smart memory injection algorithm (InjectionService) replaces binary full/graph mode
    • 6-signal scoring: context relevance, value signal (access/injection ratio), importance, type-aware recency, type bonus, noise penalty
    • 3 presentation tiers: full content, summary, index (title-only)
    • Token-budget packing (default 2000 tokens) with automatic tier demotion
    • Self-tuning: memories Claude searches for rise in rank, ignored ones fade out
    • Cold start handling: injects all when below 5 memories
    • 12 new tests for injection scoring, tiers, and budget
  • Backlog system (BACKLOG.md) for parking deferred features

Fixed

  • incrementInjection was never called (injection count permanently 0 for all memories)
  • incrementAccess was incorrectly called during injection (inflated access counts)
  • Token budget (2000 tokens) now enforced (was using arbitrary count-based limit of 10)

Changed

  • Memory docs rewritten: session injection, self-tuning, and search scoring as distinct sections
  • Landing page memory section: brain-inspired copy, improved bullet points
  • README memory section: smart injection and self-tuning bullets
  • Removed duplicate changelog link from docs nav

[0.8.3] — 2026-04-03

Added

  • Smart memory injection algorithm (InjectionService) replaces binary full/graph mode
    • Unified scoring: context relevance, value signal (access/injection ratio), importance, recency, type bonus, noise penalty
    • Three presentation tiers (full/summary/index) with token-budget packing
    • Type-specific recency half-lives (episodic 7d, semantic 30d, procedural 90d)
    • Cold start handling: injects all when below 5 memories
    • 12 new tests for injection scoring, tiers, and budget

Fixed

  • incrementInjection was never called (injection count permanently 0)
  • incrementAccess was called during injection (inflated access counts, should only trigger on explicit search)
  • Token budget (2000 tokens) now enforced (was using count-based limit)

[0.8.2] — 2026-04-03

Fixed

  • Memory analyzer now correctly reads permissions.allow instead of nonexistent allowedTools field
  • Memory score shows 100% when all permissions are configured

[0.8.1] — 2026-04-03

Fixed

  • Removed MCP server check from doctor memory analyzer (registered globally, not in project settings)
  • Fixed doctor --fix hanging when no fixes could be applied
  • Always re-scan and render report after --fix attempt

[0.8.0] — 2026-04-03

Changed

  • Memory is now fully optional — doctor no longer flags missing Memory section for non-memory users
  • init no longer generates ## Memory & Learnings section in CLAUDE.md
  • /lp-enhance skill only suggests Memory guidance if memory is already configured
  • doctor --fix no longer injects Memory section into non-memory projects
  • Dev/release publish workflow: pnpm publish:dev for prereleases, pnpm publish:release for stable

Fixed

  • MCP server registration: removed stray -- from claude mcp add that caused broken registrations
  • Native deps (better-sqlite3, sqlite-vec) resolve from user's local node_modules, fixing memory command with global CLI install
  • cwdRequire evaluated lazily with fallback to CLI's own resolution chain

[0.7.9] — 2026-04-03

Fixed

  • MCP server registration: removed stray -- from claude mcp add command that caused broken registrations
  • Removed accidental self-dependency in package.json

[0.7.8] - 2026-04-03

Fixed

  • cwdRequire now checks global node_modules (npm install -g) - fixes memory commands failing after global dep install
  • Memory install auto-installs native deps globally if missing
  • Error messages now suggest npm install -g instead of local install

[0.7.7] - 2026-04-03

Changed

  • Memory install now injects "STORE IMMEDIATELY" guidance into CLAUDE.md - prompts proactive memory storage instead of relying only on auto-extraction

[0.7.6] - 2026-04-03

Fixed

  • Moved blessed to optionalDependencies - fixes dashboard crash on global install
  • Simplified dependency strategy: native deps (better-sqlite3, sqlite-vec) stay dev-only, everything else is optional

[0.7.4] - 2026-04-03

Fixed

  • Removed all optional dependencies from npm install - only 5 lightweight deps remain
  • claude-agent-sdk, @modelcontextprotocol/sdk, zod moved to dev-only
  • Eval falls back to Claude CLI when agent-sdk is missing
  • Memory shows clear install prompt for native deps
  • Zero warnings, fast install (was ~26s with native compilation)

[0.7.3] - 2026-04-03

Fixed

  • Native deps (better-sqlite3, sqlite-vec) now resolve from user's local node_modules
  • cwdRequire evaluated lazily for MCP server compatibility

[0.7.2] - 2026-04-03

Fixed

  • Upgraded zod 3 to zod 4 - fixes peer dependency warning with claude-agent-sdk and boolean coercion in memory_forget tool
  • Deferred better-sqlite3/sqlite-vec/blessed to dev-only - npm install no longer compiles native modules. Users install them separately when setting up memory

[0.7.0] - 2026-04-01

Added

  • memory command - persistent, intelligent memory system for Claude Code sessions
    • SQLite-backed with FTS5 full-text search
    • Neuroscience-inspired decay model (episodic, semantic, procedural, pattern types)
    • 7 MCP tools (store, search, recent, forget, relate, stats, update)
    • SessionStart hook auto-injects relevant context
    • Interactive install with confirmation prompt
    • --dashboard flag for memory statistics
  • Doctor memory analyzer - detects memory config issues when installed
  • Doctor --fix auto-repairs: disables auto-memory, adds MCP tool permissions, injects CLAUDE.md guidance

Changed

  • enhance CLI command replaced with /lp-enhance skill (runs inside Claude Code session)
    • Installed during init with global/project scope picker
    • Doctor detects missing skill, --fix creates it
    • Uses .claude/skills/lp-enhance/SKILL.md format with frontmatter
  • Banner updated: "Scaffold - Diagnose - Evaluate - Remember"
  • Shared settings helpers extracted to src/lib/settings.ts

Removed

  • enhance CLI command (replaced by /lp-enhance skill)

[0.6.0] - 2026-03-30

Added

  • Sprint review hook: PostToolUse hook detects sprint completion in TASKS.md and nudges a quality check before committing
  • Sprint Reviews section in generated CLAUDE.md

[0.5.4] - 2026-03-29

Added

  • --fix now auto-adds SessionStart hook (injects TASKS.md at startup)

Changed

  • --fix no longer shows the before-score - only the post-fix result
  • Post-fix report says "remaining issue(s) require manual intervention" instead of suggesting --fix again
  • Dry-run shows fix actions, skips unfixable issues

[0.5.3] - 2026-03-29

Changed

  • Doctor output: compact single-line issues (was 3 lines each with fix text)
  • Doctor --fix and --fix --dry-run now recommend running enhance as next step
  • Dry-run shows fix actions instead of problem messages, skips unfixable issues

[0.5.2] - 2026-03-29

Added

  • doctor --fix --dry-run - preview what fixes would be applied without modifying files
  • pnpm publish:dev / pnpm publish:release scripts for prerelease workflow

[0.5.1] - 2026-03-29

Added

  • 4 new doctor checks: deprecated includeCoAuthoredBy, monorepo claudeMdExcludes hint, hook timeouts on broad matchers, auto-memory disabled without manual strategy
  • SessionStart hook in init-generated settings.json - injects TASKS.md at session startup
  • Doctor hooks analyzer now checks for SessionStart hook
  • Attribution migration auto-fix: --fix migrates deprecated includeCoAuthoredBy to attribution object
  • Enhance prompt: suggests path-scoped rules, sandbox.network.allowedDomains, claudeMdExcludes for monorepos
  • 2 new eval scenarios: memory-persistence, deferred-tracking - 15 total
  • timeout field parsed from hooks in settings.json

Fixed

  • doctor --fix now re-scans and shows updated score after applying fixes (previously required a second run)

Changed

  • Hooks analyzer score weight: 20 to 15 per issue (6 checks would bottom out too fast)
  • Total tests: 91 to 99

[0.5.0] - 2026-03-29

Added

  • Security hardening: init generates credential deny rules (~/.ssh/*, ~/.aws/*, ~/.npmrc), sandbox enabled, bypass mode disabled
  • 5 new doctor checks: credential file exposure, blanket Bash approval, .env gap (hooks vs .claudeignore), bypass mode unprotected, sandbox not enabled
  • 4 new auto-fixes: --fix adds credential deny rules, bypass disable, sandbox settings, .env to .claudeignore
  • 2 new eval scenarios: credential-read (SSH key protection), sandbox-escape (.env bypass via Bash)
  • Interactive eval mode: eval with no flags prompts for suite, runs, and model selection
  • .claudeignore parsing added to ClaudeConfig for cross-checking with hooks

Fixed

  • build.gradle detection bug - || on two promises always returned the first (Kotlin/Gradle projects misdetected)
  • Broader .env matching in .claudeignore fixer (handles .env* pattern)
  • makeConfig test helpers missing claudeignorePath/claudeignoreContent defaults

Changed

  • Permissions analyzer score weight: 20 to 15 per issue (8 checks would bottom out too fast)
  • Security eval suite: 4 to 6 scenarios
  • Total tests: 71 to 91

[0.4.3] - 2026-03-29

Fixed

  • Eval sandbox now copies user's full .claude/ config (settings.json, rules, hooks, permissions) and .claudeignore - previously only a bare CLAUDE.md from the scenario was used

[0.4.2] - 2026-03-29

Added

  • Memory & Learnings section in generated CLAUDE.md
  • PostCompact hook in generated settings.json - re-injects TASKS.md after context compaction
  • Deferred section in generated TASKS.md
  • Doctor checks for Memory section and PostCompact hook
  • --fix auto-adds Memory section and PostCompact hook
  • Enhance prompt now suggests PostCompact hook for existing projects

[0.4.1] - 2026-03-29

Changed

  • Refactored tryFix() from 73-line if/else chain to FIX_TABLE lookup pattern
  • Refactored detectScripts() from 112-line if/else chain to LANGUAGE_SCRIPTS config object

Added

  • 13 new tests for detectScripts() covering all supported languages (58 to 71 tests)

[0.4.0] - 2026-03-28

Added

  • Enhanced init: generates 6 files (CLAUDE.md, TASKS.md, settings.json, .gitignore, .claudeignore, conventions.md)
  • settings.json includes $schema for IDE autocomplete, permissions.deny for security
  • Destructive command blocking hooks (force-push, reset --hard, rm -rf)
  • Language-specific starter rules (13 languages)

Changed

  • Init detects 20+ frameworks from manifest files + lockfiles

[0.3.4] - 2026-03-28

Fixed

  • Security: command injection in hook generation (SAFE_FORMATTERS dict)

Added

  • Suite filtering for eval
  • Eval report output to .claude/eval/

[0.3.0] - 2026-03-28

Added

  • doctor --watch: polling-based live score updates
  • .claudeignore generation in --fix
  • enhance budget cap (120 lines)
  • Tech Stack section in generated CLAUDE.md

[0.2.2] - 2026-03-28

Added

  • Plugin submitted to marketplace
  • 50 tests, 60KB package size

[0.1.0] - 2026-03-28

Added

  • Initial npm publish
  • init, doctor, enhance, eval commands
  • 7 analyzers, 7 eval scenarios
  • Stress tested across 8 stacks

On this page

[1.17.0] — 2026-07-08AddedChangedInternal[1.16.0] — 2026-07-08FixedInternal[1.15.0] — 2026-07-08FixedAddedInternal[1.14.0] — 2026-07-07FixedRemoved[1.13.0] — 2026-07-07AddedFixed (Sprint 36 — publish gate)SecurityInternal[1.12.0] — 2026-07-02FixedAddedChangedInternal[1.11.0] — 2026-07-01AddedChangedFixedInternal[1.10.1] — 2026-05-04FixedChangedAddedInternal[1.10.0] — 2026-05-04AddedChangedFixedInternal[1.9.1] — 2026-04-28Fixed[1.9.0] — 2026-04-27AddedChangedInternal[1.8.1] — 2026-04-27AddedFixed[1.8.0] — 2026-04-23AddedFixed[1.7.2] — 2026-04-22Fixed[1.7.1] — 2026-04-21Fixed[1.7.0] — 2026-04-19RemovedChangedFixed[1.6.0] — 2026-04-18AddedChangedFixed[1.5.0] — 2026-04-18FixedAddedChanged[1.4.0] — 2026-04-16FixedAddedChanged[1.3.0] — 2026-04-15FixedAddedChanged[1.2.3] — 2026-04-13FixedAdded[1.2.2] — 2026-04-13Fixed[1.2.1] — 2026-04-13Fixed[1.2.0] — 2026-04-13Added[1.1.0] — 2026-04-12AddedFixed[1.0.1] — 2026-04-09Fixed[1.0.0] — 2026-04-08AddedFixedChanged[0.16.1] — 2026-04-08Fixed[0.16.0] — 2026-04-07AddedFixedChanged[0.15.2] — 2026-04-07Fixed[0.15.1] — 2026-04-06Changed[0.15.0] — 2026-04-06AddedFixed[0.14.2] — 2026-04-06Fixed[0.14.1] — 2026-04-06Removed[0.14.0] — 2026-04-06AddedChangedRemoved[0.13.1] — 2026-04-06Changed[0.13.0] — 2026-04-06AddedFixed[0.12.2] — 2026-04-06FixedChanged[0.12.1] — 2026-04-06AddedChanged[0.12.0] — 2026-04-06AddedChangedFixedRemoved[0.11.0] — 2026-04-05AddedChangedFixed[0.10.0] — 2026-04-04AddedChangedFixed[0.9.1] — 2026-04-04Fixed[0.9.0] — 2026-04-03AddedFixedChanged[0.8.3] — 2026-04-03AddedFixed[0.8.2] — 2026-04-03Fixed[0.8.1] — 2026-04-03Fixed[0.8.0] — 2026-04-03ChangedFixed[0.7.9] — 2026-04-03Fixed[0.7.8] - 2026-04-03Fixed[0.7.7] - 2026-04-03Changed[0.7.6] - 2026-04-03Fixed[0.7.4] - 2026-04-03Fixed[0.7.3] - 2026-04-03Fixed[0.7.2] - 2026-04-03Fixed[0.7.0] - 2026-04-01AddedChangedRemoved[0.6.0] - 2026-03-30Added[0.5.4] - 2026-03-29AddedChanged[0.5.3] - 2026-03-29Changed[0.5.2] - 2026-03-29Added[0.5.1] - 2026-03-29AddedFixedChanged[0.5.0] - 2026-03-29AddedFixedChanged[0.4.3] - 2026-03-29Fixed[0.4.2] - 2026-03-29Added[0.4.1] - 2026-03-29ChangedAdded[0.4.0] - 2026-03-28AddedChanged[0.3.4] - 2026-03-28FixedAdded[0.3.0] - 2026-03-28Added[0.2.2] - 2026-03-28Added[0.1.0] - 2026-03-28Added