## yvgude/lean-ctx — v3.10.1…v3.10.2

_70 commits._

### Features
- **feat(import): support OpenCode session history (#1732)** (74c6d36)
- **feat: complete premium open-ticket integration (#1725)** (e710e85)
- **feat(dashboard): the invitation popup asks how people use LeanCTX** (afe1d7c)

### Fixes
- **Merge pull request #1787 from yvgude/fix/release-sdk-coupling** (8b42fea)
- **Merge pull request #1785 from yvgude/fix/1780-stale-verify-retry** (f599866)
- **fix: stop reading a transient file lock as a content change (#1780), bound the roots/list probe (#1783)** (513b54f)
- **Merge pull request #1782 from yvgude/fix/1781-windows-pipe-wedge** (e31a49b)
- **fix: free an abandoned ctx_shell call, and stop logging pipe closes as crashes** (df2e73d)
- **Merge pull request #1779 from yvgude/fix/test-races-2026-09-15** (1d73a74)
- **Merge pull request #1776 from yvgude/fix/proxy-wiring-2026-09-14** (6881aea)
- **Merge pull request #1772 from massimomazzariol/fix/rule-steering-policy-boundaries** (31dedee)
- **fix(security): update rustls to 0.23.45 (RUSTSEC-2026-0285)** (ea24d4b)
- **fix(setup): preserve fresh onboarding steering** (8d98810)
- **fix(proxy,shell): four defects behind the Windows Codex 401 report** (10f43e7)
- **fix(security): update rustls to 0.23.45** (0c598c5)
- **fix(setup): keep rules off absolute in explicit flows** (89c3761)
- **fix(setup): respect rule steering policy boundaries** (df187d5)
- **Merge pull request #1770 from massimomazzariol/fix/automatic-rules-opt-out** (26368db)
- **Merge pull request #1769 from yvgude/fix/gh-issues-2026-09-13** (534927a)
- **fix(ctx_read): keep the mode description inside the per-turn token budget** (0a8766e)
- **fix(server): honor automatic rules opt-out** (65fc47c)
- **fix(ctx_shell): the redirect refusal names the rule that fired (#1768)** (ab54c9b)
- **fix(ctx_patch): account for every op in a batch receipt (#1767)** (b07301e)
- **fix(agents): admit over-cap sessions read-only and keep the presence role (#1765, #1766)** (5a1bcfb)
- **fix(ctx_overview): stop padding task-filtered output with unrelated memories (#1763)** (f68d9e4)
- **fix(pi): forward ctx_shell env and treat find no-match as an empty result (#1761, #1762)** (6ecf8e2)
- **fix(ctx_read): accept lines:-N tail windows and fix tail +N / -f rewrites (#1759)** (f65c4a6)
- **fix(rules): honor automatic injection opt-out** (514f6af)
- **Merge pull request #1760 from yvgude/fix/guard-new-branch-blind-spot** (2215428)
- **Merge pull request #1758 from yvgude/fix/1754-setup-tip-steering-opt-out** (99fc8b9)
- **Merge pull request #1757 from yvgude/fix/1753-diff-mode-guidance** (e6e9d5b)
- **Merge pull request #1756 from yvgude/fix/1752-opencode-session-header** (90470f5)
- **Merge pull request #1755 from yvgude/fix/1751-subshell-trailing-redirect** (e3a632b)
- **fix(guard): stop both pre-push guards going blind on a new branch** (966339e)
- **fix(server): silence the setup tip when the user declined rule steering** (31960ac)
- **fix(proxy): forward x-opencode-session so OpenCode keeps session affinity** (2cd47b3)
- **fix(shell): treat a redirect after a subshell's `)` as part of the group** (d35179e)
- **fix(deps): clear all npm advisories across the three lockfiles (#1750)** (d8ba51f)
- **fix(bm25): stop minified bundles from exploding the index (#1739) (#1749)** (dc434a2)
- **fix(memory): add Windows memory guardian telemetry (#1738)** (901ab62)
- **perf(index): avoid duplicate property-graph mirror (#1736)** (7bfa522)
- **fix(gain): never gate the takedown path behind publication (#1726) (#1743)** (4586782)
- **fix(proxy): relay Claude Code's session id (#1730) (#1742)** (c7feb9f)
- **fix: retain background shell output archives (#1727) (#1728)** (fd8f28d)
- **fix(index): preserve exact tree-sitter chunk content (#1734)** (34a1da1)
- **Merge pull request #1723 from merlinhu1/fix/1721-npm-onboard-stdio** (810c05a)
- **fix(npm): isolate onboarding stdio to prevent install hangs (#1721)** (bdc6c47)

### Backend
- **Merge pull request #1786 from yvgude/release/3.10.2** (cdc393b)
- **release: 3.10.2** (789d541)
- **Merge pull request #1719 from yvgude/feat/feedback-popup** (7803c66)

### Tests
- **test: close four races that made CI red without a product defect** (a5be0ae)
- **test: remove two wall-clock/global-counter flakes from the lib suite (#1741)** (8bed724)
- **test(npm): await fixture shutdown on Windows (#1721)** (0bda909)
- **test(dashboard): the promo guard asserts campaign v2, not v1's strings** (affeb07)

### Docs
- **docs: make lines:-N discoverable and state the full behavior_nudges scope (#1759, #1763)** (2c52506)
- **docs(changelog): record #1767 and #1768** (543db7a)
- **docs(changelog): record the 2026-09-13 issue batch (#1759, #1761–#1763, #1765, #1766)** (b8db83e)
- **docs(tools): say that mode=diff diffs the cache, not git** (2275871)

### Chore
- **ci: register the SDK-coupling gate in the delivery evidence contract** (ab411b7)
- **ci: gate the engine ↔ Agent-Tools-SDK coupling before any release build** (f631202)
- **refactor(server): keep call tool pipeline within LOC gate** (d266fb3)
- **refactor(ctx_shell): move the test module into ctx_shell/tests.rs (#1768)** (eda825a)
- **chore(deps-dev): bump vitest in /packages/pi-lean-ctx (#1748)** (8236c60)
- **chore(deps): bump hono from 4.13.0 to 4.13.7 in /packages/pi-lean-ctx (#1747)** (57034ce)
- **chore(deps): bump js-yaml in /_archive/vscode-extension (#1746)** (8176648)
- **chore(deps): bump @vitest/mocker and vitest in /packages/pi-lean-ctx (#1745)** (cd063d9)
- **ci: don't let a third-party apt list fail the test matrix (#1744)** (bd35616)
- **chore(hooks): restore the pre-commit test-clippy gate (#1740)** (f8672f2)
- **ci: test npm postinstall on Linux and Windows** (98ee1da)
- **ci: reuse existing Node job for postinstall regression** (28d617f)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/yvgude/lean-ctx?utm_source=github-action)._