@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.
Files changed (133) hide show
  1. package/dist/skills/SKILL.src.md +245 -89
  2. package/dist/skills/reference/brief-align.md +4 -2
  3. package/dist/skills/reference/brief-clarify.md +7 -5
  4. package/dist/skills/reference/brief-harden.md +4 -2
  5. package/dist/skills/reference/brief-polish.md +7 -5
  6. package/dist/skills/reference/brief-shape.md +4 -2
  7. package/dist/skills/reference/canon-artifact-ingest.md +11 -7
  8. package/dist/skills/reference/canon-authoring.md +16 -2
  9. package/dist/skills/reference/canon-context.md +21 -11
  10. package/dist/skills/reference/canon-fmt.md +10 -2
  11. package/dist/skills/reference/canon-gate.md +107 -69
  12. package/dist/skills/reference/canon-inventory.md +23 -15
  13. package/dist/skills/reference/canon-learn.md +23 -19
  14. package/dist/skills/reference/canon-plan-import.md +10 -7
  15. package/dist/skills/reference/canon-plugins.md +15 -8
  16. package/dist/skills/reference/canon-policy.md +20 -16
  17. package/dist/skills/reference/canon-report-dashboard.md +30 -19
  18. package/dist/skills/reference/canon-retrieve.md +13 -10
  19. package/dist/skills/reference/canon-review.md +96 -68
  20. package/dist/skills/reference/canon-session-ingest.md +7 -3
  21. package/dist/skills/reference/canon-storage.md +65 -39
  22. package/dist/skills/reference/canon-subject.md +116 -79
  23. package/dist/skills/reference/canon-vocab.md +1 -1
  24. package/dist/skills/reference/role-implementer.md +295 -64
  25. package/dist/skills/reference/role-orchestrator.md +547 -55
  26. package/dist/skills/reference/role-planner.md +189 -32
  27. package/dist/skills/reference/role-reviewer.md +257 -58
  28. package/dist/skills/scripts/canon-retrieve-pre-dispatch.sh +10 -5
  29. package/man/canon-adapter-authorize.1 +44 -0
  30. package/man/canon-adapter-validate.1 +44 -0
  31. package/man/canon-adapter.1 +46 -0
  32. package/man/canon-artifacts-move.1 +63 -0
  33. package/man/canon-artifacts-store.1 +54 -0
  34. package/man/canon-artifacts-verify.1 +48 -0
  35. package/man/canon-artifacts.1 +45 -0
  36. package/man/canon-brief-approve.1 +62 -0
  37. package/man/canon-brief-check.1 +44 -0
  38. package/man/canon-brief-show.1 +50 -0
  39. package/man/canon-brief.1 +63 -0
  40. package/man/canon-change-new.1 +66 -0
  41. package/man/canon-change.1 +42 -0
  42. package/man/canon-completion.1 +60 -0
  43. package/man/canon-context-pack-add.1 +47 -0
  44. package/man/canon-context-pack-show.1 +44 -0
  45. package/man/canon-context-pack-verify.1 +44 -0
  46. package/man/canon-context-pack.1 +50 -0
  47. package/man/canon-context.1 +44 -0
  48. package/man/canon-dashboard.1 +50 -0
  49. package/man/canon-demo-init.1 +44 -0
  50. package/man/canon-demo-review.1 +44 -0
  51. package/man/canon-demo.1 +47 -0
  52. package/man/canon-dispatch-begin.1 +80 -0
  53. package/man/canon-dispatch-diff.1 +41 -0
  54. package/man/canon-dispatch-end.1 +60 -0
  55. package/man/canon-dispatch.1 +45 -0
  56. package/man/canon-divergence-accept.1 +68 -0
  57. package/man/canon-divergence-add.1 +97 -0
  58. package/man/canon-divergence-defer.1 +71 -0
  59. package/man/canon-divergence-list.1 +56 -0
  60. package/man/canon-divergence-resolve.1 +68 -0
  61. package/man/canon-divergence.1 +51 -0
  62. package/man/canon-evidence-add.1 +168 -0
  63. package/man/canon-evidence-approval-payload.1 +65 -0
  64. package/man/canon-evidence-audit.1 +121 -0
  65. package/man/canon-evidence.1 +57 -0
  66. package/man/canon-export.1 +108 -0
  67. package/man/canon-feature-new.1 +62 -0
  68. package/man/canon-feature.1 +39 -0
  69. package/man/canon-finding-add.1 +196 -0
  70. package/man/canon-finding-close.1 +117 -0
  71. package/man/canon-finding-list.1 +59 -0
  72. package/man/canon-finding.1 +67 -0
  73. package/man/canon-format.1 +49 -0
  74. package/man/canon-gate-check.1 +44 -0
  75. package/man/canon-gate-install-hooks.1 +59 -0
  76. package/man/canon-gate-promote.1 +62 -0
  77. package/man/canon-gate.1 +50 -0
  78. package/man/canon-ingest-plans.1 +53 -0
  79. package/man/canon-ingest-records.1 +56 -0
  80. package/man/canon-ingest-sessions.1 +62 -0
  81. package/man/canon-ingest.1 +50 -0
  82. package/man/canon-init.1 +98 -0
  83. package/man/canon-inventory-sync.1 +50 -0
  84. package/man/canon-inventory.1 +39 -0
  85. package/man/canon-ledger-compact.1 +50 -0
  86. package/man/canon-ledger.1 +54 -0
  87. package/man/canon-migrate.1 +89 -0
  88. package/man/canon-plugin-sync.1 +53 -0
  89. package/man/canon-plugin.1 +39 -0
  90. package/man/canon-policy-approve.1 +50 -0
  91. package/man/canon-policy-show.1 +41 -0
  92. package/man/canon-policy.1 +52 -0
  93. package/man/canon-prompt-add.1 +47 -0
  94. package/man/canon-prompt-show.1 +41 -0
  95. package/man/canon-prompt.1 +43 -0
  96. package/man/canon-purge.1 +70 -0
  97. package/man/canon-query.1 +111 -0
  98. package/man/canon-regime-show.1 +50 -0
  99. package/man/canon-regime.1 +39 -0
  100. package/man/canon-report-build.1 +44 -0
  101. package/man/canon-report-check.1 +41 -0
  102. package/man/canon-report-snapshot.1 +47 -0
  103. package/man/canon-report.1 +45 -0
  104. package/man/canon-retrieve.1 +56 -0
  105. package/man/canon-review-change.1 +98 -0
  106. package/man/canon-review-scenario.1 +98 -0
  107. package/man/canon-review.1 +42 -0
  108. package/man/canon-scenario-new.1 +80 -0
  109. package/man/canon-scenario.1 +39 -0
  110. package/man/canon-schema.1 +63 -0
  111. package/man/canon-selftest.1 +69 -0
  112. package/man/canon-skills-check.1 +47 -0
  113. package/man/canon-skills-doctor.1 +47 -0
  114. package/man/canon-skills-install.1 +53 -0
  115. package/man/canon-skills-show.1 +104 -0
  116. package/man/canon-skills.1 +48 -0
  117. package/man/canon-status.1 +51 -0
  118. package/man/canon-strategy-approval-payload.1 +53 -0
  119. package/man/canon-strategy-promote.1 +59 -0
  120. package/man/canon-strategy-rollback.1 +62 -0
  121. package/man/canon-strategy.1 +45 -0
  122. package/man/canon-subject-adopt.1 +53 -0
  123. package/man/canon-subject-move.1 +80 -0
  124. package/man/canon-subject-new.1 +65 -0
  125. package/man/canon-subject-show.1 +44 -0
  126. package/man/canon-subject-unadopt.1 +63 -0
  127. package/man/canon-subject.1 +51 -0
  128. package/man/canon-task-done.1 +47 -0
  129. package/man/canon-task.1 +42 -0
  130. package/man/canon-tier-age.1 +50 -0
  131. package/man/canon-tier.1 +39 -0
  132. package/man/canon.1 +169 -0
  133. package/package.json +9 -5
@@ -0,0 +1,71 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-divergence-defer 1 "defer 0.28.0"
4
+ .SH NAME
5
+ canon\-divergence\-defer \- Directly record a deferred divergence (requires \-\-reason/\-\-expiry)
6
+ .SH SYNOPSIS
7
+ \fBcanon divergence defer\fR [\fB\-\-as\fR] [\fB\-\-project\-id\fR] [\fB\-\-rev\fR] [\fB\-\-round\fR] <\fB\-\-actor\-id\fR> [\fB\-\-session\-id\fR] <\fB\-\-reason\fR> <\fB\-\-expiry\fR> [\fB\-\-role\fR] [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fISCENARIO_ID\fR>
8
+ .SH DESCRIPTION
9
+ Directly record a deferred divergence (requires \-\-reason/\-\-expiry)
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\-\-project\-id\fR \fI<PROJECT_ID>\fR
30
+ Spec corpus id of the scenario. Required only when canon.yaml configures more than one spec root
31
+ .TP
32
+ \fB\-\-rev\fR \fI<REV>\fR [default: HEAD]
33
+ 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)
34
+ .TP
35
+ \fB\-\-round\fR \fI<N>\fR [default: 1]
36
+ The review round this version belongs to (1\-based)
37
+ .TP
38
+ \fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR
39
+ The reviewer recording this (recorded as the divergence\*(Aqs reviewer and actor)
40
+ .TP
41
+ \fB\-\-session\-id\fR \fI<SESSION_ID>\fR
42
+ The acting session (recorded as actor.session_id); optional
43
+ .TP
44
+ \fB\-\-reason\fR \fI<TEXT>\fR
45
+ Why the divergence is deferred
46
+ .TP
47
+ \fB\-\-expiry\fR \fI<TIMESTAMP>\fR
48
+ When the deferral lapses (RFC3339 or YYYY\-MM\-DD, UTC)
49
+ .TP
50
+ \fB\-\-role\fR \fI<ROLE>\fR
51
+ The role this record is attributed to (default: the role declared with \-\-as / CANON_ROLE)
52
+ .TP
53
+ \fB\-\-repo\fR \fI<DIR>\fR
54
+ The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
55
+ .TP
56
+ \fB\-\-json\fR
57
+ Output JSON instead of the human\-readable form
58
+ .TP
59
+ \fB\-\-input\fR \fI<JSON|FILE|\->\fR
60
+ 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
61
+ .TP
62
+ \fB\-h\fR, \fB\-\-help\fR
63
+ Print help
64
+ .TP
65
+ \fB\-V\fR, \fB\-\-version\fR
66
+ Print version
67
+ .TP
68
+ <\fISCENARIO_ID\fR>
69
+ The scenario (`<area>.<surface>.<nn>`)
70
+ .SH VERSION
71
+ v0.28.0
@@ -0,0 +1,56 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-divergence-list 1 "list 0.28.0"
4
+ .SH NAME
5
+ canon\-divergence\-list \- List the current divergence burn\-down state
6
+ .SH SYNOPSIS
7
+ \fBcanon divergence list\fR [\fB\-\-as\fR] [\fB\-\-repo\fR] [\fB\-\-as\-of\fR] [\fB\-\-json\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 the current divergence burn\-down state
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\-\-repo\fR \fI<DIR>\fR
30
+ The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
31
+ .TP
32
+ \fB\-\-as\-of\fR \fI<TIMESTAMP>\fR
33
+ Governs Deferred expiry; defaults to now
34
+ .TP
35
+ \fB\-\-json\fR
36
+ Print `{data, meta}` as JSON
37
+ .TP
38
+ \fB\-\-limit\fR \fI<N>\fR
39
+ Return at most this many records (default 100)
40
+ .TP
41
+ \fB\-\-cursor\fR \fI<CURSOR>\fR
42
+ Resume after the last record of the previous page (the `nextCursor` it reported)
43
+ .TP
44
+ \fB\-\-all\fR
45
+ Return every record from the cursor on, not one page
46
+ .TP
47
+ \fB\-\-fields\fR \fI<FIELDS>\fR
48
+ With \-\-json, keep only these scenario fields (comma\-separated): project_id, scenario_id, state, reason, expiry, tracking; an unknown field is refused (camelCase and snake_case both match)
49
+ .TP
50
+ \fB\-h\fR, \fB\-\-help\fR
51
+ Print help
52
+ .TP
53
+ \fB\-V\fR, \fB\-\-version\fR
54
+ Print version
55
+ .SH VERSION
56
+ v0.28.0
@@ -0,0 +1,68 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-divergence-resolve 1 "resolve 0.28.0"
4
+ .SH NAME
5
+ canon\-divergence\-resolve \- Directly record a resolved divergence
6
+ .SH SYNOPSIS
7
+ \fBcanon divergence resolve\fR [\fB\-\-as\fR] [\fB\-\-project\-id\fR] [\fB\-\-rev\fR] [\fB\-\-round\fR] <\fB\-\-actor\-id\fR> [\fB\-\-session\-id\fR] [\fB\-\-detail\fR] [\fB\-\-role\fR] [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fISCENARIO_ID\fR>
8
+ .SH DESCRIPTION
9
+ Directly record a resolved divergence
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\-\-project\-id\fR \fI<PROJECT_ID>\fR
30
+ Spec corpus id of the scenario. Required only when canon.yaml configures more than one spec root
31
+ .TP
32
+ \fB\-\-rev\fR \fI<REV>\fR [default: HEAD]
33
+ 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)
34
+ .TP
35
+ \fB\-\-round\fR \fI<N>\fR [default: 1]
36
+ The review round this version belongs to (1\-based)
37
+ .TP
38
+ \fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR
39
+ The reviewer recording this (recorded as the divergence\*(Aqs reviewer and actor)
40
+ .TP
41
+ \fB\-\-session\-id\fR \fI<SESSION_ID>\fR
42
+ The acting session (recorded as actor.session_id); optional
43
+ .TP
44
+ \fB\-\-detail\fR \fI<TEXT>\fR
45
+ Free\-text detail recorded on the version (optional)
46
+ .TP
47
+ \fB\-\-role\fR \fI<ROLE>\fR
48
+ The role this record is attributed to (default: the role declared with \-\-as / CANON_ROLE)
49
+ .TP
50
+ \fB\-\-repo\fR \fI<DIR>\fR
51
+ The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
52
+ .TP
53
+ \fB\-\-json\fR
54
+ Output JSON instead of the human\-readable form
55
+ .TP
56
+ \fB\-\-input\fR \fI<JSON|FILE|\->\fR
57
+ 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
58
+ .TP
59
+ \fB\-h\fR, \fB\-\-help\fR
60
+ Print help
61
+ .TP
62
+ \fB\-V\fR, \fB\-\-version\fR
63
+ Print version
64
+ .TP
65
+ <\fISCENARIO_ID\fR>
66
+ The scenario (`<area>.<surface>.<nn>`)
67
+ .SH VERSION
68
+ v0.28.0
@@ -0,0 +1,51 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-divergence 1 "divergence 0.28.0"
4
+ .SH NAME
5
+ canon\-divergence \- Stage, promote, resolve, and inspect spec divergences
6
+ .SH SYNOPSIS
7
+ \fBcanon divergence\fR [\fB\-\-as\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fIsubcommands\fR>
8
+ .SH DESCRIPTION
9
+ Stage, promote, resolve, and inspect spec divergences
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\-divergence\-add(1)
37
+ 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 }`)
38
+ .TP
39
+ canon\-divergence\-resolve(1)
40
+ Directly record a resolved divergence
41
+ .TP
42
+ canon\-divergence\-defer(1)
43
+ Directly record a deferred divergence (requires \-\-reason/\-\-expiry)
44
+ .TP
45
+ canon\-divergence\-accept(1)
46
+ 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`
47
+ .TP
48
+ canon\-divergence\-list(1)
49
+ List the current divergence burn\-down state
50
+ .SH VERSION
51
+ v0.28.0
@@ -0,0 +1,168 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-evidence-add 1 "add 0.28.0"
4
+ .SH NAME
5
+ canon\-evidence\-add \- Record one attributed EvidenceRecord for a task or scenario (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 evidence add\fR [\fB\-\-as\fR] [\fB\-\-task\-id\fR] [\fB\-\-project\-id\fR] [\fB\-\-class\fR] [\fB\-\-ref\fR] [\fB\-\-verdict\fR] [\fB\-\-summary\fR] [\fB\-\-command\-result\fR] [\fB\-\-scenario\-id\fR] [\fB\-\-run\-id\fR] [\fB\-\-surface\-ref\fR] [\fB\-\-actor\-id\fR] [\fB\-\-role\fR] [\fB\-\-session\-id\fR] [\fB\-\-approver\fR] [\fB\-\-approval\-role\fR] [\fB\-\-signature\-file\fR] [\fB\-\-approval\-at\fR] [\fB\-\-rev\fR] [\fB\-\-artifact\fR] [\fB\-\-report\fR] [\fB\-\-report\-case\fR] [\fB\-\-all\-scenarios\fR] [\fB\-\-max\-artifact\-mib\fR] [\fB\-\-override\-reason\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 attributed EvidenceRecord for a task or scenario (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\-\-task\-id\fR \fI<TASK_ID>\fR
30
+ Plan task this evidence attests to (<change_id>#<n>); required unless \-\-scenario\-id is given
31
+ .TP
32
+ \fB\-\-project\-id\fR \fI<PROJECT_ID>\fR
33
+ Spec corpus id for \-\-scenario\-id (canon keys a scenario by the composite (project_id, scenario_id)). Must name a spec root configured in canon.yaml, or the add is refused (UNKNOWN_SPEC_ROOT) before anything is written
34
+ .TP
35
+ \fB\-\-class\fR \fI<CLASS>\fR
36
+ What CLASS of evidence is attested to (test\-run, review, ...); default `test\-run` when a \-\-report is given. `audit` is refused: an external evaluator\*(Aqs re\-audit is `canon evidence audit`
37
+ .TP
38
+ \fB\-\-ref\fR \fI<TEXT>\fR
39
+ The reference a reader can resolve: a command line, commit sha, or report path (default: the \-\-report paths, comma\-separated, when one is given). NEVER run or resolved by canon
40
+ .TP
41
+ \fB\-\-verdict\fR \fI<VERDICT>\fR
42
+ faithful / not\-applicable / divergent. Given a \-\-report and no \-\-verdict, the verdict is derived from the bound cases (any failed: divergent; a skipped case and none failed: not\-applicable; else faithful), one record at a time with \-\-all\-scenarios; with no report the default is faithful. An explicit faithful over a failed or skipped case is refused
43
+ .br
44
+
45
+ .br
46
+ \fIPossible values:\fR
47
+ .RS 14
48
+ .IP \(bu 2
49
+ faithful
50
+ .IP \(bu 2
51
+ not\-applicable
52
+ .IP \(bu 2
53
+ divergent
54
+ .RE
55
+ .TP
56
+ \fB\-\-summary\fR \fI<TEXT>\fR
57
+ One\-line note, with or without \-\-task; a task\*(Aqs flipped row shows it as the latest summary (scanned for fabrication markers; line breaks refused)
58
+ .TP
59
+ \fB\-\-command\-result\fR \fI<TEXT>\fR
60
+ The real captured output backing \-\-summary (requires \-\-summary; scanned for fabrication markers)
61
+ .TP
62
+ \fB\-\-scenario\-id\fR \fI<SCENARIO_ID>\fR
63
+ Scenario this evidence also joins to
64
+ .TP
65
+ \fB\-\-run\-id\fR \fI<RUN_ID>\fR
66
+ RunId (ULID) of the run that produced this evidence
67
+ .TP
68
+ \fB\-\-surface\-ref\fR \fI<PATH_OR_EFFECT>\fR
69
+ Explicit risk binding: repository\-relative path or effect:<kebab\-slug>; persisted as surface_ref
70
+ .TP
71
+ \fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR [default: canon]
72
+ The attesting actor\*(Aqs id (recorded as the attestation\*(Aqs author; line breaks refused)
73
+ .TP
74
+ \fB\-\-role\fR \fI<ROLE>\fR
75
+ The attesting role; `canon gate promote` derives its run_seq partition key from it. Default: the declared role (\-\-as / CANON_ROLE); required when none is declared
76
+ .TP
77
+ \fB\-\-session\-id\fR \fI<SESSION_ID>\fR
78
+ The attesting session (recorded as actor.session_id). Under require_review.distinct_actor a review from this session does not count
79
+ .TP
80
+ \fB\-\-approver\fR \fI<NAME>\fR
81
+ Human approval identity; authentication comes only from the detached signature
82
+ .TP
83
+ \fB\-\-approval\-role\fR \fI<ROLE>\fR
84
+ Approval role; only human is eligible for risk approval
85
+ .br
86
+
87
+ .br
88
+ \fIPossible values:\fR
89
+ .RS 14
90
+ .IP \(bu 2
91
+ human
92
+ .RE
93
+ .TP
94
+ \fB\-\-signature\-file\fR \fI<FILE>\fR
95
+ Armored SSH detached signature file. Canon never signs on the user\*(Aqs behalf
96
+ .TP
97
+ \fB\-\-approval\-at\fR \fI<TIMESTAMP>\fR
98
+ Timestamp (RFC3339 or YYYY\-MM\-DD) included in the signed approval payload
99
+ .TP
100
+ \fB\-\-rev\fR \fI<REV>\fR [default: HEAD]
101
+ 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)
102
+ .TP
103
+ \fB\-\-artifact\fR \fI<PATH>\fR
104
+ EXPERIMENTAL: bind any file (trace, screenshots, agent QA log, report) by sha256; repeatable; must be inside the repo; with \-\-all\-scenarios only as <scenario\-id>=<path>, bound to that scenario\*(Aqs record alone
105
+ .TP
106
+ \fB\-\-report\fR \fI<FORMAT:PATH>\fR
107
+ EXPERIMENTAL: bind and parse a test report, `junit:<path>`, `cucumber:<path>` or `swift\-testing:<path>`; repeatable
108
+ .TP
109
+ \fB\-\-report\-case\fR \fI<NAME>\fR
110
+ EXPERIMENTAL: also bind this report case (a Rust test: its function name); repeatable. Cases whose own scenario id is this one are always bound
111
+ .TP
112
+ \fB\-\-all\-scenarios\fR
113
+ One record per indexed scenario of \-\-project\-id that owns a case in the \-\-report(s), all or nothing (see below)
114
+ .TP
115
+ \fB\-\-max\-artifact\-mib\fR \fI<N>\fR [default: 25]
116
+ Per\-file size limit for the artifact store (.canon/artifacts/sha256/), in MiB; a larger bound file is refused
117
+ .TP
118
+ \fB\-\-override\-reason\fR \fI<TEXT>\fR
119
+ Attest anyway while a subject this record attests for has a brief awaiting the human\*(Aqs answer (one line, recorded on the record with \-\-actor\-id)
120
+ .TP
121
+ \fB\-\-promote\fR
122
+ Promote the record this run staged, in the same run; records others staged stay staged (the default under canon.yaml `write: { promote: auto }`)
123
+ .TP
124
+ \fB\-\-no\-promote\fR
125
+ Keep this write staged even under canon.yaml `write: { promote: auto }`
126
+ .TP
127
+ \fB\-\-repo\fR \fI<DIR>\fR
128
+ The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
129
+ .TP
130
+ \fB\-\-json\fR
131
+ Output JSON instead of the human\-readable form
132
+ .TP
133
+ \fB\-\-input\fR \fI<JSON|FILE|\->\fR
134
+ 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
135
+ .TP
136
+ \fB\-h\fR, \fB\-\-help\fR
137
+ Print help
138
+ .TP
139
+ \fB\-V\fR, \fB\-\-version\fR
140
+ Print version
141
+ .SH EXTRA
142
+ ATTESTATION, NOT PROOF.
143
+ The evidence command never runs, resolves, or checks \-\-ref. The attestor can authorize its own checkbox; this is an attestation, not independent approval.
144
+ The gate skips the staleness, trust\-ladder, release\-trust, and divergence dimensions.
145
+ Detached approvals require an external signature; canon never signs on the user\*(Aqs behalf.
146
+
147
+ EXPERIMENTAL BINDING (\-\-artifact, \-\-report).
148
+ Canon reads files your runner or agent already wrote; it never runs a test. \-\-artifact binds any file by sha256; \-\-report junit:<path>, cucumber:<path> or swift\-testing:<path> (the JSON\-lines event stream of `swift test \-\-experimental\-event\-stream\-output`) also records the matched case and its outcome (a faithful verdict needs every bound case to pass). Every case whose own scenario id (the first id in its classname, then name, a Swift Testing display name, then function name, or a Cucumber tag) is this one is bound; a case that only mentions it is not; \-\-report\-case adds more. With \-\-task and no \-\-scenario\-id, every case in the report is bound. Bound files are copied into .canon/artifacts/sha256/<hex> (commit them with the ledger; per\-file limit \-\-max\-artifact\-mib, default 25), and canon gate check re\-hashes them: a bound file whose bytes are gone is stale\-evidence. Strength requirements are opt\-in via policy experimental.evidence_binding (off by default).
149
+
150
+ ONE REPORT, MANY SCENARIOS (\-\-all\-scenarios).
151
+ With \-\-report, writes one record per indexed scenario that owns a case in the report, each with its own cases and its own verdict: \-\-verdict when given, else derived (faithful when every case passed, divergent when one failed, not\-applicable when one was skipped). A case whose id is not indexed is named and skipped. All or nothing: any refusal (a claimed faithful verdict over a failed case, a fabrication marker, an unapproved brief, a dropped binding) writes no record. The records share the stored report file.
152
+
153
+ FILES BELONG TO TESTS (\-\-artifact).
154
+ A record binds the attachments of the cases it owns: JUnit `[[ATTACHMENT|<path>]]` lines in a test\*(Aqs <system\-out> (Playwright\*(Aqs reporter; the path is relative to the report\*(Aqs directory) and Cucumber JSON embeddings, in a batch and with \-\-scenario\-id alike. A missing, out\-of\-repo or oversized attachment is refused naming the case and the path. With \-\-all\-scenarios a bare \-\-artifact <path> is refused (it would bind to every record); bind a file to one scenario with \-\-artifact <scenario\-id>=<path> (the part before the first `=` counts only when shaped like a scenario id; write ./<path> for a file named otherwise).
155
+
156
+ A WRITE THAT BREAKS A REVIEW PIN SAYS SO.
157
+ When the new record supersedes evidence a current pinned review saw, one line per review now stale names the reviewer, the scenario and the `canon review scenario` command that re\-pins it (`\-\-rev` names the commit).
158
+
159
+ RE\-ATTESTING NEVER DROPS A BINDING SILENTLY (\-\-drop\-attachment).
160
+ For a scenario, a record that leaves out a file the scenario\*(Aqs latest record binds is refused (exit 2) until it re\-binds the file (new bytes at the same path are fine) or names it with \-\-drop\-attachment <path> (repeatable) \-\-drop\-reason <text>. The drop is recorded on the record and listed by canon status. Task\-only evidence has no drop guard.
161
+
162
+ NOTHING IS ATTESTED BEFORE THE BRIEF IS APPROVED (\-\-override\-reason).
163
+ While a subject this record attests for (the scenario\*(Aqs @subject owner, or any subject adopting the task\*(Aqs change) has a newest change whose proposal.md has no `Approved:` line, the add is refused (exit 1, nothing staged): stop, report the brief and wait for the human\*(Aqs answer. \-\-override\-reason <text> attests anyway; the reason, the waived subjects and \-\-actor\-id are recorded on the record and listed by canon status and canon gate check. A subject with no proposal.md to answer is unaffected; review scenario and finding add are never refused.
164
+
165
+ AUDITS.
166
+ An external evaluator\*(Aqs re\-audit is `canon evidence audit <SCENARIO_ID>`, not `\-\-kind audit`.
167
+ .SH VERSION
168
+ v0.28.0
@@ -0,0 +1,65 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-evidence-approval-payload 1 "approval-payload 0.28.0"
4
+ .SH NAME
5
+ canon\-evidence\-approval\-payload \- Emit exact bytes for external `ssh\-keygen \-Y sign \-n canon\-approval\-v1`
6
+ .SH SYNOPSIS
7
+ \fBcanon evidence approval\-payload\fR [\fB\-\-as\fR] [\fB\-\-task\-id\fR] [\fB\-\-project\-id\fR] [\fB\-\-scenario\-id\fR] [\fB\-\-run\-id\fR] [\fB\-\-rev\fR] [\fB\-\-surface\-ref\fR] <\fB\-\-approver\fR> <\fB\-\-approval\-at\fR> [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
8
+ .SH DESCRIPTION
9
+ Emit exact bytes for external `ssh\-keygen \-Y sign \-n canon\-approval\-v1`
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\-\-task\-id\fR \fI<TASK_ID>\fR
30
+ The plan task the approval is for (<change_id>#<n>); give this or \-\-scenario\-id
31
+ .TP
32
+ \fB\-\-project\-id\fR \fI<PROJECT_ID>\fR
33
+ Spec corpus id for \-\-scenario\-id. Required only when canon.yaml configures more than one spec root
34
+ .TP
35
+ \fB\-\-scenario\-id\fR \fI<SCENARIO_ID>\fR
36
+ The scenario the approval is for; give this or \-\-task\-id
37
+ .TP
38
+ \fB\-\-run\-id\fR \fI<RUN_ID>\fR
39
+ The dispatch run the approved work belongs to
40
+ .TP
41
+ \fB\-\-rev\fR \fI<REV>\fR [default: HEAD]
42
+ 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)
43
+ .TP
44
+ \fB\-\-surface\-ref\fR \fI<PATH_OR_EFFECT>\fR
45
+ The risk surface being approved: a repository\-relative path or `effect:<kebab\-slug>` (repeatable)
46
+ .TP
47
+ \fB\-\-approver\fR \fI<NAME>\fR
48
+ Who approved (the human whose detached signature the payload is for)
49
+ .TP
50
+ \fB\-\-approval\-at\fR \fI<TIMESTAMP>\fR
51
+ The approval time that is signed into the payload: RFC3339, or YYYY\-MM\-DD (UTC midnight)
52
+ .TP
53
+ \fB\-\-repo\fR \fI<DIR>\fR
54
+ The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
55
+ .TP
56
+ \fB\-\-json\fR
57
+ Output JSON instead of the human\-readable form
58
+ .TP
59
+ \fB\-h\fR, \fB\-\-help\fR
60
+ Print help
61
+ .TP
62
+ \fB\-V\fR, \fB\-\-version\fR
63
+ Print version
64
+ .SH VERSION
65
+ v0.28.0
@@ -0,0 +1,121 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-evidence-audit 1 "audit 0.28.0"
4
+ .SH NAME
5
+ canon\-evidence\-audit \- Record an external evaluator\*(Aqs re\-audit of one scenario (class `audit`; the verdict follows \-\-audit\-result; canon never runs the evaluator)
6
+ .SH SYNOPSIS
7
+ \fBcanon evidence audit\fR [\fB\-\-as\fR] [\fB\-\-project\-id\fR] <\fB\-\-ref\fR> [\fB\-\-summary\fR] [\fB\-\-command\-result\fR] [\fB\-\-run\-id\fR] [\fB\-\-actor\-id\fR] [\fB\-\-role\fR] [\fB\-\-session\-id\fR] [\fB\-\-rev\fR] [\fB\-\-artifact\fR] [\fB\-\-report\fR] [\fB\-\-report\-case\fR] [\fB\-\-max\-artifact\-mib\fR] <\fB\-\-evaluator\-id\fR> <\fB\-\-evaluator\-version\fR> <\fB\-\-evaluator\-digest\fR> <\fB\-\-audit\-result\fR> [\fB\-\-override\-reason\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] <\fISCENARIO_ID\fR>
8
+ .SH DESCRIPTION
9
+ Record an external evaluator\*(Aqs re\-audit of one scenario (class `audit`; the verdict follows \-\-audit\-result; canon never runs the evaluator)
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\-\-project\-id\fR \fI<PROJECT_ID>\fR
30
+ Spec corpus id of the scenario. Required only when canon.yaml configures more than one spec root; refused (UNKNOWN_SPEC_ROOT) when it names none
31
+ .TP
32
+ \fB\-\-ref\fR \fI<TEXT>\fR
33
+ The reference a reader can resolve: a command line, commit sha, or report path. NEVER run or resolved by canon
34
+ .TP
35
+ \fB\-\-summary\fR \fI<TEXT>\fR
36
+ One\-line note (scanned for fabrication markers; line breaks refused)
37
+ .TP
38
+ \fB\-\-command\-result\fR \fI<TEXT>\fR
39
+ The real captured output backing \-\-summary (requires \-\-summary; scanned for fabrication markers)
40
+ .TP
41
+ \fB\-\-run\-id\fR \fI<RUN_ID>\fR
42
+ RunId (ULID) of the run that produced this evidence
43
+ .TP
44
+ \fB\-\-actor\-id\fR \fI<ACTOR_ID>\fR [default: canon]
45
+ The attesting actor\*(Aqs id (recorded as the attestation\*(Aqs author; line breaks refused)
46
+ .TP
47
+ \fB\-\-role\fR \fI<ROLE>\fR
48
+ The attesting role; `canon gate promote` derives its run_seq partition key from it. Default: the declared role (\-\-as / CANON_ROLE); required when none is declared
49
+ .TP
50
+ \fB\-\-session\-id\fR \fI<SESSION_ID>\fR
51
+ The attesting session (recorded as actor.session_id)
52
+ .TP
53
+ \fB\-\-rev\fR \fI<REV>\fR [default: HEAD]
54
+ 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)
55
+ .TP
56
+ \fB\-\-artifact\fR \fI<PATH>\fR
57
+ EXPERIMENTAL: bind any file (trace, log, report) by sha256; repeatable; must be inside the repo
58
+ .TP
59
+ \fB\-\-report\fR \fI<FORMAT:PATH>\fR
60
+ EXPERIMENTAL: bind and parse a test report, `junit:<path>`, `cucumber:<path>` or `swift\-testing:<path>`; repeatable
61
+ .TP
62
+ \fB\-\-report\-case\fR \fI<NAME>\fR
63
+ EXPERIMENTAL: also bind this report case (a Rust test: its function name); repeatable
64
+ .TP
65
+ \fB\-\-max\-artifact\-mib\fR \fI<N>\fR [default: 25]
66
+ Per\-file size limit for the artifact store (.canon/artifacts/sha256/), in MiB; a larger bound file is refused
67
+ .TP
68
+ \fB\-\-evaluator\-id\fR \fI<ID>\fR
69
+ The external evaluator that re\-audited the scenario (canon never runs it)
70
+ .TP
71
+ \fB\-\-evaluator\-version\fR \fI<TEXT>\fR
72
+ The evaluator\*(Aqs version
73
+ .TP
74
+ \fB\-\-evaluator\-digest\fR \fI<DIGEST>\fR
75
+ sha256 of the evaluator (64 lowercase hex)
76
+ .TP
77
+ \fB\-\-audit\-result\fR \fI<RESULT>\fR
78
+ confirmed / refuted / indeterminate; the record\*(Aqs verdict follows it (confirmed → faithful, refuted → divergent, indeterminate → not\-applicable)
79
+ .br
80
+
81
+ .br
82
+ \fIPossible values:\fR
83
+ .RS 14
84
+ .IP \(bu 2
85
+ confirmed
86
+ .IP \(bu 2
87
+ refuted
88
+ .IP \(bu 2
89
+ indeterminate
90
+ .RE
91
+ .TP
92
+ \fB\-\-override\-reason\fR \fI<TEXT>\fR
93
+ Attest anyway while a subject this record attests for has a brief awaiting the human\*(Aqs answer (one line, recorded on the record with \-\-actor\-id)
94
+ .TP
95
+ \fB\-\-promote\fR
96
+ Promote the record this run staged, in the same run; records others staged stay staged (the default under canon.yaml `write: { promote: auto }`)
97
+ .TP
98
+ \fB\-\-no\-promote\fR
99
+ Keep this write staged even under canon.yaml `write: { promote: auto }`
100
+ .TP
101
+ \fB\-\-repo\fR \fI<DIR>\fR
102
+ The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
103
+ .TP
104
+ \fB\-\-json\fR
105
+ Output JSON instead of the human\-readable form
106
+ .TP
107
+ \fB\-\-input\fR \fI<JSON|FILE|\->\fR
108
+ 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
109
+ .TP
110
+ \fB\-h\fR, \fB\-\-help\fR
111
+ Print help
112
+ .TP
113
+ \fB\-V\fR, \fB\-\-version\fR
114
+ Print version
115
+ .TP
116
+ <\fISCENARIO_ID\fR>
117
+ The re\-audited scenario (`<area>.<surface>.<nn>`)
118
+ .SH EXTRA
119
+ Records an external evaluator\*(Aqs re\-audit of one scenario: \-\-evaluator\-id, \-\-evaluator\-version, \-\-evaluator\-digest <sha256>, \-\-audit\-result confirmed|refuted|indeterminate, and optional \-\-report/\-\-artifact counterexamples, bound and stored like any report. canon never generates or runs the audit. An audit never becomes the scenario\*(Aqs declared verdict; a refuted latest audit is false\-success in canon gate check, whatever the declared verdict says.
120
+ .SH VERSION
121
+ v0.28.0
@@ -0,0 +1,57 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH canon-evidence 1 "evidence 0.28.0"
4
+ .SH NAME
5
+ canon\-evidence \- Author a staged, attributed evidence attestation for a plan task
6
+ .SH SYNOPSIS
7
+ \fBcanon evidence\fR [\fB\-\-as\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fIsubcommands\fR>
8
+ .SH DESCRIPTION
9
+ Author a staged, attributed evidence attestation for a plan task
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\-evidence\-approval\-payload(1)
37
+ Emit exact bytes for external `ssh\-keygen \-Y sign \-n canon\-approval\-v1`
38
+ .TP
39
+ canon\-evidence\-add(1)
40
+ Record one attributed EvidenceRecord for a task or scenario (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\-evidence\-audit(1)
43
+ Record an external evaluator\*(Aqs re\-audit of one scenario (class `audit`; the verdict follows \-\-audit\-result; canon never runs the evaluator)
44
+ .SH EXTRA
45
+ Examples:
46
+ canon evidence add \-\-task\-id my\-change#3.1 \-\-class test\-run \-\-ref \*(Aqcargo test \-p canon\-cli\*(Aq \-\-role implementer
47
+
48
+ The loop:
49
+ canon evidence add ... Record an EvidenceRecord (promoted in the same run under
50
+ `write: { promote: auto }`, which `canon init` writes)
51
+ canon task done <id> Flip the checkbox on it
52
+ Under `write.promote: manual` (no `write:` key), run `canon gate promote` after
53
+ each add to commit it (assigns run_seq).
54
+
55
+ See `canon evidence add \-\-help` for exactly what the gate does and does not check.
56
+ .SH VERSION
57
+ v0.28.0