canon-ai 3.10.0 → 3.11.0

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,29 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [3.11.0] — 2026-10-20
8
+
9
+ ### Changed
10
+
11
+ - **An agent session failure now stops the run at a blocked phase instead of killing the orchestrator.** If a non-interactive Claude or Codex session fails mid-phase (it won't start, stalls, is killed, or Claude exits with an error such as an exhausted budget or an expired login), `canon run` marks the phase blocked, records the reason in the task's escalations, prints the command to resume, and exits 2. Fix the cause and run `canon run <id>` again: the phase re-runs with no manual reset. In a bundle, every member is parked. A detached run no longer disappears with its phase stuck in progress. `--interactive` sessions keep their existing terminal behavior.
12
+
13
+ ### Fixed
14
+
15
+ - **`canon watch` reports a crashed run as a death, not a finished step or nothing to watch.** A run that exited with an error right after a phase finished used to show `reason=step_done` (exit 0), or `reason=nothing_to_watch` (exit 2) when watch started after the crash. It now shows `reason=death` and exits 4 when the run log's newest exit line is non-zero (including a run stopped by a signal) and isn't older than the task state, or when the run's runtime files survive. The reason prints to stderr; the summary line is unchanged. A clean `--step` finish and a clean stop at a gate still report `step_done`. A late watch on a bundle's secondary member, after the run's heartbeat is gone, can't find the primary's log and still reports `nothing_to_watch`; watch the primary task instead. `canon watch --follow` keeps streaming the active run's log after the task moves into a worktree or resumes.
16
+ - **A failed implement auto-commit is retried before code review starts.** If the auto-commit after implement fails (for example, a pre-commit hook rejects it), the next `canon run` commits the pending handoff files first. Previously they went to the code-review pre-flight, which rejected them and used up a review loop. If the retry fails again, the run stops with the same `Auto-commit failed:` message and no review loop is used.
17
+ - **The code-review foreman cites headings exactly.** A quoted `§"Heading"` citation in `review.md` must match a real heading, so the foreman no longer writes citations that fail the docs-refs check at commit time.
18
+ - **A worktree can be created right after `canon update`.** The install record `canon update` writes (`provenance.json` under `.canon`) no longer counts as a stray source edit that blocks the first task worktree.
19
+ - **`canon task new` warns when the base branch came from a non-default current branch.** Without `--base`, if you're on a branch other than the remote default, it says so and prints the `canon task set <id> base_branch <default>` fix. An explicit `--base` is silent.
20
+ - **The handoff pre-flight says how to fix an unchanged file.** A Changes row for a file with no committed change against the task base now says to drop the row if the file was untouched or rewritten with identical content.
21
+ - **`canon update` names pnpm for a pnpm-managed install.** The layout refusal for pnpm's virtual-store shape now says to update with `pnpm add -g canon-ai@<version>` (or the `github:<repo>#<sha>` form for `--channel main` / `--ref`, honoring `CANON_UPSTREAM_REPO`).
22
+ - **Mixed bundle sizes list in size order.** The implement header now shows `XS, S, M, L, XL` order instead of alphabetical.
23
+
24
+ ## [3.10.1] — 2026-10-17
25
+
26
+ ### Fixed
27
+
28
+ - **A task's lessons no longer bring a stray heading into the shared lessons log.** `canon run --ship` drops any `#` or `##` title an agent puts at the top of a task's lessons file before folding it into `docs/lessons-learned.md`, and the QA prompt now says that file holds only `###` entries.
29
+
7
30
  ## [3.10.0] — 2026-10-17
8
31
 
9
32
  ### Changed