canon-ai 3.8.0 → 3.10.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 +27 -0
- package/README.md +39 -0
- package/dist/cli/index.js +899 -697
- package/dist/orchestrator/run-task.js +1434 -1009
- package/package.json +1 -1
- package/templates/.canon/README.md +19 -2
- package/templates/.canon/templates/notes.md +1 -1
- package/templates/.canon/templates/spec.md +2 -2
- package/templates/.claude/skills/canon-spec/SKILL.md +1 -0
- package/templates/docs/lessons-learned.md +3 -3
- package/templates/docs/patterns.md +1 -1
- package/templates/docs/pipeline-orchestrator.md +14 -12
- package/templates/docs/task-quality-log.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,33 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [3.10.0] — 2026-10-17
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Parallel tasks no longer conflict on the shared telemetry logs.** While a task runs, its metrics rows, quality-log row and QA lessons go to its own files in its task folder. `canon run --ship` folds them into `docs/pipeline-invocations.md`, `docs/task-quality-log.md` and `docs/lessons-learned.md` in the archive commit it already makes on the base branch. Two task PRs no longer touch those three files, so they no longer conflict there, on GitHub or locally. Tasks started on an older canon still merge their log edits the old way.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`--pr` warns when a task branch still edits a shared telemetry log.** The warning names each file and doesn't block the PR.
|
|
16
|
+
- **A `--ship` failure after the fold says where the folded rows are.** If the archive move, commit or push fails after the logs were folded, the message names the affected logs, says the task's fragments are already gone, says not to reset those docs, and points to the recovery steps in the pipeline reference.
|
|
17
|
+
|
|
18
|
+
## [3.9.0] — 2026-10-16
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **`.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.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **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.
|
|
27
|
+
- **`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.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **`--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.
|
|
32
|
+
- **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.
|
|
33
|
+
|
|
7
34
|
## [3.8.0] — 2026-10-07
|
|
8
35
|
|
|
9
36
|
### Changed
|
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:
|