canon-ai 3.7.0 → 3.9.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,28 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [3.9.0] — 2026-10-16
8
+
9
+ ### Added
10
+
11
+ - **`.canon/config.json` sets which docs QA keeps fresh.** Under `docs_freshness`, map source-path globs to the docs QA must check when a task touches matching files (`paths`), list docs QA should report under "Docs drift" in `done.md` instead of editing (`flag_only`), or replace the default protected set (`protected`). The file is yours: `canon init` doesn't create it and `canon upgrade` never changes it. A malformed file stops every `canon run` form before it changes any state, and `canon doctor` reports the file's status. See "Configuring docs freshness" in the canon-ai README.
12
+
13
+ ### Changed
14
+
15
+ - **QA's doc list and the QA commit allowlist now come from the same set.** QA's prompt names the protected docs plus any mapped docs whose globs match the task's changes. Previously the prompt named five docs while the allowlist admitted six.
16
+ - **`docs/pipeline-orchestrator.md` is no longer a default protected doc.** It is a canon-managed file in your repo, and `canon upgrade` overwrites it, so QA edits there didn't last.
17
+
18
+ ### Fixed
19
+
20
+ - **`--ship` and the QA and human-review commits no longer split file names that contain ` -> `.** Only renamed or copied entries in git status are read as an `old -> new` pair.
21
+ - **File names with non-ASCII or special characters now match their real paths.** Git quotes such names in its status and diff output (for example `docs/😀.md`), and canon compared the quoted form. The QA-end and human-review commits could reject the file, implement's auto-commit checks could miss it, and `--ship` could overlook it as dirty. Canon now decodes the quoting first.
22
+
23
+ ## [3.8.0] — 2026-10-07
24
+
25
+ ### Changed
26
+
27
+ - **`/canon-spec-review`'s factual reviewer now runs on Haiku.** The reviewer that checks a spec's paths, symbols, and signatures against the code now runs on `haiku`. Its work is lookups, so the smaller model is enough and costs less. The shape and spec-quality reviewers still use your session's model. Run `canon upgrade`, then start a new Claude Code session to pick it up.
28
+
7
29
  ## [3.7.0] — 2026-10-06
8
30
 
9
31
  ### Added
package/README.md CHANGED
@@ -304,6 +304,45 @@ diff .canon/templates/spec.md tasks/_templates/spec.md
304
304
 
305
305
  See `.canon/README.md` for a quick reference.
306
306
 
307
+ ### Configuring docs freshness
308
+
309
+ Create an adopter-owned `.canon/config.json` to tell QA which docs to keep current:
310
+
311
+ ```json
312
+ {
313
+ "docs_freshness": {
314
+ "protected": ["docs/architecture.md", "docs/codebase-map.md"],
315
+ "paths": {
316
+ "api/**": ["docs/api-contract.md", "docs/environment-variables.md"],
317
+ "**": ["docs/ROADMAP.md", "AGENTS.md"]
318
+ },
319
+ "flag_only": ["AGENTS.md"]
320
+ }
321
+ }
322
+ ```
323
+
324
+ `protected` **replaces** the defaults: architecture, codebase-map, patterns,
325
+ product-context, and decisions. Omit it to keep those defaults; use `[]` to clear
326
+ them. Add docs through `paths`, using `"**"` to check one on every task.
327
+ Globs support `**`, `*`, `?`, and `{a,b}`; wildcards match dotfiles and hidden
328
+ directories too. Brace alternatives must be one level and stay within a single
329
+ path segment; nested braces and alternatives containing slashes are unsupported.
330
+ Keys match file paths: use a glob such as `api/**` rather than a directory-only
331
+ key ending in a slash. QA scans mapped docs when the task's committed diff matches,
332
+ while every mapped doc stays eligible for QA commits across later review rounds.
333
+
334
+ `flag_only` removes docs from QA's edit permission. When selected by the protected
335
+ set or a matching mapping, QA reports stale statements in a **Docs drift** section
336
+ of the QA summary instead. An implementer may still edit a flag-only doc explicitly
337
+ listed in the spec's Affected Files.
338
+
339
+ `canon init` does not create this file and `canon upgrade` leaves it alone.
340
+ Commit the config before starting worktree-isolated tasks: each worktree reads its
341
+ branch's copy, so uncommitted main-checkout changes are not available there.
342
+ Malformed config stops runs, including reroute and ship, and fails the docs-freshness
343
+ check in `canon doctor`; unknown keys warn. Telemetry files and task-artifact paths
344
+ cannot be configured. Without a config, the default protected set applies.
345
+
307
346
  ## Architecture: two layers
308
347
 
309
348
  Canon is two products: