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

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,11 +4,19 @@ What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The boar
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ - **Photos picked on a phone attach again.** On iPhone, choosing a photo from the paperclip's picker closed the picker and nothing showed: coming back from the picker counts as a wake-up, which redraws the page, and iOS hands over the photo only after that, to the old picker the redraw had thrown away. The picker now lives outside the page, so a redraw can't lose what you picked, and a pick that still can't attach says why. Full screen also measures again as a phone's keyboard comes up, for keyboards (Raycast, Gboard, SwiftKey) that report late. A board reload is enough.
8
+ - **Walkthroughs say whether a step follows or departs from a decision.** A decision chip on a step now reads ≠ Departs when the step goes against it, and the step always gets a Look closely note naming the decision; from there the decision viewer offers to link one of the session's own decisions as its replacement. A session's own decisions show in its walkthrough right away, marked ◌ Proposed, with Accept and Reject in the viewer. Needs `leftoff restart` and `leftoff upgrade --beta`.
9
+ - **Weak tests caught without the model.** Walk me through it flags a test change that removes assertions and adds none, adds a skip or .only, asserts a value against itself, or mocks the module the test is for, and gives it a Look closely note even if the model put it under Safe to skip. Needs `leftoff restart`.
10
+ - **Test plans from merged PRs.** A project's page, its decision log and the PRs page (pick merged PRs, then Test plan for these) make a short manual script for what merged lately: up to about 12 checks that fit 15, 30 or 60 minutes, each with where to go, the steps, what you should see and why it's on the list, ordered by risk. Risky callouts, weak tests and changed decisions always become checks or are listed under Not covered with the reason. Tick checks off, note what failed and propose a decision from it, then Copy as Markdown or Download .html. `leftoff testplan --project NAME` prints it. Needs `leftoff restart`.
11
+ - **Decisions in the digest and Catch me up.** The daily digest has a short Decisions part per project: what was accepted and superseded yesterday ("D-a → D-b") and how many wait for review, each linking to the log. Catch me up on a session lists what it decided since you last looked, with each decision's status, and Ask can answer "why did we switch from X?" from the decision that replaced it. Needs `leftoff restart`.
12
+ - **Review decisions from the session panel.** A session's Decided list has Accept, Reject and Edit right there for each proposed decision, so reviewing one no longer means leaving the session. A project's page and its board chip show a quiet ◌ count of decisions waiting for review. When a project keeps its log in the repo and CLAUDE.md already imports docs/DECISIONS.md, a new session is only given the decisions accepted since that file was written. Needs `leftoff restart`.
13
+ - **See whether a session started with its decisions, and give them on demand.** The session panel says "Started with 4 decisions" under its checkpoints. When Claude Code skipped Leftoff's SessionStart hook (its Security default runs first), it says the session wasn't given its repo's decisions and why; type `/cp-decisions` in the session to give Claude the same list. Needs `leftoff upgrade --beta && leftoff restart`.
7
14
  - **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
15
  - **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
16
  - **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
17
  - **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
18
  - **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.
19
+ - **No gap above full screen after you send from a phone.** With the keyboard up, iOS pans the screen up and full screen follows it so the composer stays above the keyboard. When the keyboard closed after a send, iOS could still report that pan (or report nothing), so full screen stayed about 300px down the screen with the board showing through above it. Now the pan only counts while the keyboard is really up, the layout is checked again as the keyboard goes down, and if iOS scrolled the page underneath, it scrolls back.
12
20
  - **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.
13
21
  - **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.
14
22
  - **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.