@leftoff/cli 0.9.18-beta.5 → 0.9.18-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@ What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The boar
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ - **Walk me through it cites decisions and flags weak tests.** A step shows a small chip for each accepted decision it follows; tap it to see the decision and what it replaced. A step that departs from one gets a Look closely note, and a walkthrough citing a decision that's since been superseded says so, with Update. A test that doesn't really test anything (a loosened or deleted assertion, a mock of the thing under test, a skipped test) gets a Look closely note at its line instead of landing in Safe to skip.
8
+ - **New sessions and Ask know what was decided.** A new Claude Code session in a repo starts with that repo's accepted decisions (newest first, about 15 at most, with where the full log is), added beside what your own hooks give it. Ask about a project can cite a decision when you ask why something was done; a decision it didn't get from the log is dropped.
9
+ - **A decision log for every repo.** Decisions from checkpoints arrive as proposals on the repo's decision log (a project's Decisions, or Decision log → in the session panel); Accept, Reject or Edit each one. When a new one changes an accepted decision Leftoff suggests the link, you confirm it, and the timeline shows the chain: what each decision replaced and what replaced it, with dates, the session it came from and its PR. Copy as Markdown gives it in a DECISIONS.md style.
10
+ - **Keep a project's decision log in its repos.** A project's Decisions has one choice, Keep decision log in this repo (off: it stays in Leftoff). On, each repo's docs/DECISIONS.md gets its accepted decisions in a block between Leftoff's markers, written on a Mac with a checkout; the rest of the file is left alone and nothing is ever staged or committed.
11
+ - **Checkpoints record what was decided.** A checkpoint now has a Decided list: a question you answered from its options (with the ones you didn't pick), a plan you approved, a correction you gave, or a trade-off Claude chose and said so. It shows under the newest checkpoint in the session panel, folded with a count; most checkpoints have none, and none are made up.
7
12
  - **Let me answer prompts here.** When Claude Code's Security default skips Leftoff's hooks, the session's note now has a **Let me answer prompts here** button, and `leftoff doctor --fix` says the same. Both show the managed-settings lines that seat Leftoff after the Security default, with Copy: enable it, list it in appendPlugins and declare its marketplace. They also show the file the lines go in and who can write it (your admin, or you with sudo on your own Mac). Leftoff never writes managed settings. Earlier betas' doctor said to add `"appendPlugins": ["leftoff@checkpoints"]` to ~/.claude/settings.json instead. That doesn't work: Claude Code ignores the key there whenever the Security default is seated. `leftoff doctor --unfix` (or **Remove the ignored entry**) takes out just Leftoff's entry, after showing the diff and asking (default No), with a backup in ~/.config/checkpoints/backups. It never runs on a managed Mac. Once managed settings list Leftoff, a session that started before shows a quiet “restart Claude Code to apply” until its hooks arrive.
8
13
  - **Needs you and turn ends work when another plugin takes Claude Code's hooks first.** On a Team or Enterprise plan, or a Mac with managed Claude Code settings, Claude Code 2.1.31x runs its built-in “cc-plugin-sec-default” ahead of the plugins you installed, and it sends every classic hook event (Stop, PermissionRequest, Notification, your prompt, SessionStart) on past them, so Leftoff's hooks never ran (“leftoff: its classic.Stop hook was skipped …”). A permission prompt now shows as Needs you anyway: the mod reads it from Claude Code's permission check, which still reaches it, and Needs you ends when the tool runs or the turn does (answer it in the terminal; the board can't answer it in this setup). Turn ends come from the mod and the transcript as before. The session's header note now says which hooks were skipped and why (“Stop and PermissionRequest skipped: cc-plugin-sec-default runs first”, the rest in its tip), and `leftoff doctor` names any plugin set to run ahead of Leftoff and the fix.
9
14
  - **A finished turn stops spinning within seconds.** When Claude Code's end-of-turn signal never reached Leftoff, a session kept its spinner (“active”) until the whole dormancy window passed, and some never stopped at all. Now any Claude Code session (a board terminal, My terminal app, Live, the hooks, a headless one whose process is gone) settles about 20 seconds after its transcript goes still with Claude's answer last, or within seconds when the transcript itself marks the end; a tool call still running, a permission prompt or a queued message keeps it working or Needs you. It also reads turns Claude Code ends on a tool result, answers through the Live reply tool, and messages pulled back out of the queue, which used to keep a session “working” forever. The mod now reports a turn's end itself when no Stop follows it, a late Stop never counts a turn twice, and a terminal Leftoff opens for a daemon on its own folder reports to that folder. A session whose turns arrive but none of Claude Code's own hook events do now says so: one line in the daemon log, and a quiet “hooks not reporting” note beside its pills.
@@ -61,7 +66,6 @@ What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The boar
61
66
 
62
67
  - **“Away” never claims more than a session’s age.** A session that started while you were away still reads at full depth, but its Catch me up label now says how long it really went unseen (a 30-minute-old session said “Away 12h”).
63
68
 
64
- - **Choose which machine hosts your board, and it fails over on its own.** Settings → Use from anywhere → Hosted by lists your machines (● online / ○ offline), marks the host, and has Make host and a Preferred choice (or Automatic); `leftoff relay host [name|auto]` does the same and `leftoff relay status` shows it. The relay keeps the host while it’s online (a machine reconnecting after an upgrade no longer takes the board), prefers a Mac that can open your paired browsers’ keys, hands the board to another online machine when the host’s lid closes (about 25 s, was 75), and gives it back to your preferred host 10 s after it returns. The reconnecting screen says which machine is out, switches, and offers “Use nightblood instead” when several are online. Needs the relay update for the host choice; phones stay paired.
65
69
  - **Choose which machine hosts your board, and it fails over on its own.** Settings → Use from anywhere → Hosted by lists your machines (● online / ○ offline), marks the host, and has Make host and a Preferred choice (or Automatic); `leftoff relay host [name|auto]` does the same and `leftoff relay status` shows it. The relay keeps the host while it’s online (a machine reconnecting after an upgrade no longer takes the board), prefers a Mac that can open your paired browsers’ keys, hands the board to another online machine when the host’s lid closes (about 25 s, was 75), and gives it back to your preferred host 10 s after it returns. The reconnecting screen says which machine is out, switches, and offers “Use laptop instead” when several are online. Needs the relay update for the host choice; phones stay paired.
66
70
  - **A Needs-you reply shows as your words.** Claude Code wraps a prompt the plugin sends between turns as “The leftoff plugin sent a message: … Address the message above.”; the thread, titles and previews now show only what you typed (“You · from Needs you”).
67
71
  - **PRs named as `repo#123`, even from a sandbox with no git remote.** When Claude writes a session's PRs as `api#574` or `acme/web#12` (in its words or yours), or suggests a `gh pr edit 574` to run on another machine, they link: a bare repo name is matched against the GitHub repos your other sessions use (never a guess when two orgs share the name), and whichever machine has gh signed in checks each one, so a session in a sandbox without git remote or gh still shows its PRs. A session can list PRs from several repos. Merged and closed PRs show too, each with an icon and its word (Open, Draft, Merged, Closed). A reference that can't be checked yet shows as a quiet “api#574 · not checked” chip that says why. An issue number never shows as a PR. After updating, run `leftoff restart`.