@gobing-ai/knowledge-kit 0.0.37 → 0.1.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/.claude-plugin/marketplace.json +1 -1
- package/dist/board/collect/index.css +654 -16
- package/dist/board/collect/index.js +191 -64
- package/dist/board/daily-voice/index.css +679 -12
- package/dist/board/daily-voice/index.js +185 -66
- package/dist/board/itc/index.css +679 -13
- package/dist/board/itc/index.js +188 -66
- package/dist/index.js +2864 -139
- package/package.json +3 -2
- package/plugins/generations/content-gen/dist/index.js +158 -12
- package/plugins/generations/core-facts-gen/dist/index.js +158 -12
- package/plugins/generations/daily-article-gen/dist/index.js +158 -12
- package/plugins/generations/dailynews-gen/dist/index.js +158 -12
- package/plugins/generations/episode-plan-gen/dist/index.js +158 -12
- package/plugins/generations/gemini-tts/README.md +4 -3
- package/plugins/generations/gemini-tts/dist/index.js +158 -12
- package/plugins/generations/image-gen/dist/index.js +158 -12
- package/plugins/generations/news-report-gen/dist/index.js +158 -12
- package/plugins/generations/omni-voice-gen/README.md +15 -4
- package/plugins/generations/omni-voice-gen/profiles.json +1 -2
- package/plugins/generations/voice-gen/dist/index.js +158 -12
- package/plugins/generations/voxcpm-tts/README.md +21 -1
- package/plugins/generations/voxcpm-tts/dist/index.js +173 -13
- package/plugins/generations/voxcpm-tts/scripts/audit-speaker-consistency.py +109 -0
- package/plugins/generations/voxcpm-tts/src/voxcpm-client.ts +28 -1
- package/plugins/ingestions/aihot-ingest/dist/index.js +158 -12
- package/plugins/ingestions/horizon-ingest/dist/index.js +158 -12
- package/plugins/ingestions/last30days-ingest/dist/index.js +158 -12
- package/plugins/ingestions/web-search/dist/index.js +158 -12
- package/plugins/kk/commands/workflow-run.md +56 -18
- package/plugins/kk/decisions/kk-itc.yaml +46 -0
- package/plugins/kk/decisions/kk-seo-keyword.yaml +57 -0
- package/plugins/kk/decisions/kk-seo-page.yaml +230 -0
- package/plugins/kk/decisions/kk-seo-pair.yaml +21 -0
- package/plugins/kk/decisions/kk-seo-site.yaml +90 -0
- package/plugins/kk/plugin.json +1 -1
- package/plugins/kk/publish-presets/chinese-article.json +14 -0
- package/plugins/kk/publish-presets/technical-article.json +14 -0
- package/plugins/kk/references/smart-seo-attribution.md +85 -0
- package/plugins/kk/scripts/daily-stages.ts +42 -2
- package/plugins/kk/scripts/itc-stages.ts +25 -118
- package/plugins/kk/scripts/kk-workflow-stages.ts +38 -1
- package/plugins/kk/scripts/seo-decisions.ts +477 -0
- package/plugins/kk/scripts/seo-enrich.ts +728 -0
- package/plugins/kk/scripts/seo-facts.ts +610 -0
- package/plugins/kk/scripts/seo-fetch.ts +766 -0
- package/plugins/kk/scripts/seo-report.ts +460 -0
- package/plugins/kk/scripts/seo-rules.ts +1882 -0
- package/plugins/kk/scripts/seo-stages.ts +1044 -0
- package/plugins/kk/skills/article-adapt/SKILL.md +2 -2
- package/plugins/kk/skills/smart-seo/SKILL.md +183 -0
- package/plugins/kk/skills/smart-seo/references/method.md +126 -0
- package/plugins/kk/skills/smart-seo/references/narrative.md +125 -0
- package/plugins/kk/skills/smart-seo/references/operations.md +202 -0
- package/plugins/kk/skills/smart-seo/references/seo-geo-sources.md +90 -0
- package/plugins/kk/workflows/feature-verification.yaml +28 -24
- package/plugins/kk/workflows/kk-daily-ai-voice2.yaml +85 -17
- package/plugins/kk/workflows/kk-itc-author.yaml +406 -0
- package/plugins/kk/workflows/kk-itc.yaml +208 -682
- package/plugins/kk/workflows/kk-smart-seo.yaml +251 -0
- package/plugins/publishings/bilibili-pub/dist/index.js +21782 -0
- package/plugins/publishings/bilibili-pub/dist/profile-check.js +20410 -0
- package/plugins/publishings/bilibili-pub/package.json +20 -0
- package/plugins/publishings/bilibili-pub/plugin.json +12 -0
- package/plugins/publishings/bilibili-pub/src/flow.ts +1296 -0
- package/plugins/publishings/bilibili-pub/src/index.ts +139 -0
- package/plugins/publishings/bilibili-pub/src/profile-check.ts +19 -0
- package/plugins/publishings/bilibili-pub/src/selectors.ts +222 -0
- package/plugins/publishings/bilibili-pub/tsconfig.json +4 -0
- package/plugins/publishings/cnblogs-pub/dist/index.js +21383 -0
- package/plugins/publishings/cnblogs-pub/dist/profile-check.js +20412 -0
- package/plugins/publishings/cnblogs-pub/package.json +19 -0
- package/plugins/publishings/cnblogs-pub/plugin.json +12 -0
- package/plugins/publishings/cnblogs-pub/src/flow.ts +708 -0
- package/plugins/publishings/cnblogs-pub/src/index.ts +172 -0
- package/plugins/publishings/cnblogs-pub/src/profile-check.ts +24 -0
- package/plugins/publishings/cnblogs-pub/src/selectors.ts +104 -0
- package/plugins/publishings/cnblogs-pub/tsconfig.json +4 -0
- package/plugins/publishings/csdn-pub/dist/index.js +21552 -0
- package/plugins/publishings/csdn-pub/dist/profile-check.js +20963 -0
- package/plugins/publishings/csdn-pub/package.json +19 -0
- package/plugins/publishings/csdn-pub/plugin.json +12 -0
- package/plugins/publishings/csdn-pub/src/index.ts +1178 -0
- package/plugins/publishings/csdn-pub/src/profile-check.ts +23 -0
- package/plugins/publishings/csdn-pub/tsconfig.json +4 -0
- package/plugins/publishings/emdash-pub/dist/index.js +158 -12
- package/plugins/publishings/emdash-pub/plugin.json +22 -1
- package/plugins/publishings/infoq-pub/dist/index.js +160 -12
- package/plugins/publishings/infoq-pub/dist/profile-check.js +160 -12
- package/plugins/publishings/infoq-pub/plugin.json +21 -0
- package/plugins/publishings/jike-pub/dist/index.js +21379 -0
- package/plugins/publishings/jike-pub/dist/profile-check.js +20951 -0
- package/plugins/publishings/jike-pub/package.json +19 -0
- package/plugins/publishings/jike-pub/plugin.json +12 -0
- package/plugins/publishings/jike-pub/src/index.ts +800 -0
- package/plugins/publishings/jike-pub/src/profile-check.ts +21 -0
- package/plugins/publishings/jike-pub/tsconfig.json +4 -0
- package/plugins/publishings/juejin-pub/dist/index.js +160 -12
- package/plugins/publishings/juejin-pub/dist/profile-check.js +160 -12
- package/plugins/publishings/juejin-pub/plugin.json +21 -0
- package/plugins/publishings/medium-pub/dist/index.js +158 -12
- package/plugins/publishings/medium-pub/plugin.json +22 -1
- package/plugins/publishings/podcast-pub/dist/index.js +158 -12
- package/plugins/publishings/qiita-pub/dist/index.js +158 -12
- package/plugins/publishings/qiita-pub/plugin.json +24 -1
- package/plugins/publishings/shipinhao-pub/dist/index.js +21715 -0
- package/plugins/publishings/shipinhao-pub/dist/profile-check.js +20431 -0
- package/plugins/publishings/shipinhao-pub/package.json +19 -0
- package/plugins/publishings/shipinhao-pub/plugin.json +12 -0
- package/plugins/publishings/shipinhao-pub/src/flow.ts +1323 -0
- package/plugins/publishings/shipinhao-pub/src/index.ts +173 -0
- package/plugins/publishings/shipinhao-pub/src/profile-check.ts +25 -0
- package/plugins/publishings/shipinhao-pub/src/selectors.ts +241 -0
- package/plugins/publishings/shipinhao-pub/tsconfig.json +4 -0
- package/plugins/publishings/sspai-pub/dist/index.js +21371 -0
- package/plugins/publishings/sspai-pub/dist/profile-check.js +20414 -0
- package/plugins/publishings/sspai-pub/package.json +19 -0
- package/plugins/publishings/sspai-pub/plugin.json +12 -0
- package/plugins/publishings/sspai-pub/src/flow.ts +624 -0
- package/plugins/publishings/sspai-pub/src/index.ts +167 -0
- package/plugins/publishings/sspai-pub/src/profile-check.ts +25 -0
- package/plugins/publishings/sspai-pub/src/selectors.ts +122 -0
- package/plugins/publishings/sspai-pub/tsconfig.json +4 -0
- package/plugins/publishings/substack-pub/dist/index.js +160 -12
- package/plugins/publishings/substack-pub/dist/profile-check.js +160 -12
- package/plugins/publishings/substack-pub/plugin.json +21 -0
- package/plugins/publishings/surfdash-pub/dist/index.js +158 -12
- package/plugins/publishings/surfdash-pub/plugin.json +22 -1
- package/plugins/publishings/threads-pub/dist/index.js +158 -12
- package/plugins/publishings/wechatmp-pub/dist/index.js +1669 -502
- package/plugins/publishings/wechatmp-pub/dist/profile-check.js +204 -21
- package/plugins/publishings/wechatmp-pub/plugin.json +32 -0
- package/plugins/publishings/wechatmp-pub/src/cgi-draft.ts +540 -0
- package/plugins/publishings/wechatmp-pub/src/cgi-media.ts +380 -0
- package/plugins/publishings/wechatmp-pub/src/cgi.ts +485 -0
- package/plugins/publishings/wechatmp-pub/src/flow.ts +104 -0
- package/plugins/publishings/weibo-pub/dist/index.js +160 -12
- package/plugins/publishings/weibo-pub/dist/profile-check.js +160 -12
- package/plugins/publishings/weibo-pub/plugin.json +35 -0
- package/plugins/publishings/x-pub/dist/index.js +160 -12
- package/plugins/publishings/x-pub/dist/profile-check.js +160 -12
- package/plugins/publishings/x-pub/plugin.json +40 -0
- package/plugins/publishings/xhs-pub/dist/index.js +160 -12
- package/plugins/publishings/xhs-pub/dist/profile-check.js +160 -12
- package/plugins/publishings/xhs-pub/plugin.json +37 -0
- package/plugins/publishings/xiaoyuzhou-pub/dist/index.js +21491 -0
- package/plugins/publishings/xiaoyuzhou-pub/dist/profile-check.js +20417 -0
- package/plugins/publishings/xiaoyuzhou-pub/package.json +19 -0
- package/plugins/publishings/xiaoyuzhou-pub/plugin.json +12 -0
- package/plugins/publishings/xiaoyuzhou-pub/src/flow.ts +826 -0
- package/plugins/publishings/xiaoyuzhou-pub/src/index.ts +174 -0
- package/plugins/publishings/xiaoyuzhou-pub/src/profile-check.ts +26 -0
- package/plugins/publishings/xiaoyuzhou-pub/src/selectors.ts +125 -0
- package/plugins/publishings/xiaoyuzhou-pub/tsconfig.json +4 -0
- package/plugins/publishings/zenn-pub/dist/index.js +158 -12
- package/plugins/publishings/zenn-pub/plugin.json +22 -1
- package/plugins/generations/omni-voice-gen/voices/robin-news.wav +0 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
# kk-smart-seo — evidence-grounded SEO/GEO audit (feature G9, task 0285).
|
|
3
|
+
#
|
|
4
|
+
# preflight -> collect -> check -> enrich -> judge -> score -> narrative -> report -> done|partial
|
|
5
|
+
#
|
|
6
|
+
# Eight stages over the existing `kk stage run seo-*` actions plus ONE bounded narrative
|
|
7
|
+
# agent.run. No new workflow engine, no scheduler, no Board surface (design §3/§13).
|
|
8
|
+
#
|
|
9
|
+
# Contract notes that matter when editing this file:
|
|
10
|
+
# * Deterministic actions pass quoted environment data, never templated shell source:
|
|
11
|
+
# `kk stage run seo-<stage> "$work_dir"`. Workflow vars are exported to the shell env, so a
|
|
12
|
+
# value with spaces or shell metacharacters stays one literal argv entry, and a NUL byte is
|
|
13
|
+
# refused by the stage validators.
|
|
14
|
+
# * preflight atomically writes `.spur/run/<run-id>-seo-work-dir.txt` (plain text, the resolved
|
|
15
|
+
# absolute workspace). `file.read.into-var` projects that exact run-bound file back into
|
|
16
|
+
# `work_dir` before collection, so an allocated directory (empty `work_dir`) binds correctly.
|
|
17
|
+
# * Required stages use an `action-ok` edge to the next stage and a default `always` edge to
|
|
18
|
+
# `failed`. Optional evidence (PSI/CrUX, semantic decisions) is persisted by its stage as an
|
|
19
|
+
# availability outcome and the stage still exits 0 — an unavailable optional input is a
|
|
20
|
+
# `partial` report, never a failed run.
|
|
21
|
+
# * `report` chooses `done` vs `partial` from the validated `report.json.status`; an absent or
|
|
22
|
+
# malformed report falls through to `failed`.
|
|
23
|
+
# * `iterationBound: 12` covers the eight stages plus the terminal hop with no open loop.
|
|
24
|
+
# * The narrative has no revision loop: one fresh `agent.run`, `timeoutMs: 120000`, an
|
|
25
|
+
# unconditional edge to `report`, and `onError: continue` so an absent or invalid narrative
|
|
26
|
+
# degrades to the labeled deterministic summary instead of failing the audit.
|
|
27
|
+
"$schema": "@gobing-ai/spur/schemas/state-machine-workflow.schema.json"
|
|
28
|
+
name: kk-smart-seo
|
|
29
|
+
kind: state-machine
|
|
30
|
+
version: "2"
|
|
31
|
+
description: >-
|
|
32
|
+
Read-only SEO/GEO audit for one public URL: bounded collection, deterministic checks,
|
|
33
|
+
optional measured evidence, typed semantic judgments, deterministic scoring, an optional
|
|
34
|
+
validated narrative and a JSON/Markdown report.
|
|
35
|
+
initialState: preflight
|
|
36
|
+
terminalStates:
|
|
37
|
+
- done
|
|
38
|
+
- partial
|
|
39
|
+
- failed
|
|
40
|
+
failureStates:
|
|
41
|
+
- failed
|
|
42
|
+
iterationBound: 12
|
|
43
|
+
vars:
|
|
44
|
+
# Path to the UTF-8 JSON options file (max 64 KiB, strict schema — see seo-facts.validateOptions).
|
|
45
|
+
options_file: ""
|
|
46
|
+
# Empty asks preflight to allocate .works/kk-smart-seo/<UTC-stamp>-<run-id>; a non-empty value
|
|
47
|
+
# must name an absent or empty directory (overwrite is refused). Preflight rewrites this var from
|
|
48
|
+
# the run-bound work-dir file, so the resolved absolute path is authoritative below.
|
|
49
|
+
work_dir: ""
|
|
50
|
+
# Seeded by the engine; declared here so the schema keeps every var explicit.
|
|
51
|
+
__runId: ""
|
|
52
|
+
|
|
53
|
+
states:
|
|
54
|
+
- id: preflight
|
|
55
|
+
description: >-
|
|
56
|
+
Validate the options file, allocate or verify the run workspace, install the run-bound
|
|
57
|
+
work-dir file and (require_decisions=true) prove the four SEO decision catalogs are served.
|
|
58
|
+
onEnter:
|
|
59
|
+
- kind: shell
|
|
60
|
+
options:
|
|
61
|
+
command: >-
|
|
62
|
+
kk stage run seo-preflight "$work_dir" "$options_file" "$__runId" true
|
|
63
|
+
- kind: file.read.into-var
|
|
64
|
+
options:
|
|
65
|
+
path: ".spur/run/${vars.__runId}-seo-work-dir.txt"
|
|
66
|
+
var: work_dir
|
|
67
|
+
|
|
68
|
+
- id: collect
|
|
69
|
+
description: >-
|
|
70
|
+
Bounded public-site collection: robots, sitemaps, scoped redirects and per-page facts,
|
|
71
|
+
all inside one shared page/request/byte/deadline budget.
|
|
72
|
+
onEnter:
|
|
73
|
+
- kind: shell
|
|
74
|
+
options:
|
|
75
|
+
command: >-
|
|
76
|
+
kk stage run seo-collect "$work_dir"
|
|
77
|
+
|
|
78
|
+
- id: check
|
|
79
|
+
description: >-
|
|
80
|
+
Deterministic offline rule assessment over the collected facts: one explicit
|
|
81
|
+
pass/fail/unknown/not-applicable row per rule and eligible subject.
|
|
82
|
+
onEnter:
|
|
83
|
+
- kind: shell
|
|
84
|
+
options:
|
|
85
|
+
command: >-
|
|
86
|
+
kk stage run seo-check "$work_dir"
|
|
87
|
+
|
|
88
|
+
- id: enrich
|
|
89
|
+
description: >-
|
|
90
|
+
Optional measured evidence (PSI lab + CrUX field, imported visibility). Disabled or
|
|
91
|
+
unavailable evidence is persisted as an availability outcome and the stage exits 0.
|
|
92
|
+
onEnter:
|
|
93
|
+
- kind: shell
|
|
94
|
+
options:
|
|
95
|
+
command: >-
|
|
96
|
+
kk stage run seo-enrich "$work_dir"
|
|
97
|
+
|
|
98
|
+
- id: judge
|
|
99
|
+
description: >-
|
|
100
|
+
Typed semantic judgments through `spur decision` against the four SEO catalogs. Fallback,
|
|
101
|
+
malformed, low-certainty or unavailable results stay unknown/review; deadline exhaustion
|
|
102
|
+
leaves the remaining questions explicitly unassessed and the stage still exits 0.
|
|
103
|
+
onEnter:
|
|
104
|
+
- kind: shell
|
|
105
|
+
options:
|
|
106
|
+
command: >-
|
|
107
|
+
kk stage run seo-judge "$work_dir"
|
|
108
|
+
|
|
109
|
+
- id: score
|
|
110
|
+
description: >-
|
|
111
|
+
Deterministic scoring, stable finding/action IDs, prioritization and the audit artifact.
|
|
112
|
+
Refuses to overwrite an existing audit in the same workspace.
|
|
113
|
+
onEnter:
|
|
114
|
+
- kind: shell
|
|
115
|
+
options:
|
|
116
|
+
command: >-
|
|
117
|
+
kk stage run seo-score "$work_dir"
|
|
118
|
+
|
|
119
|
+
- id: narrative
|
|
120
|
+
description: >-
|
|
121
|
+
ONE bounded narrative attempt. The agent selects allow-listed headings and fixed
|
|
122
|
+
fact/action/limit templates pointing at recorded audit records; it cannot introduce prose,
|
|
123
|
+
measurements, diagnoses or predictions. Absent/invalid output is rejected and the report
|
|
124
|
+
falls back to its deterministic summary — never an audit failure (onError: continue).
|
|
125
|
+
onEnter:
|
|
126
|
+
- kind: agent.run
|
|
127
|
+
onError: continue
|
|
128
|
+
options:
|
|
129
|
+
role: coder
|
|
130
|
+
session: fresh
|
|
131
|
+
timeoutMs: 120000
|
|
132
|
+
answerFile: "${vars.work_dir}/narrative.json"
|
|
133
|
+
expectFile: "${vars.work_dir}/narrative.json"
|
|
134
|
+
input: >-
|
|
135
|
+
Author the optional Smart SEO narrative offline; change no file but this artifact.
|
|
136
|
+
Source: ${vars.work_dir}/audit.json. Its SHA-256 covers the exact file bytes (shasum -a 256).
|
|
137
|
+
Reply with exactly one JSON object, captured verbatim as narrative.json:
|
|
138
|
+
{"schemaVersion":1,"runId":"<audit.runId>","auditDigest":"<sha256>","sections":[{"heading":"summary|priorities|limits","claims":[{"template":"fact|action|limit","evidenceRef":{"artifact":"audit.json","jsonPointer":"/facts/<key>|/actions/<id>|/limits/<key>"}}]}]}
|
|
139
|
+
Only those three headings, templates and pointer roots are accepted. No other keys anywhere (a prose `text` field rejects the whole narrative). At most 30 claims; each pointer must address a record present in audit.json. Select and order recorded references; never invent a measurement, unit, diagnosis or prediction.
|
|
140
|
+
If no valid narrative is possible, reply with exactly {} - the report then falls back to its deterministic summary.
|
|
141
|
+
|
|
142
|
+
- id: report
|
|
143
|
+
description: >-
|
|
144
|
+
Materialize report.json and report.md, validating the optional narrative against the audit
|
|
145
|
+
digest first. Report status decides the terminal state: done, or partial when requested
|
|
146
|
+
evidence was unavailable.
|
|
147
|
+
onEnter:
|
|
148
|
+
- kind: shell
|
|
149
|
+
options:
|
|
150
|
+
command: >-
|
|
151
|
+
kk stage run seo-report "$work_dir"
|
|
152
|
+
|
|
153
|
+
- id: done
|
|
154
|
+
description: >-
|
|
155
|
+
Terminal — every requested stage assessed its eligible evidence and every artifact was
|
|
156
|
+
materialized with a complete status.
|
|
157
|
+
- id: partial
|
|
158
|
+
description: >-
|
|
159
|
+
Terminal — successful artifact delivery with missing requested evidence. Not a failure:
|
|
160
|
+
coverage and limits in the report name what was unavailable.
|
|
161
|
+
- id: failed
|
|
162
|
+
description: Terminal — a required stage failed or the report could not be materialized.
|
|
163
|
+
|
|
164
|
+
transitions:
|
|
165
|
+
- from: preflight
|
|
166
|
+
to: collect
|
|
167
|
+
description: Options validated, workspace bound and (when required) SEO catalogs served.
|
|
168
|
+
guard:
|
|
169
|
+
kind: action-ok
|
|
170
|
+
- from: preflight
|
|
171
|
+
to: failed
|
|
172
|
+
terminalReason: failed-check
|
|
173
|
+
description: Invalid options, unusable workspace, unserved decision catalogs or stage error.
|
|
174
|
+
|
|
175
|
+
- from: collect
|
|
176
|
+
to: check
|
|
177
|
+
description: Collection completed within budget.
|
|
178
|
+
guard:
|
|
179
|
+
kind: action-ok
|
|
180
|
+
- from: collect
|
|
181
|
+
to: failed
|
|
182
|
+
terminalReason: failed-check
|
|
183
|
+
description: Collection failed (network policy, malformed predecessor input or stage error).
|
|
184
|
+
|
|
185
|
+
- from: check
|
|
186
|
+
to: enrich
|
|
187
|
+
description: Every rule/eligible-subject row assessed and checks.json written.
|
|
188
|
+
guard:
|
|
189
|
+
kind: action-ok
|
|
190
|
+
- from: check
|
|
191
|
+
to: failed
|
|
192
|
+
terminalReason: failed-check
|
|
193
|
+
description: Assessment could not be produced from the collected evidence.
|
|
194
|
+
|
|
195
|
+
- from: enrich
|
|
196
|
+
to: judge
|
|
197
|
+
description: Optional evidence resolved to available/unavailable outcomes.
|
|
198
|
+
guard:
|
|
199
|
+
kind: action-ok
|
|
200
|
+
- from: enrich
|
|
201
|
+
to: failed
|
|
202
|
+
terminalReason: failed-check
|
|
203
|
+
description: Invalid supplied visibility input or an enrichment stage error.
|
|
204
|
+
|
|
205
|
+
- from: judge
|
|
206
|
+
to: score
|
|
207
|
+
description: Judgment pass finished (including deadline exhaustion with unassessed remainder).
|
|
208
|
+
guard:
|
|
209
|
+
kind: action-ok
|
|
210
|
+
- from: judge
|
|
211
|
+
to: failed
|
|
212
|
+
terminalReason: failed-check
|
|
213
|
+
description: The decision catalog contract was violated or the stage errored.
|
|
214
|
+
|
|
215
|
+
- from: score
|
|
216
|
+
to: narrative
|
|
217
|
+
description: audit.json materialized with stable IDs and scores.
|
|
218
|
+
guard:
|
|
219
|
+
kind: action-ok
|
|
220
|
+
- from: score
|
|
221
|
+
to: failed
|
|
222
|
+
terminalReason: failed-check
|
|
223
|
+
description: Scoring failed or refused to overwrite an existing audit.
|
|
224
|
+
|
|
225
|
+
# Unconditional: the narrative is optional, so every outcome continues to reporting.
|
|
226
|
+
- from: narrative
|
|
227
|
+
to: report
|
|
228
|
+
description: Narrative attempt settled (valid, absent or rejected) — materialize the report.
|
|
229
|
+
guard:
|
|
230
|
+
kind: always
|
|
231
|
+
|
|
232
|
+
- from: report
|
|
233
|
+
to: done
|
|
234
|
+
description: report.json materialized with status "done".
|
|
235
|
+
guard:
|
|
236
|
+
kind: shell
|
|
237
|
+
options:
|
|
238
|
+
command: >-
|
|
239
|
+
test -f "$work_dir/report.json" && jq -e '.status == "done"' "$work_dir/report.json" >/dev/null
|
|
240
|
+
- from: report
|
|
241
|
+
to: partial
|
|
242
|
+
description: report.json materialized with status "partial" (missing requested evidence).
|
|
243
|
+
guard:
|
|
244
|
+
kind: shell
|
|
245
|
+
options:
|
|
246
|
+
command: >-
|
|
247
|
+
test -f "$work_dir/report.json" && jq -e '.status == "partial"' "$work_dir/report.json" >/dev/null
|
|
248
|
+
- from: report
|
|
249
|
+
to: failed
|
|
250
|
+
terminalReason: failed-check
|
|
251
|
+
description: Absent or malformed report.json — no JSON report can be certified.
|