@journeykit/canon 0.27.0 → 0.28.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 +245 -89
- package/dist/skills/reference/brief-align.md +4 -2
- package/dist/skills/reference/brief-clarify.md +7 -5
- package/dist/skills/reference/brief-harden.md +4 -2
- package/dist/skills/reference/brief-polish.md +7 -5
- package/dist/skills/reference/brief-shape.md +4 -2
- package/dist/skills/reference/canon-artifact-ingest.md +11 -7
- package/dist/skills/reference/canon-authoring.md +16 -2
- package/dist/skills/reference/canon-context.md +21 -11
- package/dist/skills/reference/canon-fmt.md +10 -2
- package/dist/skills/reference/canon-gate.md +107 -69
- package/dist/skills/reference/canon-inventory.md +23 -15
- package/dist/skills/reference/canon-learn.md +23 -19
- package/dist/skills/reference/canon-plan-import.md +10 -7
- package/dist/skills/reference/canon-plugins.md +15 -8
- package/dist/skills/reference/canon-policy.md +20 -16
- package/dist/skills/reference/canon-report-dashboard.md +30 -19
- package/dist/skills/reference/canon-retrieve.md +13 -10
- package/dist/skills/reference/canon-review.md +96 -68
- package/dist/skills/reference/canon-session-ingest.md +7 -3
- package/dist/skills/reference/canon-storage.md +65 -39
- package/dist/skills/reference/canon-subject.md +116 -79
- package/dist/skills/reference/canon-vocab.md +1 -1
- package/dist/skills/reference/role-implementer.md +295 -64
- package/dist/skills/reference/role-orchestrator.md +547 -55
- package/dist/skills/reference/role-planner.md +189 -32
- package/dist/skills/reference/role-reviewer.md +257 -58
- package/dist/skills/scripts/canon-retrieve-pre-dispatch.sh +10 -5
- package/man/canon-adapter-authorize.1 +44 -0
- package/man/canon-adapter-validate.1 +44 -0
- package/man/canon-adapter.1 +46 -0
- package/man/canon-artifacts-move.1 +63 -0
- package/man/canon-artifacts-store.1 +54 -0
- package/man/canon-artifacts-verify.1 +48 -0
- package/man/canon-artifacts.1 +45 -0
- package/man/canon-brief-approve.1 +62 -0
- package/man/canon-brief-check.1 +44 -0
- package/man/canon-brief-show.1 +50 -0
- package/man/canon-brief.1 +63 -0
- package/man/canon-change-new.1 +66 -0
- package/man/canon-change.1 +42 -0
- package/man/canon-completion.1 +60 -0
- package/man/canon-context-pack-add.1 +47 -0
- package/man/canon-context-pack-show.1 +44 -0
- package/man/canon-context-pack-verify.1 +44 -0
- package/man/canon-context-pack.1 +50 -0
- package/man/canon-context.1 +44 -0
- package/man/canon-dashboard.1 +50 -0
- package/man/canon-demo-init.1 +44 -0
- package/man/canon-demo-review.1 +44 -0
- package/man/canon-demo.1 +47 -0
- package/man/canon-dispatch-begin.1 +80 -0
- package/man/canon-dispatch-diff.1 +41 -0
- package/man/canon-dispatch-end.1 +60 -0
- package/man/canon-dispatch.1 +45 -0
- package/man/canon-divergence-accept.1 +68 -0
- package/man/canon-divergence-add.1 +97 -0
- package/man/canon-divergence-defer.1 +71 -0
- package/man/canon-divergence-list.1 +56 -0
- package/man/canon-divergence-resolve.1 +68 -0
- package/man/canon-divergence.1 +51 -0
- package/man/canon-evidence-add.1 +168 -0
- package/man/canon-evidence-approval-payload.1 +65 -0
- package/man/canon-evidence-audit.1 +121 -0
- package/man/canon-evidence.1 +57 -0
- package/man/canon-export.1 +108 -0
- package/man/canon-feature-new.1 +62 -0
- package/man/canon-feature.1 +39 -0
- package/man/canon-finding-add.1 +196 -0
- package/man/canon-finding-close.1 +117 -0
- package/man/canon-finding-list.1 +59 -0
- package/man/canon-finding.1 +67 -0
- package/man/canon-format.1 +49 -0
- package/man/canon-gate-check.1 +44 -0
- package/man/canon-gate-install-hooks.1 +59 -0
- package/man/canon-gate-promote.1 +62 -0
- package/man/canon-gate.1 +50 -0
- package/man/canon-ingest-plans.1 +53 -0
- package/man/canon-ingest-records.1 +56 -0
- package/man/canon-ingest-sessions.1 +62 -0
- package/man/canon-ingest.1 +50 -0
- package/man/canon-init.1 +98 -0
- package/man/canon-inventory-sync.1 +50 -0
- package/man/canon-inventory.1 +39 -0
- package/man/canon-ledger-compact.1 +50 -0
- package/man/canon-ledger.1 +54 -0
- package/man/canon-migrate.1 +89 -0
- package/man/canon-plugin-sync.1 +53 -0
- package/man/canon-plugin.1 +39 -0
- package/man/canon-policy-approve.1 +50 -0
- package/man/canon-policy-show.1 +41 -0
- package/man/canon-policy.1 +52 -0
- package/man/canon-prompt-add.1 +47 -0
- package/man/canon-prompt-show.1 +41 -0
- package/man/canon-prompt.1 +43 -0
- package/man/canon-purge.1 +70 -0
- package/man/canon-query.1 +111 -0
- package/man/canon-regime-show.1 +50 -0
- package/man/canon-regime.1 +39 -0
- package/man/canon-report-build.1 +44 -0
- package/man/canon-report-check.1 +41 -0
- package/man/canon-report-snapshot.1 +47 -0
- package/man/canon-report.1 +45 -0
- package/man/canon-retrieve.1 +56 -0
- package/man/canon-review-change.1 +98 -0
- package/man/canon-review-scenario.1 +98 -0
- package/man/canon-review.1 +42 -0
- package/man/canon-scenario-new.1 +80 -0
- package/man/canon-scenario.1 +39 -0
- package/man/canon-schema.1 +63 -0
- package/man/canon-selftest.1 +69 -0
- package/man/canon-skills-check.1 +47 -0
- package/man/canon-skills-doctor.1 +47 -0
- package/man/canon-skills-install.1 +53 -0
- package/man/canon-skills-show.1 +104 -0
- package/man/canon-skills.1 +48 -0
- package/man/canon-status.1 +51 -0
- package/man/canon-strategy-approval-payload.1 +53 -0
- package/man/canon-strategy-promote.1 +59 -0
- package/man/canon-strategy-rollback.1 +62 -0
- package/man/canon-strategy.1 +45 -0
- package/man/canon-subject-adopt.1 +53 -0
- package/man/canon-subject-move.1 +80 -0
- package/man/canon-subject-new.1 +65 -0
- package/man/canon-subject-show.1 +44 -0
- package/man/canon-subject-unadopt.1 +63 -0
- package/man/canon-subject.1 +51 -0
- package/man/canon-task-done.1 +47 -0
- package/man/canon-task.1 +42 -0
- package/man/canon-tier-age.1 +50 -0
- package/man/canon-tier.1 +39 -0
- package/man/canon.1 +169 -0
- package/package.json +9 -5
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-export 1 "export 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-export \- Export a redacted retention manifest without deleting records
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon export\fR [\fB\-\-as\fR] <\fB\-\-kind\fR> [\fB\-\-before\fR] [\fB\-\-after\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-include\-sensitive\fR] [\fB\-\-limit\fR] [\fB\-\-cursor\fR] [\fB\-\-all\fR] [\fB\-\-fields\fR] [\fB\-\-dry\-run\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
Export a redacted retention manifest without deleting records
|
|
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` defaults to it
|
|
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\-\-kind\fR \fI<KIND>\fR
|
|
30
|
+
The record kind to export
|
|
31
|
+
.br
|
|
32
|
+
|
|
33
|
+
.br
|
|
34
|
+
\fIPossible values:\fR
|
|
35
|
+
.RS 14
|
|
36
|
+
.IP \(bu 2
|
|
37
|
+
change
|
|
38
|
+
.IP \(bu 2
|
|
39
|
+
task
|
|
40
|
+
.IP \(bu 2
|
|
41
|
+
scenario
|
|
42
|
+
.IP \(bu 2
|
|
43
|
+
session
|
|
44
|
+
.IP \(bu 2
|
|
45
|
+
run
|
|
46
|
+
.IP \(bu 2
|
|
47
|
+
event
|
|
48
|
+
.IP \(bu 2
|
|
49
|
+
handoff
|
|
50
|
+
.IP \(bu 2
|
|
51
|
+
review
|
|
52
|
+
.IP \(bu 2
|
|
53
|
+
divergence
|
|
54
|
+
.IP \(bu 2
|
|
55
|
+
trajectory
|
|
56
|
+
.IP \(bu 2
|
|
57
|
+
strategy_item
|
|
58
|
+
.IP \(bu 2
|
|
59
|
+
evidence
|
|
60
|
+
.IP \(bu 2
|
|
61
|
+
subject
|
|
62
|
+
.IP \(bu 2
|
|
63
|
+
finding
|
|
64
|
+
.RE
|
|
65
|
+
.TP
|
|
66
|
+
\fB\-\-before\fR \fI<TIMESTAMP>\fR
|
|
67
|
+
Only records strictly before this time (RFC3339 or YYYY\-MM\-DD, UTC)
|
|
68
|
+
.TP
|
|
69
|
+
\fB\-\-after\fR \fI<TIMESTAMP>\fR
|
|
70
|
+
Only records at or after this time (RFC3339 or YYYY\-MM\-DD, UTC)
|
|
71
|
+
.TP
|
|
72
|
+
\fB\-o\fR, \fB\-\-output\fR \fI<FILE>\fR
|
|
73
|
+
Write the manifest to this file (mode 0600) instead of stdout
|
|
74
|
+
.TP
|
|
75
|
+
\fB\-\-repo\fR \fI<DIR>\fR
|
|
76
|
+
The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
|
|
77
|
+
.TP
|
|
78
|
+
\fB\-\-json\fR
|
|
79
|
+
Output JSON instead of the human\-readable form
|
|
80
|
+
.TP
|
|
81
|
+
\fB\-\-include\-sensitive\fR
|
|
82
|
+
Include records marked sensitive (only when policy explicitly allows it)
|
|
83
|
+
.TP
|
|
84
|
+
\fB\-\-limit\fR \fI<N>\fR
|
|
85
|
+
Return at most this many records (default 100)
|
|
86
|
+
.TP
|
|
87
|
+
\fB\-\-cursor\fR \fI<CURSOR>\fR
|
|
88
|
+
Resume after the last record of the previous page (the `nextCursor` it reported)
|
|
89
|
+
.TP
|
|
90
|
+
\fB\-\-all\fR
|
|
91
|
+
Return every record from the cursor on, not one page
|
|
92
|
+
.TP
|
|
93
|
+
\fB\-\-fields\fR \fI<FIELDS>\fR
|
|
94
|
+
Keep only these fields of each exported record (comma\-separated): kind, at, id, digest; an unknown field is refused (camelCase and snake_case both match)
|
|
95
|
+
.TP
|
|
96
|
+
\fB\-\-dry\-run\fR
|
|
97
|
+
Validate fully and report what would be written, without writing anything
|
|
98
|
+
.TP
|
|
99
|
+
\fB\-\-input\fR \fI<JSON|FILE|\->\fR
|
|
100
|
+
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
|
|
101
|
+
.TP
|
|
102
|
+
\fB\-h\fR, \fB\-\-help\fR
|
|
103
|
+
Print help
|
|
104
|
+
.TP
|
|
105
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
106
|
+
Print version
|
|
107
|
+
.SH VERSION
|
|
108
|
+
v0.28.0
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-feature-new 1 "new 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-feature\-new \- Create a fresh .feature file for a new area.surface
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon feature new\fR [\fB\-\-as\fR] <\fB\-\-title\fR> [\fB\-\-actor\-id\fR] [\fB\-\-session\-id\fR] [\fB\-\-project\-id\fR] [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fISURFACE\fR>
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
Create a fresh .feature file for a new area.surface
|
|
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` defaults to it
|
|
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\-\-title\fR \fI<TEXT>\fR
|
|
30
|
+
The Feature: header label
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR [default: canon\-scaffold]
|
|
33
|
+
Agent id written into provenance (env: CANON_ACTOR)
|
|
34
|
+
.RS
|
|
35
|
+
May also be specified with the \fBCANON_ACTOR\fR environment variable.
|
|
36
|
+
.RE
|
|
37
|
+
.TP
|
|
38
|
+
\fB\-\-session\-id\fR \fI<SESSION_ID>\fR
|
|
39
|
+
The acting session (recorded as actor.session_id); optional
|
|
40
|
+
.TP
|
|
41
|
+
\fB\-\-project\-id\fR \fI<PROJECT_ID>\fR
|
|
42
|
+
Which configured `specs.roots[]` entry to write under, by its id. Required only when the repo configures more than one
|
|
43
|
+
.TP
|
|
44
|
+
\fB\-\-repo\fR \fI<DIR>\fR
|
|
45
|
+
The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
|
|
46
|
+
.TP
|
|
47
|
+
\fB\-\-json\fR
|
|
48
|
+
Output JSON instead of the human\-readable form
|
|
49
|
+
.TP
|
|
50
|
+
\fB\-\-input\fR \fI<JSON|FILE|\->\fR
|
|
51
|
+
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
|
|
52
|
+
.TP
|
|
53
|
+
\fB\-h\fR, \fB\-\-help\fR
|
|
54
|
+
Print help
|
|
55
|
+
.TP
|
|
56
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
57
|
+
Print version
|
|
58
|
+
.TP
|
|
59
|
+
<\fISURFACE\fR>
|
|
60
|
+
<area>.<surface> the fresh .feature file scaffolds
|
|
61
|
+
.SH VERSION
|
|
62
|
+
v0.28.0
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-feature 1 "feature 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-feature \- Scaffold a new .feature spec file
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon feature\fR [\fB\-\-as\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fIsubcommands\fR>
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
Scaffold a new .feature spec file
|
|
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` defaults to it
|
|
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\-h\fR, \fB\-\-help\fR
|
|
30
|
+
Print help
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
33
|
+
Print version
|
|
34
|
+
.SH SUBCOMMANDS
|
|
35
|
+
.TP
|
|
36
|
+
canon\-feature\-new(1)
|
|
37
|
+
Create a fresh .feature file for a new area.surface
|
|
38
|
+
.SH VERSION
|
|
39
|
+
v0.28.0
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-finding-add 1 "add 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-finding\-add \- Record one code\-review finding (promoted in the same run under `write: { promote: auto }` or with \-\-promote; under `write.promote: manual`, commit it with `canon gate promote`)
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon finding add\fR [\fB\-\-as\fR] <\fB\-\-change\-id\fR> <\fB\-\-round\fR> <\fB\-\-seq\fR> <\fB\-\-severity\fR> [\fB\-\-disposition\fR] <\fB\-\-actor\-id\fR> <\fB\-\-summary\fR> [\fB\-\-rev\fR] [\fB\-\-resolution\-rev\fR] [\fB\-\-introduced\-rev\fR] [\fB\-\-file\-ref\fR] [\fB\-\-scenario\-id\fR] [\fB\-\-role\fR] [\fB\-\-session\-id\fR] [\fB\-\-promote\fR] [\fB\-\-no\-promote\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
|
+
Record one code\-review finding (promoted in the same run under `write: { promote: auto }` or with \-\-promote; under `write.promote: manual`, commit it with `canon gate promote`)
|
|
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` defaults to it
|
|
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\-\-change\-id\fR \fI<CHANGE_ID>\fR
|
|
30
|
+
The change under review (e.g. s43\-findings\-are\-records) — first component of the natural key
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-\-round\fR \fI<N>\fR
|
|
33
|
+
Which review round on this change raised it (1\-based)
|
|
34
|
+
.TP
|
|
35
|
+
\fB\-\-seq\fR \fI<N>\fR
|
|
36
|
+
This finding\*(Aqs index within the round (1\-based). Required, never auto\-assigned; a collision is refused
|
|
37
|
+
.TP
|
|
38
|
+
\fB\-\-severity\fR \fI<SEVERITY>\fR
|
|
39
|
+
blocker / should\-fix / note — the reviewer\*(Aqs own judgement, never a score canon derives
|
|
40
|
+
.br
|
|
41
|
+
|
|
42
|
+
.br
|
|
43
|
+
\fIPossible values:\fR
|
|
44
|
+
.RS 14
|
|
45
|
+
.IP \(bu 2
|
|
46
|
+
blocker
|
|
47
|
+
.IP \(bu 2
|
|
48
|
+
should\-fix
|
|
49
|
+
.IP \(bu 2
|
|
50
|
+
note
|
|
51
|
+
.RE
|
|
52
|
+
.TP
|
|
53
|
+
\fB\-\-disposition\fR \fI<DISPOSITION>\fR [default: open]
|
|
54
|
+
open / fixed / rejected / deferred (fixed records \-\-resolution\-rev, default HEAD, and only fixed may carry one)
|
|
55
|
+
.br
|
|
56
|
+
|
|
57
|
+
.br
|
|
58
|
+
\fIPossible values:\fR
|
|
59
|
+
.RS 14
|
|
60
|
+
.IP \(bu 2
|
|
61
|
+
open
|
|
62
|
+
.IP \(bu 2
|
|
63
|
+
fixed
|
|
64
|
+
.IP \(bu 2
|
|
65
|
+
rejected
|
|
66
|
+
.IP \(bu 2
|
|
67
|
+
deferred
|
|
68
|
+
.RE
|
|
69
|
+
.TP
|
|
70
|
+
\fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR
|
|
71
|
+
The reviewer who raised it, recorded as the finding\*(Aqs reviewer and author (line breaks refused)
|
|
72
|
+
.TP
|
|
73
|
+
\fB\-\-summary\fR \fI<TEXT>\fR
|
|
74
|
+
One line of what the finding IS, in the reviewer\*(Aqs own words. NEVER checked against the code (line breaks refused)
|
|
75
|
+
.TP
|
|
76
|
+
\fB\-\-rev\fR \fI<REV>\fR [default: HEAD]
|
|
77
|
+
The commit this record is about: any git revision (`HEAD~1`, a branch, a tag, a short sha); the full sha is recorded with the code tree it saw. The default HEAD records the working tree as it stands (uncommitted code included), and a commit made from it has the same code tree. Outside git, or with no commit, the command refuses (NO_COMMIT)
|
|
78
|
+
.TP
|
|
79
|
+
\fB\-\-resolution\-rev\fR \fI<REV>\fR
|
|
80
|
+
The commit that closed it, any git revision (resolved to the full sha, with the code tree it saw). Permitted only with \-\-disposition fixed, where it defaults to HEAD. Existence only; canon never reads the commit\*(Aqs message or diff
|
|
81
|
+
.TP
|
|
82
|
+
\fB\-\-introduced\-rev\fR \fI<REV>\fR
|
|
83
|
+
The SOURCED introducing commit, any git revision (resolved to the full sha). No default: leave it unset when it is not known, never guess (see \-\-help). Existence only; canon never reads the commit\*(Aqs message or diff
|
|
84
|
+
.TP
|
|
85
|
+
\fB\-\-file\-ref\fR \fI<TEXT>\fR
|
|
86
|
+
Where in the tree, as path/to/file.rs:120\-134 (line breaks refused)
|
|
87
|
+
.TP
|
|
88
|
+
\fB\-\-scenario\-id\fR \fI<SCENARIO_ID>\fR
|
|
89
|
+
A scenario this finding is about (repeatable). After a `fixed` close, fresh evidence for these scenarios alone re\-verifies the fix; with none named, every evidenced scenario of the subject does. Each must be a scenario the index knows; a close inherits the list
|
|
90
|
+
.TP
|
|
91
|
+
\fB\-\-role\fR \fI<ROLE>\fR [default: reviewer]
|
|
92
|
+
Attribution only — unlike `canon evidence add`, no partition key derives from it
|
|
93
|
+
.TP
|
|
94
|
+
\fB\-\-session\-id\fR \fI<SESSION_ID>\fR
|
|
95
|
+
The authoring session (recorded as actor.session_id)
|
|
96
|
+
.TP
|
|
97
|
+
\fB\-\-promote\fR
|
|
98
|
+
Promote the record this run staged, in the same run; records others staged stay staged (the default under canon.yaml `write: { promote: auto }`)
|
|
99
|
+
.TP
|
|
100
|
+
\fB\-\-no\-promote\fR
|
|
101
|
+
Keep this write staged even under canon.yaml `write: { promote: auto }`
|
|
102
|
+
.TP
|
|
103
|
+
\fB\-\-repo\fR \fI<DIR>\fR
|
|
104
|
+
The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
|
|
105
|
+
.TP
|
|
106
|
+
\fB\-\-json\fR
|
|
107
|
+
Output JSON instead of the human\-readable form
|
|
108
|
+
.TP
|
|
109
|
+
\fB\-\-input\fR \fI<JSON|FILE|\->\fR
|
|
110
|
+
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
|
|
111
|
+
.TP
|
|
112
|
+
\fB\-h\fR, \fB\-\-help\fR
|
|
113
|
+
Print help
|
|
114
|
+
.TP
|
|
115
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
116
|
+
Print version
|
|
117
|
+
.SH EXTRA
|
|
118
|
+
RECORDED OBSERVATION, NOT PROOF. canon does not verify that the defect
|
|
119
|
+
existed, that it was real, that it was fixed, or that \-\-introduced\-rev names
|
|
120
|
+
the commit that actually caused it. This records that a named reviewer, at a
|
|
121
|
+
stamped time, RAISED this finding against this change.
|
|
122
|
+
|
|
123
|
+
An agent that can run this command can record its own review round, with its
|
|
124
|
+
own severities: the author of a finding and its beneficiary are the same
|
|
125
|
+
party, with no signature and no second party — the same gap `canon evidence
|
|
126
|
+
add` states about attestations.
|
|
127
|
+
|
|
128
|
+
What canon does NOT check:
|
|
129
|
+
\- \-\-summary, against the diff, the code, or the review transcript. The
|
|
130
|
+
record is identical whether the defect was real, misdiagnosed, or invented
|
|
131
|
+
\- \-\-resolution\-rev: resolved to a full commit sha, existence only; the
|
|
132
|
+
commit\*(Aqs message and diff are never read. `\-\-disposition fixed` records
|
|
133
|
+
that someone SAID this commit closed it, not that it did
|
|
134
|
+
\- \-\-introduced\-rev: never verified, and never guessed (below)
|
|
135
|
+
\- \-\-rev: optional, because most rounds review an uncommitted
|
|
136
|
+
working tree. When absent, canon does not infer one
|
|
137
|
+
\- whether a finding is right. canon gates on one all the same: a blocker
|
|
138
|
+
that is still `open`, or `fixed` with no fresh evidence after the fix, is
|
|
139
|
+
an `open\-blocker` violation of `canon gate check` and the ship guard
|
|
140
|
+
|
|
141
|
+
What the record IS good for:
|
|
142
|
+
\- attribution: an append\-only row naming who raised what, in which round,
|
|
143
|
+
against which change, at which severity and disposition. Before this
|
|
144
|
+
command, a review round left nothing at all once its transcript was gone
|
|
145
|
+
\- a DERIVED count that stops being typed from memory. v0.4.0\*(Aqs release note
|
|
146
|
+
hand\-typed its issue counts into a published tag and got them wrong; that
|
|
147
|
+
is why this command exists. No count is quoted here and none is asserted
|
|
148
|
+
in its place \-\- read them off the \*(AqReview rounds\*(Aq panel in
|
|
149
|
+
.canon/REPORT.md or the dashboard, which derive them from these records
|
|
150
|
+
|
|
151
|
+
\-\-introduced\-rev must be SOURCED:
|
|
152
|
+
Set it only when the introducing commit was actually established — someone
|
|
153
|
+
read the diff, or the fixing commit names it. Never from timing, commit
|
|
154
|
+
adjacency, or `git blame`. Leaving it UNSET is the correct record when it is
|
|
155
|
+
not known, not an incomplete one. Unset means UNSOURCED, never \*(Aqno cause\*(Aq; a
|
|
156
|
+
guessed value would inflate the exact number this command exists to make
|
|
157
|
+
trustworthy.
|
|
158
|
+
|
|
159
|
+
What a derived fix\-of\-fix count MEANS, stated here word for word as every
|
|
160
|
+
other surface states it (canon_report::render::FIX_OF_FIX_MEANING) rather
|
|
161
|
+
than paraphrased, because paraphrase is how the previous wording went wrong
|
|
162
|
+
on seven surfaces at once:
|
|
163
|
+
|
|
164
|
+
`fix_of_fix` bounds NOTHING — not from below, not from above: it
|
|
165
|
+
UNDER\-counts, because an unsourced finding is never counted and a fix in
|
|
166
|
+
one change that breaks something first found while reviewing a DIFFERENT
|
|
167
|
+
change is not counted at all; it OVER\-counts, because a `resolution_sha`
|
|
168
|
+
commit may carry work BEYOND the fix and every finding recording that
|
|
169
|
+
commit is counted regardless; and for any individual match the data cannot
|
|
170
|
+
say whether the fix or the other work in that commit introduced the
|
|
171
|
+
defect.
|
|
172
|
+
|
|
173
|
+
Fix\-of\-fix is DERIVED, never recorded: a finding is one when its
|
|
174
|
+
introduced_by equals an EARLIER finding\*(Aqs resolution_sha (lower round/seq in
|
|
175
|
+
the same change). There is no flag for it and there will not be one — a flag
|
|
176
|
+
would relocate the hand\-typing from the release notes into the record.
|
|
177
|
+
|
|
178
|
+
\-\-seq is REQUIRED, never auto\-assigned: two concurrent adds would read the
|
|
179
|
+
same highest seq and both pick the next one, landing two records under one
|
|
180
|
+
finding\*(Aqs identity and inflating the count. An already\-occupied
|
|
181
|
+
(\-\-change\-id, \-\-round, \-\-seq) is refused, naming it.
|
|
182
|
+
|
|
183
|
+
Refused before anything is staged:
|
|
184
|
+
\- \-\-disposition fixed with no \-\-resolution\-rev, and \-\-resolution\-rev with
|
|
185
|
+
any other disposition
|
|
186
|
+
\- a line separator in \-\-summary, \-\-file\-ref or \-\-actor\-id: a
|
|
187
|
+
finding is rendered as ONE row, so a separator appends a second row that
|
|
188
|
+
no record backs
|
|
189
|
+
|
|
190
|
+
The loop:
|
|
191
|
+
canon finding add ... Record a Finding (promoted in the same run under
|
|
192
|
+
`write: { promote: auto }`, which `canon init` writes)
|
|
193
|
+
Under `write.promote: manual` (no `write:` key), run `canon gate promote` to
|
|
194
|
+
commit it.
|
|
195
|
+
.SH VERSION
|
|
196
|
+
v0.28.0
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-finding-close 1 "close 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-finding\-close \- Move an already\-committed finding\*(Aqs disposition (promoted in the same run under `write: { promote: auto }` or with \-\-promote; under `write.promote: manual`, commit it with `canon gate promote`)
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon finding close\fR [\fB\-\-as\fR] <\fB\-\-round\fR> <\fB\-\-seq\fR> <\fB\-\-disposition\fR> [\fB\-\-resolution\-rev\fR] [\fB\-\-reason\fR] [\fB\-\-actor\-id\fR] [\fB\-\-role\fR] [\fB\-\-session\-id\fR] [\fB\-\-promote\fR] [\fB\-\-no\-promote\fR] [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fICHANGE_ID\fR>
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
Move an already\-committed finding\*(Aqs disposition (promoted in the same run under `write: { promote: auto }` or with \-\-promote; under `write.promote: manual`, commit it with `canon gate promote`)
|
|
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` defaults to it
|
|
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\-\-round\fR \fI<N>\fR
|
|
30
|
+
Which review round raised it (1\-based)
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-\-seq\fR \fI<N>\fR
|
|
33
|
+
The finding\*(Aqs index within the round (1\-based)
|
|
34
|
+
.TP
|
|
35
|
+
\fB\-\-disposition\fR \fI<DISPOSITION>\fR
|
|
36
|
+
Where it lands: fixed / rejected / deferred / open (reopening is a real transition). fixed records \-\-resolution\-rev, default HEAD, and only fixed may carry one
|
|
37
|
+
.br
|
|
38
|
+
|
|
39
|
+
.br
|
|
40
|
+
\fIPossible values:\fR
|
|
41
|
+
.RS 14
|
|
42
|
+
.IP \(bu 2
|
|
43
|
+
open
|
|
44
|
+
.IP \(bu 2
|
|
45
|
+
fixed
|
|
46
|
+
.IP \(bu 2
|
|
47
|
+
rejected
|
|
48
|
+
.IP \(bu 2
|
|
49
|
+
deferred
|
|
50
|
+
.RE
|
|
51
|
+
.TP
|
|
52
|
+
\fB\-\-resolution\-rev\fR \fI<REV>\fR
|
|
53
|
+
The commit that closed it, any git revision (resolved to the full sha, with the code tree it saw). Permitted only with \-\-disposition fixed, where it defaults to HEAD. Existence only; canon never reads the commit\*(Aqs message or diff
|
|
54
|
+
.TP
|
|
55
|
+
\fB\-\-reason\fR \fI<TEXT>\fR
|
|
56
|
+
Why it was closed, one line. Required for rejected and deferred, optional for fixed and open; stored on the closing version and shown by `finding list`
|
|
57
|
+
.TP
|
|
58
|
+
\fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR [default: canon]
|
|
59
|
+
The actor recorded as authoring the TRANSITION — not the original finding\*(Aqs author, which is preserved on the record this supersedes
|
|
60
|
+
.TP
|
|
61
|
+
\fB\-\-role\fR \fI<ROLE>\fR [default: reviewer]
|
|
62
|
+
Attribution only — no partition key derives from it
|
|
63
|
+
.TP
|
|
64
|
+
\fB\-\-session\-id\fR \fI<SESSION_ID>\fR
|
|
65
|
+
The session that authored the TRANSITION (recorded as actor.session_id)
|
|
66
|
+
.TP
|
|
67
|
+
\fB\-\-promote\fR
|
|
68
|
+
Promote the record this run staged, in the same run; records others staged stay staged (the default under canon.yaml `write: { promote: auto }`)
|
|
69
|
+
.TP
|
|
70
|
+
\fB\-\-no\-promote\fR
|
|
71
|
+
Keep this write staged even under canon.yaml `write: { promote: auto }`
|
|
72
|
+
.TP
|
|
73
|
+
\fB\-\-repo\fR \fI<DIR>\fR
|
|
74
|
+
The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
|
|
75
|
+
.TP
|
|
76
|
+
\fB\-\-json\fR
|
|
77
|
+
Output JSON instead of the human\-readable form
|
|
78
|
+
.TP
|
|
79
|
+
\fB\-\-input\fR \fI<JSON|FILE|\->\fR
|
|
80
|
+
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
|
|
81
|
+
.TP
|
|
82
|
+
\fB\-h\fR, \fB\-\-help\fR
|
|
83
|
+
Print help
|
|
84
|
+
.TP
|
|
85
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
86
|
+
Print version
|
|
87
|
+
.TP
|
|
88
|
+
<\fICHANGE_ID\fR>
|
|
89
|
+
The change under review — first component of the natural key
|
|
90
|
+
.SH EXTRA
|
|
91
|
+
A finding is raised `open` and later closed. This is the ONLY way to record
|
|
92
|
+
that second state: `canon finding add` refuses an occupied natural key,
|
|
93
|
+
because two DIFFERENT findings under one (change, round, seq) are two
|
|
94
|
+
reviewers\*(Aq work collapsed into one identity.
|
|
95
|
+
|
|
96
|
+
What it changes: the disposition, `resolution_sha` with it, and the closing
|
|
97
|
+
\-\-reason (required for rejected and deferred). NOTHING else.
|
|
98
|
+
Severity, reviewer, summary, \-\-rev, \-\-introduced\-rev and \-\-file\-ref
|
|
99
|
+
are READ from the committed record and copied byte\-identically — this command
|
|
100
|
+
cannot edit them, and no command can. A finding recorded wrongly stays
|
|
101
|
+
wrongly recorded; that is the append\-only ledger working, not a gap.
|
|
102
|
+
|
|
103
|
+
The committed record STAYS. This appends a second version at the same
|
|
104
|
+
natural key, and the pair IS the history: `open` at one instant, `fixed` at
|
|
105
|
+
another, each with its own author and timestamp. Every reader folds by
|
|
106
|
+
natural key to the latest version, so the finding is still counted once.
|
|
107
|
+
|
|
108
|
+
`canon gate promote` re\-derives the transition rule itself before committing
|
|
109
|
+
the second version, so a hand\-written body must clear the same bar.
|
|
110
|
+
|
|
111
|
+
Examples:
|
|
112
|
+
canon finding close \-\-change\-id s44\-spec\-derived\-worklist \-\-round 1 \-\-seq 1 \\
|
|
113
|
+
\-\-disposition fixed \-\-resolution\-rev $(git rev\-parse HEAD)
|
|
114
|
+
canon finding close \-\-change\-id s44\-spec\-derived\-worklist \-\-round 1 \-\-seq 9 \\
|
|
115
|
+
\-\-disposition rejected
|
|
116
|
+
.SH VERSION
|
|
117
|
+
v0.28.0
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-finding-list 1 "list 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-finding\-list \- List a change\*(Aqs committed findings at their latest version: round, seq, severity, disposition, reviewer and summary
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon finding list\fR [\fB\-\-as\fR] <\fB\-\-change\-id\fR> [\fB\-\-open\fR] [\fB\-\-json\fR] [\fB\-\-repo\fR] [\fB\-\-limit\fR] [\fB\-\-cursor\fR] [\fB\-\-all\fR] [\fB\-\-fields\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
List a change\*(Aqs committed findings at their latest version: round, seq, severity, disposition, reviewer and summary
|
|
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` defaults to it
|
|
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\-\-change\-id\fR \fI<CHANGE_ID>\fR
|
|
30
|
+
The change whose findings to list
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-\-open\fR
|
|
33
|
+
Only findings whose current disposition is open
|
|
34
|
+
.TP
|
|
35
|
+
\fB\-\-json\fR
|
|
36
|
+
Print `{change_id, findings: [...], meta}` as JSON
|
|
37
|
+
.TP
|
|
38
|
+
\fB\-\-repo\fR \fI<DIR>\fR
|
|
39
|
+
The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
|
|
40
|
+
.TP
|
|
41
|
+
\fB\-\-limit\fR \fI<N>\fR
|
|
42
|
+
Return at most this many records (default 100)
|
|
43
|
+
.TP
|
|
44
|
+
\fB\-\-cursor\fR \fI<CURSOR>\fR
|
|
45
|
+
Resume after the last record of the previous page (the `nextCursor` it reported)
|
|
46
|
+
.TP
|
|
47
|
+
\fB\-\-all\fR
|
|
48
|
+
Return every record from the cursor on, not one page
|
|
49
|
+
.TP
|
|
50
|
+
\fB\-\-fields\fR \fI<FIELDS>\fR
|
|
51
|
+
With \-\-json, keep only these finding fields (comma\-separated): round, seq, severity, disposition, reviewer, summary, resolution_sha, file_ref; camelCase and snake_case both match
|
|
52
|
+
.TP
|
|
53
|
+
\fB\-h\fR, \fB\-\-help\fR
|
|
54
|
+
Print help
|
|
55
|
+
.TP
|
|
56
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
57
|
+
Print version
|
|
58
|
+
.SH VERSION
|
|
59
|
+
v0.28.0
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
.ie \n(.g .ds Aq \(aq
|
|
2
|
+
.el .ds Aq '
|
|
3
|
+
.TH canon-finding 1 "finding 0.28.0"
|
|
4
|
+
.SH NAME
|
|
5
|
+
canon\-finding \- Record one code\-review finding as a durable record
|
|
6
|
+
.SH SYNOPSIS
|
|
7
|
+
\fBcanon finding\fR [\fB\-\-as\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fIsubcommands\fR>
|
|
8
|
+
.SH DESCRIPTION
|
|
9
|
+
Record one code\-review finding as a durable record
|
|
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` defaults to it
|
|
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\-h\fR, \fB\-\-help\fR
|
|
30
|
+
Print help
|
|
31
|
+
.TP
|
|
32
|
+
\fB\-V\fR, \fB\-\-version\fR
|
|
33
|
+
Print version
|
|
34
|
+
.SH SUBCOMMANDS
|
|
35
|
+
.TP
|
|
36
|
+
canon\-finding\-add(1)
|
|
37
|
+
Record one code\-review finding (promoted in the same run under `write: { promote: auto }` or with \-\-promote; under `write.promote: manual`, commit it with `canon gate promote`)
|
|
38
|
+
.TP
|
|
39
|
+
canon\-finding\-close(1)
|
|
40
|
+
Move an already\-committed finding\*(Aqs disposition (promoted in the same run under `write: { promote: auto }` or with \-\-promote; under `write.promote: manual`, commit it with `canon gate promote`)
|
|
41
|
+
.TP
|
|
42
|
+
canon\-finding\-list(1)
|
|
43
|
+
List a change\*(Aqs committed findings at their latest version: round, seq, severity, disposition, reviewer and summary
|
|
44
|
+
.SH EXTRA
|
|
45
|
+
Examples:
|
|
46
|
+
canon finding add \-\-change\-id s43\-findings\-are\-records \-\-round 1 \-\-seq 1 \\
|
|
47
|
+
\-\-severity blocker \-\-disposition open \-\-actor\-id review\-voice \\
|
|
48
|
+
\-\-summary \*(Aqa release metric is asserted, never computed\*(Aq
|
|
49
|
+
canon finding close s43\-findings\-are\-records \-\-round 1 \-\-seq 1 \\
|
|
50
|
+
\-\-disposition fixed \-\-resolution\-rev $(git rev\-parse HEAD)
|
|
51
|
+
|
|
52
|
+
The loop:
|
|
53
|
+
canon finding add ... Record a Finding
|
|
54
|
+
canon finding close ... Record its disposition TRANSITION, once fixed
|
|
55
|
+
Each is promoted in the same run under `write: { promote: auto }`, which
|
|
56
|
+
`canon init` writes. Under `write.promote: manual` (no `write:` key), run
|
|
57
|
+
`canon gate promote` after each to commit it.
|
|
58
|
+
|
|
59
|
+
The committed finding STAYS when it is closed: the ledger is append\-only and
|
|
60
|
+
the pair IS the history. Every reader folds by natural key to the latest
|
|
61
|
+
version, so the finding is still counted once.
|
|
62
|
+
|
|
63
|
+
RECORDED OBSERVATION, NOT PROOF — canon never verifies that the defect
|
|
64
|
+
existed, that it was fixed, or that \-\-introduced\-rev is the true cause.
|
|
65
|
+
See `canon finding add \-\-help` for exactly what it does and does not establish.
|
|
66
|
+
.SH VERSION
|
|
67
|
+
v0.28.0
|