[{"data":1,"prerenderedAt":439},["ShallowReactive",2],{"changelog-releases":3},[4,115],{"id":5,"title":6,"body":7,"date":106,"description":13,"extension":107,"meta":108,"navigation":109,"path":110,"seo":111,"stem":112,"version":113,"__hash__":114},"changelog\u002Fchangelog\u002Fv0.15.0.md","Side-by-side diffs, PR conversations, and steadier Windows sessions",{"type":8,"value":9,"toc":97},"minimark",[10,14,19,27,30,34,37,52,56,63,67,75,78,82,85],[11,12,13],"p",{},"A big review release: diffs can now be read side by side, pull-request conversations live\ninside the Review tab, and several long-standing Windows rough edges are gone.",[15,16,18],"h2",{"id":17},"side-by-side-diffs","Side-by-side diffs",[11,20,21,22,26],{},"Every diff pane — session Review, the Git tab, and the project Git client — now has a\n",[23,24,25],"strong",{},"Unified \u002F Split"," switcher. Split lays the old and new sides next to each other and marks the\nwords that actually changed within a line, so a rename or a reordered argument reads at a glance\ninstead of as two near-identical rows.",[11,28,29],{},"Your choice is remembered globally and applies to all three panes at once. Review comments work\nthe same in both layouts: an anchor still belongs to a line, not to a column.",[15,31,33],{"id":32},"pull-request-conversations","Pull-request conversations",[11,35,36],{},"Once a session has a pull request, the provider's own review conversation is rendered in the\nReview tab beside your local notes — never merged into them. Works with both GitHub and\nBitbucket.",[11,38,39,40,43,44,47,48,51],{},"For each thread you can ",[23,41,42],{},"Reply",", ",[23,45,46],{},"Resolve",", or hand the whole thread to the agent to act on.\nComments that no longer point at any line in the current diff collect in a collapsible\n",[23,49,50],{},"Pull request conversation"," strip rather than silently disappearing.",[15,53,55],{"id":54},"search-your-repositories-when-adding-a-project","Search your repositories when adding a project",[11,57,58,59,62],{},"The repository picker's search box now actually filters. Type to search the repositories you can\nsee on a connected provider, with a ",[23,60,61],{},"refresh"," control beside the box for a repository you have\njust created. When the list is capped, the footnote says so plainly instead of pretending it\nsearched everything.",[15,64,66],{"id":65},"worktrees-that-clean-up-after-themselves","Worktrees that clean up after themselves",[11,68,69,70,74],{},"Deleting a session — or a whole project or workspace — now reliably removes the git worktree\nthat went with it. Previously the ",[71,72,73],"code",{},".git\u002Fworktrees"," entry could outlive its directory, which left\ngit holding the branch and refusing to reuse it.",[11,76,77],{},"The Git tab's refs panel gained a cleanup action for metadata stranded by older versions, and\nPlexus reclaims what it can at startup. When it deliberately keeps something — a branch you may\nstill want, a worktree an agent is still using — it now says so rather than acting silently.",[15,79,81],{"id":80},"windows-sessions-that-start-and-stay-started","Windows: sessions that start, and stay started",[11,83,84],{},"Three separate wedges are fixed. Starting a session no longer hangs on a \"Starting…\" spinner\nthat only a restart could clear. Resuming a session resumes the actual conversation instead of\nopening a fresh one. And the review-and-fix cycle no longer freezes the window after its first\nround.",[11,86,87,88,92,93,96],{},"If Windows has been asking ",[89,90,91],"em",{},"\"Are you sure you want to uninstall this product?\""," every time\nPlexus updates, it can now find the older installation responsible and offer to remove it — see\n",[23,94,95],{},"Settings → About",".",{"title":98,"searchDepth":99,"depth":99,"links":100},"",2,[101,102,103,104,105],{"id":17,"depth":99,"text":18},{"id":32,"depth":99,"text":33},{"id":54,"depth":99,"text":55},{"id":65,"depth":99,"text":66},{"id":80,"depth":99,"text":81},"2026-08-04","md",{},true,"\u002Fchangelog\u002Fv0.15.0",{"title":6,"description":13},"changelog\u002Fv0.15.0","v0.15.0","TJ5COIgPU6dV1Kc7jGTkJI2JlYqiEhHfcrfM5zk548Q",{"id":116,"title":117,"body":118,"date":432,"description":122,"extension":107,"meta":433,"navigation":109,"path":434,"seo":435,"stem":436,"version":437,"__hash__":438},"changelog\u002Fchangelog\u002Fv0.16.0.md","Sessions on branches you already have, hooks that add up, and a What's new window",{"type":8,"value":119,"toc":412},[120,123,127,142,148,152,163,169,174,185,189,196,207,214,229,233,246,250,269,272,276,287,305,308,311,321,325,328,335,339,348,352,358,376,379,383,386,390,396,402,406],[11,121,122],{},"Sessions can now start on a branch that already exists, repository hooks run alongside the ones\nyou set up rather than replacing them, and every release explains itself — in the app and on the\nweb.",[15,124,126],{"id":125},"release-notes-you-can-actually-read","Release notes you can actually read",[11,128,129,130,137,138,141],{},"Plexus now keeps a changelog. Every release is published at\n",[131,132,136],"a",{"href":133,"rel":134},"https:\u002F\u002Frunplexus.com\u002Fchangelog",[135],"nofollow","runplexus.com\u002Fchangelog",", and the app shows you what changed\nin a ",[23,139,140],{},"What's new"," window the first time you run a new version — one tab per feature, so each\none gets room to explain itself rather than a single line in a toast.",[11,143,144,145,96],{},"You will only ever see it once per version. If you skipped a few releases, they are all there,\nselectable from the top of the window. You can reopen it any time from\n",[23,146,147],{},"Settings → About → What's new",[15,149,151],{"id":150},"repository-hooks-run-alongside-your-own","Repository hooks run alongside your own",[11,153,154,155,158,159,162],{},"A repository that commits a ",[71,156,157],{},".plexus\u002Fhooks.json"," used to ",[23,160,161],{},"replace"," the hooks you had set up in\nPlexus for that project — every event, even the ones the file says nothing about. Both sets run\nnow. Cloning a repo still gets you the team's setup, and it no longer costs you the hooks you\nadded for yourself.",[11,164,165,168],{},[23,166,167],{},"How repository hooks combine with yours"," (Settings → Worktrees & Hooks) decides which set goes\nfirst: the repository's hooks first (the default), yours first, or repository hooks only. That\nlast value is the old behaviour, if you want it back. Like the other hook settings it layers\nglobal → workspace → project, so one choice can cover everything and a single project can still\ndiffer.",[170,171,173],"h3",{"id":172},"if-you-used-repository-hooks-before-this-version","If you used repository hooks before this version",[11,175,176,177,180,181,184],{},"Hooks you set up in Plexus for such a project ",[23,178,179],{},"start running again"," the next time a session\nstarts, resumes, or is torn down — including the teardown that runs when you delete a session or\na project. Open ",[23,182,183],{},"Settings → Worktrees & Hooks"," on the project to see exactly what will run; the\neditor points this out once, on projects that have both.",[15,186,188],{"id":187},"plexus-tells-you-when-a-connection-needs-renewing","Plexus tells you when a connection needs renewing",[11,190,191,192,195],{},"GitHub and Bitbucket grant a token the permissions the app had ",[23,193,194],{},"at the moment you signed in",".\nIf that set later changes, your existing connection quietly keeps the narrower access — and\nrefreshing it in the background never widens it. Until now you found out when something failed:\na repository search that couldn't list anything, or a pull-request status that stopped updating.",[11,197,198,199,202,203,206],{},"Plexus now checks for itself, shortly after starting and occasionally while you work. When the\naccess no longer covers what it needs, a notice names the missing permission — in the wording the\nprovider itself uses, like Bitbucket's ",[23,200,201],{},"Workspace membership: Read"," — and offers ",[23,204,205],{},"Reconnect","\nright there, so you sign in without leaving what you were doing.",[11,208,209,210,213],{},"It then re-checks before telling you it worked. Signing in again is not what clears the warning;\nthe check is. So if a reconnect happens to land on the same narrow access, Plexus says so plainly\nand stops asking, rather than sending you round the same loop. ",[23,211,212],{},"Settings → Git providers"," keeps\nshowing the warning until a check finds the access restored, and a later permissions change\nraises a fresh notice — dismissing one never silences the next.",[11,215,216,217,220,221,224,225,228],{},"Two settings under ",[23,218,219],{},"Settings → Git & PRs → Connection checks"," control it: ",[23,222,223],{},"Check that provider\nconnections still work"," turns it off entirely, and ",[23,226,227],{},"How often to check provider connections\n(hours)"," spaces the checks out on a metered connection or a rate-limited account.",[15,230,232],{"id":231},"settings-grouped-into-sections","Settings grouped into sections",[11,234,235,236,43,239,43,242,245],{},"Settings pages are no longer one long list. Related settings now sit together under a heading\nwith a line describing what the group covers — ",[23,237,238],{},"Pull requests",[23,240,241],{},"Code review",[23,243,244],{},"Fetching and\nremotes",", and so on. Nothing moved between pages, so anything you knew where to find is still\non the same page.",[170,247,249],{"id":248},"override-one-group-at-a-time","Override one group at a time",[11,251,252,253,256,257,260,261,264,265,268],{},"On a workspace's or project's settings, ",[23,254,255],{},"Override parent settings"," now belongs to each section\nrather than to the whole page. You can override ",[23,258,259],{},"Copied files"," for one project and leave\n",[23,262,263],{},"Session folders"," and ",[23,266,267],{},"Lifecycle hooks"," inheriting, and turning a section back off clears only\nthat section's overrides.",[11,270,271],{},"One consequence worth knowing: if you had previously overridden a whole page to change a single\nvalue, only the sections you actually edited will show as overridden. Nothing you set has been\nlost — the rest of that page was inheriting all along, and now says so.",[15,273,275],{"id":274},"start-a-session-on-a-branch-that-already-exists","Start a session on a branch that already exists",[11,277,278,279,282,283,286],{},"Starting a session always cut a new branch for it. Now the New session dialog has a mode switch:\nkeep ",[23,280,281],{},"New branch"," for that, or pick ",[23,284,285],{},"Existing branch"," to check out a branch that is already\nthere. Point a session at a colleague's pushed branch to carry it forward, or at one you have\nbeen asked to look at, and review it with the agent in a worktree of its own.",[11,288,289,292,293,296,297,300,301,304],{},[23,290,291],{},"Branch"," is what gets checked out; ",[23,294,295],{},"Compare with"," is what the Review tab diffs against, what\n",[23,298,299],{},"Rebase onto…"," targets, and the base of any pull request you open. It defaults to your\nrepository's trunk — usually ",[71,302,303],{},"main"," — rather than whatever your main working copy happens to be\non, so a branch you did not cut is compared against something meaningful.",[11,306,307],{},"A branch that only exists on the remote works the same way: Plexus creates a local branch\ntracking it, so it starts at the remote's tip and ahead\u002Fbehind counts are right from the start.",[11,309,310],{},"Git allows a branch in exactly one working copy at a time, so a branch that is already checked\nout is shown greyed out with the reason — the session holding it, your project's own working\ncopy, or a leftover worktree record you can clear from the Git tab.",[11,312,313,316,317,320],{},[23,314,315],{},"Pull base branch first"," becomes ",[23,318,319],{},"Pull the branch first"," in this mode: it fetches, then\nfast-forwards the branch you picked, so you do not quietly start on a copy from last week.",[170,322,324],{"id":323},"plexus-will-not-delete-a-branch-it-did-not-create","Plexus will not delete a branch it did not create",[11,326,327],{},"Cancelling a start, a setup script that stops the launch, or an agent that fails to start all\nclean up the session's working copy — but a branch that was already there is left alone. Only a\nbranch Plexus cut for the session is removed, exactly as before.",[11,329,330,331,334],{},"Deleting one on purpose is still possible: ",[23,332,333],{},"Also delete the local branch"," asks a second time\nand names the branch, and it is never pre-ticked from your last answer the way it is for a branch\nPlexus created. Git then keeps any branch still carrying commits that are not merged anywhere\nelse, and Plexus tells you it did. Deleting a project or workspace works the same way, listing\nthe branches it did not create before it touches them.",[170,336,338],{"id":337},"one-thing-to-keep-in-mind","One thing to keep in mind",[11,340,341,264,344,347],{},[23,342,343],{},"Rebase",[23,345,346],{},"Squash"," rewrite the branch's history. On a branch you share with other people,\nthat is history they may already have — so Plexus warns rather than stopping you. Nothing leaves\nyour machine until you push, and Plexus never force-pushes.",[15,349,351],{"id":350},"the-pull-request-conversation-stays-out-of-the-way","The pull request conversation stays out of the way",[11,353,354,355,357],{},"The ",[23,356,50],{}," section at the top of the Review tab now starts collapsed, so\nopening the tab shows you the diff rather than a wall of remote comments. Opening it is for the\nvisit you're on — come back to the tab later and it's closed again.",[11,359,360,361,364,365,368,369,264,372,375],{},"Collapsed, its header still tells you what it's holding: a count of what's actually inside the\nsection, an ",[23,362,363],{},"Approved"," or ",[23,366,367],{},"Changes requested"," chip when a reviewer left a verdict, and a\nwarning triangle when only part of a very busy conversation could be fetched. ",[23,370,371],{},"Comment on the\nPR",[23,373,374],{},"Send N PR comments to agent"," stay where they were, so neither needs the section open.",[11,377,378],{},"Opened, the section takes at most about 40% of the tab and scrolls inside that, with its header\nstaying put. A long conversation can no longer squeeze the diff off the screen.",[170,380,382],{"id":381},"the-count-now-describes-whats-behind-it","The count now describes what's behind it",[11,384,385],{},"It used to count every thread on the pull request, including the ones that render against their\ndiff lines further down. It now counts what opening the section actually gives you — the\ncomments that have no home on a line, plus the review verdicts.",[170,387,389],{"id":388},"approving-without-writing-anything-counts","Approving without writing anything counts",[11,391,392,393,395],{},"A reviewer who clicks Approve and leaves the comment box empty — GitHub's default — used to be\ndropped entirely on the way in. If they had asked for changes earlier, Plexus went on reporting\n",[23,394,367],{}," long after they had approved. Empty-bodied decisions now come through and\nappear as a one-line entry with the reviewer's name and the verdict.",[11,397,398,399,401],{},"The chip also reads the review history correctly: each reviewer's most recent decision counts, so\nan approval replaces that same reviewer's earlier ",[23,400,367],{},", while one reviewer still\nasking for changes outweighs everyone else's approval.",[170,403,405],{"id":404},"writing-a-comment-has-room-of-its-own","Writing a comment has room of its own",[11,407,408,411],{},[23,409,410],{},"Comment on the PR"," opens its box below the section rather than inside it, so the conversation's\nsize limit never squeezes what you're typing, and collapsing the section while you write is a way\nto make room — your text stays put when you do.",{"title":98,"searchDepth":99,"depth":99,"links":413},[414,415,419,420,423,427],{"id":125,"depth":99,"text":126},{"id":150,"depth":99,"text":151,"children":416},[417],{"id":172,"depth":418,"text":173},3,{"id":187,"depth":99,"text":188},{"id":231,"depth":99,"text":232,"children":421},[422],{"id":248,"depth":418,"text":249},{"id":274,"depth":99,"text":275,"children":424},[425,426],{"id":323,"depth":418,"text":324},{"id":337,"depth":418,"text":338},{"id":350,"depth":99,"text":351,"children":428},[429,430,431],{"id":381,"depth":418,"text":382},{"id":388,"depth":418,"text":389},{"id":404,"depth":418,"text":405},"2026-08-05",{},"\u002Fchangelog\u002Fv0.16.0",{"title":117,"description":122},"changelog\u002Fv0.16.0","v0.16.0","h6qJBrGMsLEfHPL1pEeCNKOt9dfZ68XCmmOdJ-pyRwI",1785999953637]