@journeykit/canon 0.37.0 → 0.39.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/dist/skills/SKILL.src.md +29 -13
- package/dist/skills/reference/canon-artifact-ingest.md +0 -2
- package/dist/skills/reference/canon-gate.md +56 -2
- package/dist/skills/reference/canon-report-dashboard.md +27 -36
- package/dist/skills/reference/canon-review.md +10 -1
- package/dist/skills/reference/canon-storage.md +54 -4
- package/dist/skills/reference/role-implementer.md +6 -5
- package/dist/skills/reference/role-orchestrator.md +28 -23
- package/dist/skills/reference/role-planner.md +3 -3
- package/dist/skills/reference/role-reviewer.md +6 -3
- package/man/canon-adapter-authorize.1 +2 -2
- package/man/canon-adapter-validate.1 +2 -2
- package/man/canon-adapter.1 +2 -2
- package/man/canon-artifacts-move.1 +2 -2
- package/man/canon-artifacts-prune.1 +77 -0
- package/man/canon-artifacts-store.1 +2 -2
- package/man/canon-artifacts-verify.1 +4 -2
- package/man/canon-artifacts.1 +5 -2
- package/man/canon-brief-approve.1 +2 -2
- package/man/canon-brief-check.1 +2 -2
- package/man/canon-brief-show.1 +2 -2
- package/man/canon-brief.1 +2 -2
- package/man/canon-change-new.1 +2 -2
- package/man/canon-change.1 +2 -2
- package/man/canon-completion.1 +2 -2
- package/man/canon-context-pack-add.1 +2 -2
- package/man/canon-context-pack-show.1 +2 -2
- package/man/canon-context-pack-verify.1 +2 -2
- package/man/canon-context-pack.1 +2 -2
- package/man/canon-context.1 +2 -2
- package/man/canon-dashboard.1 +2 -2
- package/man/canon-demo-init.1 +2 -2
- package/man/canon-demo-review.1 +2 -2
- package/man/canon-demo.1 +2 -2
- package/man/canon-dispatch-begin.1 +3 -3
- package/man/canon-dispatch-diff.1 +2 -2
- package/man/canon-dispatch-end.1 +2 -2
- package/man/canon-dispatch.1 +2 -2
- package/man/canon-divergence-accept.1 +2 -2
- package/man/canon-divergence-add.1 +2 -2
- package/man/canon-divergence-defer.1 +2 -2
- package/man/canon-divergence-list.1 +2 -2
- package/man/canon-divergence-resolve.1 +2 -2
- package/man/canon-divergence.1 +2 -2
- package/man/canon-evidence-add.1 +3 -3
- package/man/canon-evidence-approval-payload.1 +2 -2
- package/man/canon-evidence-audit.1 +3 -3
- package/man/canon-evidence.1 +2 -2
- package/man/canon-export.1 +2 -6
- package/man/canon-feature-new.1 +2 -2
- package/man/canon-feature.1 +2 -2
- package/man/canon-finding-add.1 +2 -2
- package/man/canon-finding-close.1 +4 -4
- package/man/canon-finding-list.1 +3 -3
- package/man/canon-finding.1 +2 -2
- package/man/canon-format.1 +2 -2
- package/man/canon-gate-check.1 +2 -2
- package/man/canon-gate-install-hooks.1 +2 -2
- package/man/canon-gate-promote.1 +2 -2
- package/man/canon-gate.1 +2 -2
- package/man/canon-ingest-plans.1 +2 -2
- package/man/canon-ingest-records.1 +2 -2
- package/man/canon-ingest.1 +4 -8
- package/man/canon-init.1 +28 -10
- package/man/canon-inventory-sync.1 +2 -2
- package/man/canon-inventory.1 +2 -2
- package/man/canon-ledger-compact.1 +2 -2
- package/man/canon-ledger.1 +2 -2
- package/man/canon-migrate.1 +2 -2
- package/man/canon-plugin-sync.1 +2 -2
- package/man/canon-plugin.1 +2 -2
- package/man/canon-policy-approve.1 +2 -2
- package/man/canon-policy-show.1 +2 -2
- package/man/canon-policy.1 +2 -2
- package/man/canon-prompt-add.1 +2 -2
- package/man/canon-prompt-show.1 +2 -2
- package/man/canon-prompt.1 +2 -2
- package/man/canon-purge.1 +8 -8
- package/man/canon-query.1 +2 -6
- package/man/canon-regime-show.1 +2 -2
- package/man/canon-regime.1 +2 -2
- package/man/canon-report-build.1 +2 -2
- package/man/canon-report-check.1 +2 -2
- package/man/canon-report-snapshot.1 +2 -2
- package/man/canon-report.1 +2 -2
- package/man/canon-retrieve.1 +2 -2
- package/man/canon-review-change.1 +2 -2
- package/man/canon-review-scenario.1 +2 -2
- package/man/canon-review.1 +2 -2
- package/man/canon-scenario-new.1 +2 -2
- package/man/canon-scenario.1 +2 -2
- package/man/canon-schema.1 +2 -2
- package/man/canon-search.1 +2 -6
- package/man/canon-selftest.1 +2 -4
- package/man/canon-skills-check.1 +22 -5
- package/man/canon-skills-doctor.1 +24 -7
- package/man/canon-skills-install.1 +22 -5
- package/man/canon-skills-show.1 +2 -4
- package/man/canon-skills.1 +3 -3
- package/man/canon-status.1 +2 -2
- package/man/canon-strategy-approval-payload.1 +2 -2
- package/man/canon-strategy-promote.1 +2 -2
- package/man/canon-strategy-rollback.1 +3 -3
- package/man/canon-strategy.1 +2 -2
- package/man/canon-subject-adopt.1 +2 -2
- package/man/canon-subject-move.1 +2 -2
- package/man/canon-subject-new.1 +2 -2
- package/man/canon-subject-show.1 +2 -2
- package/man/canon-subject-unadopt.1 +2 -2
- package/man/canon-subject.1 +2 -2
- package/man/canon-task-done.1 +2 -2
- package/man/canon-task.1 +2 -2
- package/man/canon-tier-age.1 +2 -2
- package/man/canon-tier.1 +2 -2
- package/man/canon-trace.1 +4 -4
- package/man/canon.1 +5 -5
- package/package.json +4 -4
- package/dist/skills/reference/canon-session-ingest.md +0 -224
- package/man/canon-ingest-sessions.1 +0 -62
|
@@ -95,7 +95,7 @@ canon gate check --json
|
|
|
95
95
|
```
|
|
96
96
|
```text
|
|
97
97
|
# Read stored records across every storage tier
|
|
98
|
-
usage: canon query --kind <change|task|scenario|
|
|
98
|
+
usage: canon query --kind <change|task|scenario|run|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin <PLUGIN_ID> | --history] [--change <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
|
|
99
99
|
```
|
|
100
100
|
```bash
|
|
101
101
|
canon query --kind evidence --json
|
|
@@ -123,7 +123,7 @@ canon schema evidence add --json
|
|
|
123
123
|
```
|
|
124
124
|
```text
|
|
125
125
|
# Search records, brief sections and scenario text, with each hit's neighbors in the record graph
|
|
126
|
-
usage: canon search <TEXT> [--kind <change|task|scenario|
|
|
126
|
+
usage: canon search <TEXT> [--kind <change|task|scenario|run|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
|
|
127
127
|
```
|
|
128
128
|
```bash
|
|
129
129
|
canon search timeout --kind finding --json
|
|
@@ -165,7 +165,7 @@ canon subject unadopt demo --change add-login --json
|
|
|
165
165
|
```
|
|
166
166
|
```text
|
|
167
167
|
# Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
|
|
168
|
-
usage: canon trace <
|
|
168
|
+
usage: canon trace <TRACE_ID>
|
|
169
169
|
```
|
|
170
170
|
```bash
|
|
171
171
|
canon trace add-login_1_1 --json
|
|
@@ -115,7 +115,7 @@ canon gate check --json
|
|
|
115
115
|
```
|
|
116
116
|
```text
|
|
117
117
|
# Read stored records across every storage tier
|
|
118
|
-
usage: canon query --kind <change|task|scenario|
|
|
118
|
+
usage: canon query --kind <change|task|scenario|run|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin <PLUGIN_ID> | --history] [--change <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
|
|
119
119
|
```
|
|
120
120
|
```bash
|
|
121
121
|
canon query --kind evidence --json
|
|
@@ -150,7 +150,7 @@ canon schema evidence add --json
|
|
|
150
150
|
```
|
|
151
151
|
```text
|
|
152
152
|
# Search records, brief sections and scenario text, with each hit's neighbors in the record graph
|
|
153
|
-
usage: canon search <TEXT> [--kind <change|task|scenario|
|
|
153
|
+
usage: canon search <TEXT> [--kind <change|task|scenario|run|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
|
|
154
154
|
```
|
|
155
155
|
```bash
|
|
156
156
|
canon search timeout --kind finding --json
|
|
@@ -171,7 +171,7 @@ canon status --json
|
|
|
171
171
|
```
|
|
172
172
|
```text
|
|
173
173
|
# Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
|
|
174
|
-
usage: canon trace <
|
|
174
|
+
usage: canon trace <TRACE_ID>
|
|
175
175
|
```
|
|
176
176
|
```bash
|
|
177
177
|
canon trace add-login_1_1 --json
|
|
@@ -325,6 +325,9 @@ covered for the ship guard and stays listed as `accepted-divergence` in
|
|
|
325
325
|
(`FINDING_REASON_REQUIRED`), and `finding list` shows it as
|
|
326
326
|
`[reason: …]` so the next reader sees why it was not fixed. Closing a
|
|
327
327
|
finding that already has that disposition is `unchanged`.
|
|
328
|
+
Only you close a finding `rejected` or `deferred`: another role is refused
|
|
329
|
+
(`FINDING_ROLE_DENIED`), so declare `--as reviewer`; the close records
|
|
330
|
+
that role.
|
|
328
331
|
- Sign off in one batch with `review scenario <ids>`, all or nothing. It writes
|
|
329
332
|
directly; nothing to promote. canon stores and re-checks attached bytes
|
|
330
333
|
and never compares images.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-adapter-authorize 1 "authorize 0.
|
|
3
|
+
.TH canon-adapter-authorize 1 "authorize 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-adapter\-authorize \- Authorize declared capabilities against repository policy (preflight only)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print help
|
|
|
41
41
|
\fB\-V\fR, \fB\-\-version\fR
|
|
42
42
|
Print version
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-adapter-validate 1 "validate 0.
|
|
3
|
+
.TH canon-adapter-validate 1 "validate 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-adapter\-validate \- Read and validate one provider\-neutral response envelope
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print help
|
|
|
41
41
|
\fB\-V\fR, \fB\-\-version\fR
|
|
42
42
|
Print version
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
package/man/canon-adapter.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-adapter 1 "adapter 0.
|
|
3
|
+
.TH canon-adapter 1 "adapter 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-adapter \- Validate a provider\-neutral adapter response without executing a provider
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -43,4 +43,4 @@ Examples:
|
|
|
43
43
|
canon adapter validate \-\-response response.json
|
|
44
44
|
canon adapter validate \-\-response response.json \-\-repo . \-\-json
|
|
45
45
|
.SH VERSION
|
|
46
|
-
v0.
|
|
46
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-artifacts-move 1 "move 0.
|
|
3
|
+
.TH canon-artifacts-move 1 "move 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-artifacts\-move \- Move the local artifact blobs to an object\-store tier, verify them, and remove the local copies
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -60,4 +60,4 @@ The bare run previews: it lists every upload and removal and prints a planDigest
|
|
|
60
60
|
|
|
61
61
|
Idempotent and resumable: a run stopped anywhere leaves a repo the gate still passes, and the next run finishes; a second run finds nothing to do. A blob whose bytes do not match its name is never moved. Moving back to local is refused; `\-\-tier local` on a local repo is a no\-op.
|
|
62
62
|
.SH VERSION
|
|
63
|
-
v0.
|
|
63
|
+
v0.39.0
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-artifacts-prune 1 "prune 0.39.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-artifacts\-prune \- Delete the artifact blobs no record binds any more (the bare run previews; \-\-commit \-\-plan\-digest deletes)
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon artifacts prune\fR [\fB\-\-as\fR] [\fB\-\-keep\-days\fR] [\fB\-\-limit\fR] [\fB\-\-cursor\fR] [\fB\-\-all\fR] [\fB\-\-commit\fR] [\fB\-\-plan\-digest\fR] [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
Delete the artifact blobs no record binds any more (the bare run previews; \-\-commit \-\-plan\-digest deletes)
|
|
10
|
+
.SH OPTIONS
|
|
11
|
+
.TP
|
|
12
|
+
\fB\-\-as\fR \fI<ROLE>\fR
|
|
13
|
+
The role you act as: planner, implementer, reviewer or orchestrator. Overrides `CANON_ROLE`. `schema` and `context` list only the role\*(Aqs commands, `status` keeps its steps, and `\-\-role` on `evidence add` / `evidence audit` / `review scenario` / `review change` is this role unless given
|
|
14
|
+
.br
|
|
15
|
+
|
|
16
|
+
.br
|
|
17
|
+
\fIPossible values:\fR
|
|
18
|
+
.RS 14
|
|
19
|
+
.IP \(bu 2
|
|
20
|
+
planner
|
|
21
|
+
.IP \(bu 2
|
|
22
|
+
implementer
|
|
23
|
+
.IP \(bu 2
|
|
24
|
+
reviewer
|
|
25
|
+
.IP \(bu 2
|
|
26
|
+
orchestrator
|
|
27
|
+
.RE
|
|
28
|
+
.TP
|
|
29
|
+
\fB\-\-keep\-days\fR \fI<N>\fR
|
|
30
|
+
Also keep the blobs that evidence and reviews written in the last N days bind
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-\-limit\fR \fI<N>\fR [default: 100]
|
|
33
|
+
Return at most this many records per page
|
|
34
|
+
.TP
|
|
35
|
+
\fB\-\-cursor\fR \fI<CURSOR>\fR
|
|
36
|
+
Resume after the last record of the previous page (the `nextCursor` it reported)
|
|
37
|
+
.TP
|
|
38
|
+
\fB\-\-all\fR
|
|
39
|
+
Return every record from the cursor on, not one page
|
|
40
|
+
.TP
|
|
41
|
+
\fB\-\-commit\fR
|
|
42
|
+
Make the change; without it the command only previews.
|
|
43
|
+
.TP
|
|
44
|
+
\fB\-\-plan\-digest\fR \fI<PLAN_DIGEST>\fR
|
|
45
|
+
The digest of the preview this commit carries out.
|
|
46
|
+
.TP
|
|
47
|
+
\fB\-\-repo\fR \fI<DIR>\fR
|
|
48
|
+
The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
|
|
49
|
+
.TP
|
|
50
|
+
\fB\-\-json\fR
|
|
51
|
+
Output JSON instead of the human\-readable form
|
|
52
|
+
.TP
|
|
53
|
+
\fB\-\-input\fR \fI<JSON|FILE|\->\fR
|
|
54
|
+
The arguments as JSON: an object (one run) or an array / NDJSON file or `\-` (a batch); keys are the option names in camelCase, `operands` an array
|
|
55
|
+
.TP
|
|
56
|
+
\fB\-h\fR, \fB\-\-help\fR
|
|
57
|
+
Print help
|
|
58
|
+
.TP
|
|
59
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
60
|
+
Print version
|
|
61
|
+
.SH EXTRA
|
|
62
|
+
Examples:
|
|
63
|
+
canon artifacts prune
|
|
64
|
+
canon artifacts prune \-\-keep\-days 30
|
|
65
|
+
canon artifacts prune \-\-commit \-\-plan\-digest <PLAN_DIGEST>
|
|
66
|
+
|
|
67
|
+
The store only grows: a report written anew on every run adds a blob per run. A blob stays while a record binds it: the latest evidence of a task or of a scenario and the reviews still in effect (what `canon gate check` and `canon artifacts verify` read), a record not promoted yet, and, with \-\-keep\-days N, any evidence or review written in the last N days. Every other blob of the configured store is deleted: the local directory .canon/artifacts/sha256, or the objects of the object\-store tier `artifact_store:` names (the same rule; a copy left in the local directory of such a repo is judged by it too).
|
|
68
|
+
|
|
69
|
+
The bare run previews: it says how many blobs and bytes go and stay, why each kept blob stays, lists the blobs to delete a page at a time (\-\-limit, \-\-cursor, \-\-all; the totals are the whole\*(Aqs) and writes nothing. With nothing to delete it says so and offers no \-\-commit. \-\-commit \-\-plan\-digest deletes exactly that plan (PLAN_STALE, exit 2, nothing deleted, when evidence or a record changed since). A repo whose records or staging cannot be read in full is refused: a blob is never deleted on a guess. After a prune, `canon artifacts verify` and `canon gate check` answer as before.
|
|
70
|
+
|
|
71
|
+
A deleted local blob leaves the working tree, so commit the removal with the ledger; it stays in git history, and shrinking that history is the repo owner\*(Aqs call, not this command\*(Aqs. A deleted object of a tier cannot be undone: the tier keeps no other copy. A delete that fails stops the run (ARTIFACTS_PRUNE_INCOMPLETE says what was deleted); a new preview lists what remains.
|
|
72
|
+
|
|
73
|
+
It also deletes the stale temp files a killed blob write left in .canon/artifacts/sha256 (`.tmp\-<sha256>\-<pid>\-<nanos>`, a regular file modified over five minutes ago; a younger file, a link, a directory or any other name stays): the preview lists them in data.staleTemps, the plan digest covers them, and the commit checks each again under the store lock. A temp file is no finished blob, so deleting it changes no record; one git already tracks must be taken out of the commit. `canon artifacts verify` only counts them.
|
|
74
|
+
|
|
75
|
+
Exit 0 for a preview or a commit, 1 when a delete failed, 2 when the plan is stale or the records or the store cannot be read.
|
|
76
|
+
.SH VERSION
|
|
77
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-artifacts-store 1 "store 0.
|
|
3
|
+
.TH canon-artifacts-store 1 "store 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-artifacts\-store \- Store the bound files of existing evidence records and current reviews in the artifact store (.canon/artifacts/sha256/)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -51,4 +51,4 @@ For records written before canon stored bound bytes (0.11\-0.13), and for any ev
|
|
|
51
51
|
|
|
52
52
|
Exit 0 when the pass ran (the gate decides whether an unstored file matters), 2 when the ledger cannot be read or a write fails.
|
|
53
53
|
.SH VERSION
|
|
54
|
-
v0.
|
|
54
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-artifacts-verify 1 "verify 0.
|
|
3
|
+
.TH canon-artifacts-verify 1 "verify 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-artifacts\-verify \- Check that the artifact store holds every file the latest evidence and current reviews bind (\-\-full re\-hashes the stored bytes)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -44,5 +44,7 @@ Print version
|
|
|
44
44
|
Asks the store canon.yaml\*(Aqs `artifacts:` block selects (default: local, .canon/artifacts/sha256) about each bound file, the way `canon gate check` does. For an object store that is one HEAD per distinct digest plus the size and sha256 metadata written at upload; \-\-full downloads each blob and re\-hashes it.
|
|
45
45
|
|
|
46
46
|
Exit 0 when every file is stored, 1 when one is missing or altered (data.problems names each), 2 when the store cannot be used or reached: an unreachable store is a refusal, never a pass.
|
|
47
|
+
|
|
48
|
+
It also counts the stale temp files a killed blob write left in .canon/artifacts/sha256 (`.tmp\-<sha256>\-<pid>\-<nanos>`, modified over five minutes ago): data.staleTemps has their files and bytes (unreadable, never 0, when the directory cannot be read) and a line names `canon artifacts prune`, which deletes them. verify deletes nothing, and a temp file never changes the exit.
|
|
47
49
|
.SH VERSION
|
|
48
|
-
v0.
|
|
50
|
+
v0.39.0
|
package/man/canon-artifacts.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-artifacts 1 "artifacts 0.
|
|
3
|
+
.TH canon-artifacts 1 "artifacts 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-artifacts \- Check or move the evidence artifact store (local, or an object\-store tier)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,5 +41,8 @@ Store the bound files of existing evidence records and current reviews in the ar
|
|
|
41
41
|
.TP
|
|
42
42
|
canon\-artifacts\-move(1)
|
|
43
43
|
Move the local artifact blobs to an object\-store tier, verify them, and remove the local copies
|
|
44
|
+
.TP
|
|
45
|
+
canon\-artifacts\-prune(1)
|
|
46
|
+
Delete the artifact blobs no record binds any more (the bare run previews; \-\-commit \-\-plan\-digest deletes)
|
|
44
47
|
.SH VERSION
|
|
45
|
-
v0.
|
|
48
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-brief-approve 1 "approve 0.
|
|
3
|
+
.TH canon-brief-approve 1 "approve 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-brief\-approve \- Record the human\*(Aqs approval of the brief, bound to its text; refused while `brief check` has blockers
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -74,4 +74,4 @@ chore whose approval saw the code tree that is still the current one asks for no
|
|
|
74
74
|
not approved (BRIEF_APPROVAL_STALE) until a human answers again and this
|
|
75
75
|
runs again. Run it only from the human\*(Aqs answer, with their words as \-\-note.
|
|
76
76
|
.SH VERSION
|
|
77
|
-
v0.
|
|
77
|
+
v0.39.0
|
package/man/canon-brief-check.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-brief-check 1 "check 0.
|
|
3
|
+
.TH canon-brief-check 1 "check 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-brief\-check \- Read the brief against the rules: blocker and advisory findings (exit 0 clean, 1 blockers, 2 refused)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print version
|
|
|
41
41
|
[\fICHANGE_ID\fR]
|
|
42
42
|
The change to read (default: the repo\*(Aqs only live change)
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
package/man/canon-brief-show.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-brief-show 1 "show 0.
|
|
3
|
+
.TH canon-brief-show 1 "show 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-brief\-show \- Show where the change stands and the next one to three steps; never edits
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -50,4 +50,4 @@ Examples:
|
|
|
50
50
|
|
|
51
51
|
The operand names the change; without it the repo\*(Aqs only live change is read.
|
|
52
52
|
.SH VERSION
|
|
53
|
-
v0.
|
|
53
|
+
v0.39.0
|
package/man/canon-brief.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-brief 1 "brief 0.
|
|
3
|
+
.TH canon-brief 1 "brief 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-brief \- Check a change\*(Aqs brief (PRD format) and see the next steps; never edits
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -61,4 +61,4 @@ gets one blocker, `brief.old\-format`: `canon migrate` rewrites it. A brief
|
|
|
61
61
|
with fewer than two known headings (written before 0.19) checks as `brief.legacy`, an
|
|
62
62
|
advisory. Without \-\-change, the repo\*(Aqs only live change is checked.
|
|
63
63
|
.SH VERSION
|
|
64
|
-
v0.
|
|
64
|
+
v0.39.0
|
package/man/canon-change-new.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-change-new 1 "new 0.
|
|
3
|
+
.TH canon-change-new 1 "new 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-change\-new \- Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -63,4 +63,4 @@ Print version
|
|
|
63
63
|
<\fICHANGE_ID\fR>
|
|
64
64
|
The change\*(Aqs slug (its change_id)
|
|
65
65
|
.SH VERSION
|
|
66
|
-
v0.
|
|
66
|
+
v0.39.0
|
package/man/canon-change.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-change 1 "change 0.
|
|
3
|
+
.TH canon-change 1 "change 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-change \- Write a plan change (.canon/changes/<slug>/brief.md) and adopt it into a subject
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -39,4 +39,4 @@ Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
|
|
|
39
39
|
Examples:
|
|
40
40
|
canon change new add\-login \-\-subject auth \-\-title \*(AqAdd login\*(Aq
|
|
41
41
|
.SH VERSION
|
|
42
|
-
v0.
|
|
42
|
+
v0.39.0
|
package/man/canon-completion.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-completion 1 "completion 0.
|
|
3
|
+
.TH canon-completion 1 "completion 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-completion \- Write the shell completion script for canon (bash, zsh or fish)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -57,4 +57,4 @@ Examples:
|
|
|
57
57
|
|
|
58
58
|
The script is generated from the command tree, so it completes exactly what the parser accepts. It needs no repo and no network.
|
|
59
59
|
.SH VERSION
|
|
60
|
-
v0.
|
|
60
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-context-pack-add 1 "add 0.
|
|
3
|
+
.TH canon-context-pack-add 1 "add 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-context\-pack\-add \- Create an immutable context pack from a repository\-local JSON manifest
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -44,4 +44,4 @@ Print help
|
|
|
44
44
|
\fB\-V\fR, \fB\-\-version\fR
|
|
45
45
|
Print version
|
|
46
46
|
.SH VERSION
|
|
47
|
-
v0.
|
|
47
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-context-pack-show 1 "show 0.
|
|
3
|
+
.TH canon-context-pack-show 1 "show 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-context\-pack\-show \- Show a context pack after verifying its manifest and content objects
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print version
|
|
|
41
41
|
<\fIPACK_ID\fR>
|
|
42
42
|
Context pack id (sha256:<64 hex digits>)
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-context-pack-verify 1 "verify 0.
|
|
3
|
+
.TH canon-context-pack-verify 1 "verify 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-context\-pack\-verify \- Verify a context pack\*(Aqs manifest and immutable content objects
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print version
|
|
|
41
41
|
<\fIPACK_ID\fR>
|
|
42
42
|
Context pack id (sha256:<64 hex digits>)
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
package/man/canon-context-pack.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-context-pack 1 "context-pack 0.
|
|
3
|
+
.TH canon-context-pack 1 "context-pack 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-context\-pack \- Create, inspect, and verify reproducible context packs
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -47,4 +47,4 @@ Examples:
|
|
|
47
47
|
canon context\-pack show sha256:<pack\-digest> \-\-repo . \-\-json
|
|
48
48
|
canon context\-pack verify sha256:<pack\-digest>
|
|
49
49
|
.SH VERSION
|
|
50
|
-
v0.
|
|
50
|
+
v0.39.0
|
package/man/canon-context.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-context 1 "context 0.
|
|
3
|
+
.TH canon-context 1 "context 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-context \- Show what you can author here: record kinds, fields, enums, policies
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print help
|
|
|
41
41
|
\fB\-V\fR, \fB\-\-version\fR
|
|
42
42
|
Print version
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
package/man/canon-dashboard.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-dashboard 1 "dashboard 0.
|
|
3
|
+
.TH canon-dashboard 1 "dashboard 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-dashboard \- Serve the local status dashboard
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -47,4 +47,4 @@ Print help
|
|
|
47
47
|
\fB\-V\fR, \fB\-\-version\fR
|
|
48
48
|
Print version
|
|
49
49
|
.SH VERSION
|
|
50
|
-
v0.
|
|
50
|
+
v0.39.0
|
package/man/canon-demo-init.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-demo-init 1 "init 0.
|
|
3
|
+
.TH canon-demo-init 1 "init 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-demo\-init \- Scaffold the demo repo (gate starts RED)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print help
|
|
|
41
41
|
\fB\-V\fR, \fB\-\-version\fR
|
|
42
42
|
Print version
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
package/man/canon-demo-review.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-demo-review 1 "review 0.
|
|
3
|
+
.TH canon-demo-review 1 "review 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-demo\-review \- Record the missing reviewer evidence (gate turns GREEN)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -41,4 +41,4 @@ Print help
|
|
|
41
41
|
\fB\-V\fR, \fB\-\-version\fR
|
|
42
42
|
Print version
|
|
43
43
|
.SH VERSION
|
|
44
|
-
v0.
|
|
44
|
+
v0.39.0
|
package/man/canon-demo.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-demo 1 "demo 0.
|
|
3
|
+
.TH canon-demo 1 "demo 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-demo \- Try the evidence loop end\-to\-end in a throwaway demo repo
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -44,4 +44,4 @@ Examples:
|
|
|
44
44
|
canon gate check # RED
|
|
45
45
|
canon demo review && canon gate check # GREEN
|
|
46
46
|
.SH VERSION
|
|
47
|
-
v0.
|
|
47
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-dispatch-begin 1 "begin 0.
|
|
3
|
+
.TH canon-dispatch-begin 1 "begin 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-dispatch\-begin \- Mint a Run manifest with retrieved guidance and context/policy lineage
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -44,7 +44,7 @@ Declared provider metadata (copied verbatim; never inferred from \-\-actor)
|
|
|
44
44
|
\fB\-\-model\fR \fI<NAME>\fR
|
|
45
45
|
Declared model metadata (copied verbatim)
|
|
46
46
|
.TP
|
|
47
|
-
\fB\-\-skill\fR \fI<
|
|
47
|
+
\fB\-\-skill\fR \fI<SKILL_ID>\fR
|
|
48
48
|
Skill that contributed to this run
|
|
49
49
|
.TP
|
|
50
50
|
\fB\-\-skill\-digest\fR \fI<DIGEST>\fR
|
|
@@ -77,4 +77,4 @@ Print help
|
|
|
77
77
|
\fB\-V\fR, \fB\-\-version\fR
|
|
78
78
|
Print version
|
|
79
79
|
.SH VERSION
|
|
80
|
-
v0.
|
|
80
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-dispatch-diff 1 "diff 0.
|
|
3
|
+
.TH canon-dispatch-diff 1 "diff 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-dispatch\-diff \- Diff the declared plan DAG against the observed execution graph
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -38,4 +38,4 @@ Print help
|
|
|
38
38
|
\fB\-V\fR, \fB\-\-version\fR
|
|
39
39
|
Print version
|
|
40
40
|
.SH VERSION
|
|
41
|
-
v0.
|
|
41
|
+
v0.39.0
|
package/man/canon-dispatch-end.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-dispatch-end 1 "end 0.
|
|
3
|
+
.TH canon-dispatch-end 1 "end 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-dispatch\-end \- Close a dispatched run with a terminal status and an ended_at
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -57,4 +57,4 @@ Print version
|
|
|
57
57
|
<\fIRUN_ID\fR>
|
|
58
58
|
The RunId (ULID) minted by `canon dispatch begin`
|
|
59
59
|
.SH VERSION
|
|
60
|
-
v0.
|
|
60
|
+
v0.39.0
|
package/man/canon-dispatch.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-dispatch 1 "dispatch 0.
|
|
3
|
+
.TH canon-dispatch 1 "dispatch 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-dispatch \- Begin an agent run with retrieved guidance recorded
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -42,4 +42,4 @@ Close a dispatched run with a terminal status and an ended_at
|
|
|
42
42
|
canon\-dispatch\-diff(1)
|
|
43
43
|
Diff the declared plan DAG against the observed execution graph
|
|
44
44
|
.SH VERSION
|
|
45
|
-
v0.
|
|
45
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-divergence-accept 1 "accept 0.
|
|
3
|
+
.TH canon-divergence-accept 1 "accept 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-divergence\-accept \- Accept a divergent scenario as a tracked known gap (a reviewer step): its latest evidence must be divergent and not the accepting actor\*(Aqs or session\*(Aqs. The acceptance pins that evidence, so new evidence ends it, and lapses at \-\-expiry; until then the ship guard counts the cell as covered while `status` and `gate check` list it as `accepted\-divergence`
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -74,4 +74,4 @@ Print version
|
|
|
74
74
|
<\fISCENARIO_ID\fR>
|
|
75
75
|
The accepted scenarios (`<area>.<surface>.<nn>`), one acceptance each, all or nothing
|
|
76
76
|
.SH VERSION
|
|
77
|
-
v0.
|
|
77
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-divergence-add 1 "add 0.
|
|
3
|
+
.TH canon-divergence-add 1 "add 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-divergence\-add \- Add a divergence candidate, staged with no run_seq yet (commit it with `canon gate promote \-\-kind divergence`, or in the same run with \-\-promote / `write: { promote: auto }`)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -94,4 +94,4 @@ Print version
|
|
|
94
94
|
<\fISCENARIO_ID\fR>
|
|
95
95
|
The scenario (`<area>.<surface>.<nn>`)
|
|
96
96
|
.SH VERSION
|
|
97
|
-
v0.
|
|
97
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-divergence-defer 1 "defer 0.
|
|
3
|
+
.TH canon-divergence-defer 1 "defer 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-divergence\-defer \- Directly record a deferred divergence (requires \-\-reason/\-\-expiry)
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -68,4 +68,4 @@ Print version
|
|
|
68
68
|
<\fISCENARIO_ID\fR>
|
|
69
69
|
The scenario (`<area>.<surface>.<nn>`)
|
|
70
70
|
.SH VERSION
|
|
71
|
-
v0.
|
|
71
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-divergence-list 1 "list 0.
|
|
3
|
+
.TH canon-divergence-list 1 "list 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-divergence\-list \- List the current divergence burn\-down state
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -53,4 +53,4 @@ Print help
|
|
|
53
53
|
\fB\-V\fR, \fB\-\-version\fR
|
|
54
54
|
Print version
|
|
55
55
|
.SH VERSION
|
|
56
|
-
v0.
|
|
56
|
+
v0.39.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-divergence-resolve 1 "resolve 0.
|
|
3
|
+
.TH canon-divergence-resolve 1 "resolve 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-divergence\-resolve \- Directly record a resolved divergence
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -65,4 +65,4 @@ Print version
|
|
|
65
65
|
<\fISCENARIO_ID\fR>
|
|
66
66
|
The scenario (`<area>.<surface>.<nn>`)
|
|
67
67
|
.SH VERSION
|
|
68
|
-
v0.
|
|
68
|
+
v0.39.0
|
package/man/canon-divergence.1
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.ie \n(.g .ds Aq \(aq
|
|
2
2
|
.el .ds Aq '
|
|
3
|
-
.TH canon-divergence 1 "divergence 0.
|
|
3
|
+
.TH canon-divergence 1 "divergence 0.39.0"
|
|
4
4
|
.SH NAME
|
|
5
5
|
canon\-divergence \- Stage, promote, resolve, and inspect spec divergences
|
|
6
6
|
.SH SYNOPSIS
|
|
@@ -48,4 +48,4 @@ Accept a divergent scenario as a tracked known gap (a reviewer step): its latest
|
|
|
48
48
|
canon\-divergence\-list(1)
|
|
49
49
|
List the current divergence burn\-down state
|
|
50
50
|
.SH VERSION
|
|
51
|
-
v0.
|
|
51
|
+
v0.39.0
|