dsh-crwu-workbench 0.0.39 → 0.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +171 -1
- package/README.en.md +18 -1
- package/README.md +20 -5
- package/bin/darwin-arm64/crwu +0 -0
- package/bin/manifest.json +5 -5
- package/bin/win32-x64/crwu.exe +0 -0
- package/lib/client.js +3576 -1072
- package/lib/index.js +1880 -315
- package/package.json +1 -1
- package/skills/crwu/crwu-audit/SKILL.md +5 -1
- package/skills/crwu/crwu-audit/references/11-html-delivery-spec.md +1 -1
- package/skills/crwu/crwu-audit/references/16-local-audit.md +123 -0
- package/skills/crwu/crwu-audit/references/99-maintenance.md +1 -0
- package/skills/crwu/crwu-audit/scripts/audit_delivery.py +18 -2
- package/skills/crwu/crwu-audit/scripts/audit_result.schema.json +8 -0
- package/skills/crwu/crwu-audit/scripts/test_audit_delivery.py +28 -0
- package/skills/crwu/crwu-audit/template/audit-report.html +3 -0
- package/skills/crwu/crwu-audit-public-general-standards/SKILL.md +2 -2
- package/skills/crwu/crwu-audit-public-general-standards/references/00-applicability.md +2 -2
- package/skills/crwu/crwu-audit-public-general-standards/references/01-kb-assembly.md +1 -1
- package/skills/crwu/crwu-audit-public-general-standards/references/03-execution-contract.md +3 -1
- package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/test_audit_skill_maintainer.py +21 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-crwu-workbench",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.41",
|
|
4
4
|
"description": "中瑞世联工作台 / CRWU audit workbench for DeepSeek Harness: pick a pending audit report, dispatch one AI audit subagent, watch and stop/restart it, auto-upload deliverables to Aliyun OSS.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -55,11 +55,15 @@ H0 的机制 owner 是 `references/00-input-and-route-profile.md`,隐藏区的
|
|
|
55
55
|
15. [13-dingtalk-result-publish.md](references/13-dingtalk-result-publish.md):步骤 14 已生成最终态监控 JSON 后读取;定义固定组织/团队空间/结果目录的精确解析、按审核年月建目录、带生成时间戳文件名、DWS 上传与写后验证契约。
|
|
56
56
|
16. [15-oss-result-publish.md](references/15-oss-result-publish.md):步骤 14 成对生成并校验最终 HTML/JSON 后、步骤 15 上传前读取;定义默认双文件 OSS 发布、受信目标、逐文件写后验证和非阻塞失败契约。
|
|
57
57
|
17. [14-orchestration-workflow.md](references/14-orchestration-workflow.md):**正式执行前必读**;router 运行时执行顺序与条件分支的唯一落点——脚本运行时(Python)、路由流程步骤 1–16、KB 兼容与运行时装配边界;交付、OSS 与钉钉细节分别以 11、15、13 为权威,本文件不复述它们的正文。
|
|
58
|
+
18. [16-local-audit.md](references/16-local-audit.md):**输入是本地文件**(提示词里带 `handoffId` 且写着「本地审核」)时读取;定义一次性交接的认领(`crwu_audit_local_claim`)、**不适用**而非缺失的处置、只在案例目录内的交付,以及 HTML 必须标记为「本地审核」并区分四种状态。
|
|
58
59
|
|
|
59
60
|
## 输入
|
|
60
61
|
|
|
61
|
-
接受材料包、`SeqNo`
|
|
62
|
+
接受材料包、`SeqNo`、`ObjectId` 或**本地审核交接**(`handoffId`)。
|
|
62
63
|
|
|
64
|
+
- **本地审核**(提示词里带 `handoffId` 且写着「本地审核」):先按 [16-local-audit.md](references/16-local-audit.md) 调用一次
|
|
65
|
+
`crwu_audit_local_claim` 取回本轮案例目录与材料清单;认领失败就停止并交回原文,
|
|
66
|
+
**不得**退化成自己在本机找文件。氚云记录/附件/复核件相关的步骤一律记「不适用」,不得写成"缺失"。
|
|
63
67
|
- `SeqNo` / `ObjectId` 只按 `01-report-id-resolution.md` 解析。`SeqNo` 必须精确查询;返回 0 条或多条时停止,不自行选择。
|
|
64
68
|
- 不得硬编码或猜测 `ObjectId`、schema code 或 schema。schema 必须来自现场可验证结果或已确认配置。
|
|
65
69
|
- 对记录型输入,router 只 fetch 一次完整报告记录,以同一快照构建画像并准备材料。H3Yun 项目附件与知识库规则/契约使用两条隔离的下载链,禁止混用。
|
|
@@ -495,7 +495,7 @@ AuditResult 是单一事实源。字段名推荐统一使用英文 camelCase,
|
|
|
495
495
|
|
|
496
496
|
| 对象 | 关键字段 | 约束 |
|
|
497
497
|
| --- | --- | --- |
|
|
498
|
-
| auditTask | projectId, reportVersion, auditTime, engineVersion, profile | projectId 和报告版本不得为空;profile 保留 routeProfile
|
|
498
|
+
| auditTask | projectId, reportVersion, auditTime, engineVersion, profile, mode? | projectId 和报告版本不得为空;profile 保留 routeProfile 摘要。`mode` 缺省即报告审核;写 `local` 时按 [16-local-audit.md](16-local-audit.md) 换标题、加顶部信息条(模式 · 生成时间 · 已审核 N/M 个文件,N/M 由渲染器从 `scope.inputs[].readable` 数出)并把阶段二写成不适用。 |
|
|
499
499
|
| phaseControl | phase1FrozenAt, phase1Digest, reviewAccessedAt, phase2CompletedAt | reviewAccessedAt 必须晚于 phase1FrozenAt。 |
|
|
500
500
|
| summary | overallDecision, narrative, counts | counts 必须与 issues 和 manualConfirmationItems 可重算一致。 |
|
|
501
501
|
| issues[] | issueId, title, decision, severity, issueType, ruleEvidence, materialEvidence, gapAnalysis, handlingRequirement, recommendedEdits | 规则性缺陷必须同时具备规则证据与材料证据。 |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# 16 · 本地审核(本机文件,一次性交接)
|
|
2
|
+
|
|
3
|
+
> 本文件只在**提示词里带 `handoffId` 且写着「本地审核」**时读取。
|
|
4
|
+
> 其余情况(材料包 / `SeqNo` / `ObjectId`)一律走 `01`–`15` 的报告审核路径,本文件不适用。
|
|
5
|
+
|
|
6
|
+
## 1. 它是什么
|
|
7
|
+
|
|
8
|
+
用户在本机选了若干文件/文件夹,Workbench 把它们复制进一个**案例目录**,生成一次性
|
|
9
|
+
`handoffId`,并(尽量)自动开一条新对话把固定提示词发过去。这条链路:
|
|
10
|
+
|
|
11
|
+
- **没有氚云记录、没有报告流水号、没有人工复核件**;
|
|
12
|
+
- **不上传、不回传**任何产物(OSS 发布与钉钉那两件都不做);
|
|
13
|
+
- 结果只存在于这次对话与那个案例目录(`<工作空间>/本地审核/<handoffId>/`)里。
|
|
14
|
+
|
|
15
|
+
## 2. 第一步:认领交接(唯一入口)
|
|
16
|
+
|
|
17
|
+
调一次模型可见的 Tool:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
crwu_audit_local_claim({ handoffId: "<提示词里的 handoffId>" })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
返回里 `caseDir` 就是**本轮案例目录**(绝对路径:`<工作空间>/本地审核/<handoffId>`,也是可写范围),`files[]` 是材料清单,
|
|
24
|
+
`skipped[]` 是没有进入审核范围的文件与原因。
|
|
25
|
+
|
|
26
|
+
- `ok:true` → 继续;之后所有案例内 Tool 的 `caseDir` 参数都用返回的这一个路径。
|
|
27
|
+
- `ok:false` → **立即停止**,把 `error` 原文交给用户。**不许**自己去本机目录找文件、
|
|
28
|
+
不许按文件名在别处搜索、不许"重新扫描"用户磁盘。过期/已用/快照不在时,正确处置是
|
|
29
|
+
让用户回 Workbench 重新准备。
|
|
30
|
+
|
|
31
|
+
## 3. 审核范围
|
|
32
|
+
|
|
33
|
+
- 材料只在 `<caseDir>/材料-源/` 之下;`<caseDir>/本地审核清单.json` 是这一轮的权威清单。
|
|
34
|
+
- **氚云相关的步骤一律记「不适用」**(不是"缺失"):记录快照、附件定向下载、复核件隔离、
|
|
35
|
+
隐藏区授权、复核对照与命中率,这七件在本地审核里都没有输入。写成 `scope.limitations[]`
|
|
36
|
+
与 `externalDataVerification.applicability.reason` 里的**不适用**,不要伪造成缺件。
|
|
37
|
+
- `skipped[]` 里的文件必须逐条进入「未审核」,并写明原因。
|
|
38
|
+
- 规则与知识库仍然照常:按其他 reference 走 `crwu_audit_knowledge_materialize` 实时下载,
|
|
39
|
+
结论必须落到条文(沿用 SKILL.md 的三条硬立场)。
|
|
40
|
+
|
|
41
|
+
## 4. 交付(只在案例目录里)
|
|
42
|
+
|
|
43
|
+
- 项目 ID 用 `handoffId`(形如 `la-<时间戳>-<随机段>`,本身就是安全的文件名)。
|
|
44
|
+
- 成对落盘:`审核结果.<项目ID>.json` 与 `审核意见.<项目ID>.html`,调用序列与校验口径
|
|
45
|
+
仍以 `11-html-delivery-spec.md` 为唯一权威(`validate` 先行,通过后 `render --json-out`)。
|
|
46
|
+
- **不许**调用 `crwu_audit_oss_publish` / `crwu_audit_dingtalk_archive` /
|
|
47
|
+
`crwu_audit_dingtalk_notify_self`:本地审核没有云端交付这一层。Host 侧对这三条**真的拒绝**
|
|
48
|
+
(返回 `policy` 失败并说明"本地审核的产物只留在本机案例目录里")——
|
|
49
|
+
看到这条失败是**设计如此**,不要去查配置、不要换目标、也不要改道手工上传。
|
|
50
|
+
- **必须标记为本地审核**:`auditTask.mode` 写 `"local"` —— 渲染器据此把标题换成
|
|
51
|
+
**「本地审核报告 - 项目ID」**、在首屏加一条 `本地文件审核 · 生成时间 · 已审核 N/M 个文件`
|
|
52
|
+
的信息条(N/M 由渲染器从 `scope.inputs` 的 `readable` 数出来,**不要自己写数字**),
|
|
53
|
+
并把阶段二说明写成「本地审核没有人工复核件,阶段二复核对照不适用」。
|
|
54
|
+
`auditTask.projectId` = `handoffId`(`la-…`,本身就是安全文件名);
|
|
55
|
+
`auditTask.profile.objectType` 与 `scenario` 写「本地文件审核」。
|
|
56
|
+
逐件可读性照常进 `scope.inputs[].readable`,跳过的文件进 `scope.notCheckedItems[]`。
|
|
57
|
+
|
|
58
|
+
### HTML 的读法顺序与四种状态(**复用既有 renderer,不另写模板**)
|
|
59
|
+
|
|
60
|
+
本地审核与报告审核**共用同一个渲染器**(`scripts/audit_delivery.py` + `template/audit-report.html`):
|
|
61
|
+
`auditTask.mode = "local"` 只换标题、加信息条、改阶段二措辞,其余版式一个字不改。
|
|
62
|
+
所以你要做的是把下面这些内容**放进既有区域**,而不是另建一套页面:
|
|
63
|
+
|
|
64
|
+
| 员工要看到的 | 落在哪里 |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| 审核范围 | `scope.inputs[]`(文件表:文件名 / 版本 / 可读)+ `summary.narrative` |
|
|
67
|
+
| 总体结论 | `summary.overallDecision` + `summary.narrative` + `summary.counts` |
|
|
68
|
+
| 项目画像 | `auditTask.profile.*`(对象类型 / 方法 / 场景 / 环节 + `routeProfile`) |
|
|
69
|
+
| 文件覆盖范围 | `scope.inputs[].readable`(已审核)与 `scope.notCheckedItems[]`(未审核) |
|
|
70
|
+
| 计算表分析 | 对应问题项的 `module` / `materialEvidence`(工作簿 + sheet + 单元格) |
|
|
71
|
+
| 问题清单 | `issues[]`(每条两段式描述 + 双证据链) |
|
|
72
|
+
| 未审核文件 | `scope.notCheckedItems[]`(一条一件,写原因与需要的动作) |
|
|
73
|
+
| 缺失与不可用字段 | `scope.limitations[]` + `externalDataVerification.applicability` |
|
|
74
|
+
|
|
75
|
+
四种状态必须**用图标 + 文字 + 颜色共同**表达,四类含义不许混:
|
|
76
|
+
|
|
77
|
+
| 状态 | 含义 | 落点 |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| 没有该数据 | 输入里根本没有这一项 | `scope.limitations[]`(写「输入未提供」) |
|
|
80
|
+
| 数据存在但处理失败 | 有材料,解析 / 重算 / 读图失败 | `scope.notCheckedItems[]`(`reasonCode=unreadable`) |
|
|
81
|
+
| 当前类型不适用 | 例如氚云复核对照 | `reviewComparison.status=not_performed` + 说明 |
|
|
82
|
+
| 文件没有被审核 | 在 `skipped[]` 里 | `scope.notCheckedItems[]`(写跳过原因) |
|
|
83
|
+
|
|
84
|
+
颜色只用渲染器既有 tokens(成功 / 警告 / 错误 / 中性)。**不许**用大面积红底,
|
|
85
|
+
也不许只靠颜色表达状态。
|
|
86
|
+
|
|
87
|
+
## 5. 对话里的汇报口径
|
|
88
|
+
|
|
89
|
+
开始时一句简短阶段说明(不假装有进度条):
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
本地审核已开始。
|
|
93
|
+
|
|
94
|
+
审核范围:12 个文件
|
|
95
|
+
计算表:3 个工作簿,8 个工作表
|
|
96
|
+
跳过:1 个文件
|
|
97
|
+
|
|
98
|
+
当前阶段:正在分析文件内容
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
结束时固定三段,并**在前面补一块交付件路径**:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
本次本地审核已完成。
|
|
105
|
+
|
|
106
|
+
交付件(完整路径,方便直接点开):
|
|
107
|
+
- <caseDir>/审核意见.<项目ID>.html
|
|
108
|
+
- <caseDir>/审核结果.<项目ID>.json
|
|
109
|
+
|
|
110
|
+
已审核:
|
|
111
|
+
- <文件名>
|
|
112
|
+
|
|
113
|
+
未审核:
|
|
114
|
+
- <文件名>:<原因>
|
|
115
|
+
|
|
116
|
+
画像缺失:
|
|
117
|
+
- <画像字段>:<为什么拿不到>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
- **交付件必须写完整路径**(`crwu_audit_local_claim` 返回的 `caseDir` 拼上文件名)。
|
|
121
|
+
只写文件名会让界面把链接按**这条会话的工作空间根**解析,指到一个不存在的路径 ——
|
|
122
|
+
点了什么都不发生(用户实测反馈)。也不要编 Markdown 假链接。
|
|
123
|
+
- 「画像缺失」只写**输入里确实没有**的字段;「未核」与「缺失」必须分开写。
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
| 最终 HTML/JSON 的 OSS 双文件发布、写后验证与失败收尾 | `15-oss-result-publish.md` |
|
|
26
26
|
| HTML 页面结构、左侧目录、CSS 与打印样式 | `template/audit-report.html` |
|
|
27
27
|
| 总体 workflow 与运行时执行顺序 | `14-orchestration-workflow.md` |
|
|
28
|
+
| **本地审核**(本机文件一次性交接:认领、不适用≠缺失、只在案例目录交付、HTML 的本地审核标识) | `16-local-audit.md` |
|
|
28
29
|
| 加载指针与输出门禁 | `SKILL.md` |
|
|
29
30
|
|
|
30
31
|
规则正文和检查点不属于本技能族的 owner;只允许按编号和知识库层级路径引用。**例外**:送达与交付层正文(CRWU 审核意见 HTML 送达规范 v1.4)为本技能内正式规范,owner 是 `11-html-delivery-spec.md`,不经知识库下载。
|
|
@@ -2389,11 +2389,25 @@ def render(result: dict, print_trail: bool = None) -> str:
|
|
|
2389
2389
|
review_items = comparison.get("reviewItems") or []
|
|
2390
2390
|
review_metrics = _review_metrics(review_items)
|
|
2391
2391
|
unresolved_claims = sum(item.get("inFileResolution") == "L-unclosed" for item in review_items)
|
|
2392
|
-
|
|
2392
|
+
# 本地审核(协议 28):`auditTask.mode == "local"` 时换标题、加信息条、把阶段二说成不适用。
|
|
2393
|
+
# 判据只认这个显式字段(不猜 objectType 里的字面量):标题与信息条是员工第一眼看到的东西,
|
|
2394
|
+
# 认错模式比不认更糟。
|
|
2395
|
+
is_local_audit = _text(audit_task.get("mode")) == "local"
|
|
2396
|
+
report_title = "{0} - {1}".format(
|
|
2397
|
+
"本地审核报告" if is_local_audit else "中瑞世联AI审核报告",
|
|
2398
|
+
audit_task.get("projectId"),
|
|
2399
|
+
)
|
|
2393
2400
|
|
|
2394
2401
|
# 01 AI 审核综合总结 + 紧凑项目信息
|
|
2395
2402
|
parts.append('<header id="project-info">')
|
|
2396
2403
|
parts.append("<h1>{0}</h1>".format(_text(report_title)))
|
|
2404
|
+
if is_local_audit:
|
|
2405
|
+
# 顶部信息条:模式 · 生成时间 · 已审核 N/M 个文件(N/M 直接从 scope.inputs 数出来,
|
|
2406
|
+
# 不让模型自己写一个可能与清单对不上的数字)。
|
|
2407
|
+
local_inputs = scope.get("inputs") or []
|
|
2408
|
+
local_readable = sum(1 for item in local_inputs if (item or {}).get("readable") is not False)
|
|
2409
|
+
parts.append('<p class="audit-mode">{0}</p>'.format(_text("本地文件审核 · {0} · 已审核 {1}/{2} 个文件".format(
|
|
2410
|
+
_dt(file_trace.get("generatedAt", "")), local_readable, len(local_inputs)))))
|
|
2397
2411
|
parts.append('<p class="project-line"><strong>{0}</strong><span>{1}</span><span>{2}</span><span>{3}</span></p>'.format(
|
|
2398
2412
|
_text(audit_task.get("projectId")), _text(audit_task.get("reportVersion")),
|
|
2399
2413
|
_text(((audit_task.get("profile") or {}).get("objectType"))), _text(_dt(audit_task.get("auditTime", "")))))
|
|
@@ -2403,7 +2417,9 @@ def render(result: dict, print_trail: bool = None) -> str:
|
|
|
2403
2417
|
"phase-note",
|
|
2404
2418
|
"阶段一独立审核已完成并冻结;阶段二复核对照不改变阶段一结论"
|
|
2405
2419
|
if comparison.get("status") == "performed"
|
|
2406
|
-
else "
|
|
2420
|
+
else ("阶段一独立审核已完成并冻结;本地审核没有人工复核件,阶段二复核对照不适用"
|
|
2421
|
+
if is_local_audit
|
|
2422
|
+
else "阶段一独立审核已完成并冻结;本次未执行阶段二复核对照"),
|
|
2407
2423
|
)
|
|
2408
2424
|
)
|
|
2409
2425
|
)
|
|
@@ -516,6 +516,34 @@ class AuditResultRenderTest(unittest.TestCase):
|
|
|
516
516
|
self.result = load_sample()
|
|
517
517
|
self.document = delivery.render(self.result)
|
|
518
518
|
|
|
519
|
+
def test_local_audit_mode_marks_title_and_counts_readable_inputs(self):
|
|
520
|
+
"""本地审核(协议 28):标题换成「本地审核报告」,顶部信息条给出 已审核 N/M 个文件。
|
|
521
|
+
|
|
522
|
+
N/M 由渲染器从 `scope.inputs` 数出来(readable 为 false 的不算已审核),
|
|
523
|
+
**不接受模型自己写一个可能与清单对不上的数字**。
|
|
524
|
+
"""
|
|
525
|
+
result = load_sample()
|
|
526
|
+
result["auditTask"]["mode"] = "local"
|
|
527
|
+
# 本地审核没有人工复核件 → 阶段二本来就不会执行。
|
|
528
|
+
result["reviewComparison"]["status"] = "not_performed"
|
|
529
|
+
result["scope"]["inputs"] = [
|
|
530
|
+
{"fileId": "f-1", "displayName": "资产清单.xlsx", "version": "1", "readable": True},
|
|
531
|
+
{"fileId": "f-2", "displayName": "估值计算表.xlsx", "version": "1", "readable": True},
|
|
532
|
+
{"fileId": "f-3", "displayName": "锁住的文件.xlsx", "version": "1", "readable": False},
|
|
533
|
+
]
|
|
534
|
+
document = delivery.render(result)
|
|
535
|
+
self.assertIn("本地审核报告", document)
|
|
536
|
+
self.assertIn('class="audit-mode"', document)
|
|
537
|
+
self.assertIn("已审核 2/3 个文件", document)
|
|
538
|
+
self.assertIn("本地审核没有人工复核件,阶段二复核对照不适用", document)
|
|
539
|
+
self.assertNotIn("中瑞世联AI审核报告", document)
|
|
540
|
+
|
|
541
|
+
def test_report_mode_keeps_the_report_title_and_has_no_mode_bar(self):
|
|
542
|
+
"""没写 mode(或写成 report)时一个字都不能变:报告审核的既有交付件形态不受影响。"""
|
|
543
|
+
document = delivery.render(load_sample())
|
|
544
|
+
self.assertIn("中瑞世联AI审核报告", document)
|
|
545
|
+
self.assertNotIn('class="audit-mode"', document)
|
|
546
|
+
|
|
519
547
|
def test_sections_in_required_order(self):
|
|
520
548
|
positions = []
|
|
521
549
|
for region in REGION_ORDER:
|
|
@@ -267,6 +267,9 @@
|
|
|
267
267
|
#project-info { margin: -34px -42px 0; padding: 34px 42px 28px; color: #eaf3f8; background: linear-gradient(135deg, var(--brand-strong), var(--brand) 60%, #247b87); border-radius: 12px 12px 0 0; }
|
|
268
268
|
#project-info .badge { margin-bottom: 0; color: #eff8fc; background: rgba(255,255,255,.12); border-color: rgba(255,255,255,.25); }
|
|
269
269
|
.project-line { display: flex; flex-wrap: wrap; gap: 8px 18px; margin: 8px 0 12px; }
|
|
270
|
+
/* 本地审核顶部信息条(协议 28):模式 · 生成时间 · 已审核 N/M 个文件。
|
|
271
|
+
与 .badge 同一层观感,但**不用颜色**表达任何状态 —— 它只是一行事实。 */
|
|
272
|
+
.audit-mode { margin: 6px 0 10px; font-size: 13px; color: #d9eaf3; letter-spacing: .01em; }
|
|
270
273
|
.project-line span { color: #d9eaf3; }
|
|
271
274
|
.project-details { margin: 12px 0 0; color: var(--ink); background: rgba(255,255,255,.96); }
|
|
272
275
|
#summary { padding: 22px; margin: 0 -2px 24px; background: #f7fbfd; border: 1px solid #d6e5ee; border-radius: 0 0 12px 12px; }
|
|
@@ -7,7 +7,7 @@ description: Use when crwu-audit has selected the public 通用准则 capability
|
|
|
7
7
|
|
|
8
8
|
## 调用边界
|
|
9
9
|
|
|
10
|
-
仅经 `crwu-audit` router 编排调用,禁止单独调用。本技能是 `public`
|
|
10
|
+
仅经 `crwu-audit` router 编排调用,禁止单独调用。本技能是 `public` 轴叶子,审核**报告形态无关的通用准则层**及已装配的报告与评估说明内部校对检查点:报告与披露要求、评估程序执行要求、机构质量控制要求。不查询报告记录、不准备材料、不重新下载规则,也不替代任何专业轴技能。
|
|
11
11
|
|
|
12
12
|
本能力的执行契约见 [执行契约](references/03-execution-contract.md):输入边界、执行顺序、条目状态、来源优先级、证据字段与 capability gap 均按该文件执行。本技能**只读取自己目录内的文件**,不读取任何 sibling Skill;资产/业务叶子共同约束里的轴边界、一级根装配与二级选择**对本能力不适用**。
|
|
13
13
|
|
|
@@ -40,7 +40,7 @@ description: Use when crwu-audit has selected the public 通用准则 capability
|
|
|
40
40
|
1. 用 `00-applicability.md` 界定本次适用范围;不改变 router 已确定的任何轴标签。
|
|
41
41
|
2. **先判规则版本**:程序准则与质控指南存在新旧两版且施行日期不同,按报告基准日/报告日所属期间选定整段引用版本,禁止新旧条款混引(判定规则见 `02-review-focus.md` §1)。版本无法确定时记录冲突并转人工判断,不任选一版。
|
|
42
42
|
3. 用本次 DWS manifest 验证 `01-kb-assembly.md` 所需文件;缺失项按路径和原因记录 gap,对应检查不引用、不编造。
|
|
43
|
-
4. 按 `02-review-focus.md`
|
|
43
|
+
4. 按 `02-review-focus.md` 分别审核报告、评估说明、测算明细表;报告披露层与程序质控层各自独立出条目状态。已装配的内部校对检查点按执行契约 §3 逐项检查,不以"未发现问题"笼统概括。
|
|
44
44
|
5. 索引卡类文件**不构成规则条目**,不得作为引用依据;模板参考类文件只做格式基线对照,判定以准则正文条款为准。
|
|
45
45
|
6. 输出通用准则层 findings;每条均带 `source_skills[]`,其中至少包含 `crwu-audit-public-general-standards`。相同事实由其他技能共同支持时保留全部来源,冲突时并列交人工复核。
|
|
46
46
|
7. 按本次 DWS 执行契约输出证据与修改建议;出处包含本次下载文件、实际行号、库内路径、本次运行返回的 `nodeId` 和 `exportedAt`(运行时值不写回本技能)。
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
|
|
13
13
|
| 层 | 覆盖内容 | 规则来源装配键 |
|
|
14
14
|
| --- | --- | --- |
|
|
15
|
-
| 报告披露层 |
|
|
15
|
+
| 报告披露层 | 报告结构要素、正文要素、声明、摘要、使用人、评估目的唯一性、对象与范围载明、价值类型、基准日一致性、评估依据、方法与理由、假设披露、结论表述、特别事项、使用限制、报告日、附件,以及已装配的报告与评估说明内部校对检查点 | `PUBLIC_REPORT_DISCLOSURE_ROOT` |
|
|
16
16
|
| 程序与质控层 | 评估程序各环节的执行与留痕要求、程序缺失处理、内部/分级审核、报备一致性、档案归集;机构层面质量控制体系、审核人员独立性、记录与档案、信息技术与 AI 使用边界 | `PUBLIC_PROCEDURE_QUALITY_ROOT` |
|
|
17
17
|
|
|
18
18
|
两层同时适用时**全部保留**,不因命中其一而省略另一层。
|
|
19
19
|
|
|
20
20
|
## 与专业轴的接口
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
本能力核对通用准则要求及已装配的报告与评估说明内部校对检查点,输出权限按执行契约 §3 区分,不代替专业判断:
|
|
23
23
|
|
|
24
24
|
- 报告是否载明评估方法及其理由 → 本能力检查**载明与披露完整性**;方法选取是否恰当 → method 轴;
|
|
25
25
|
- 报告是否载明程序受限情况及处理方式 → 本能力检查**说明义务**;受限对结论的影响程度是否成立 → 由对象/方法轴结合材料判断;
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
## 4. 不装配的内容
|
|
59
59
|
|
|
60
|
-
-
|
|
60
|
+
- 机构内部制度文本:机构制度体系对照不在本技能范围;不排除报告披露根内已装配的报告与评估说明内部校对检查点,其执行与输出权限见 `03-execution-contract.md` §3。目录递归新增清单时不新增路径键,也不把清单正文复制到 Skill。
|
|
61
61
|
- 方法与监管覆盖正文:属 method / overlay 轴;财务报告覆盖规则是按 `business_types[]=财务报告` 追加的业务补充包。它们均由 router 按命中标签动态装配,本技能只登记公共准则层与上表四项的寻址键。
|
|
62
62
|
- 表格勾稽口径:属 public 轴 `crwu-audit-datacheck`,与工程执行契约一并由其装配。
|
|
63
63
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
2. **先判规则版本**:新旧两版施行日期不同时,按报告基准日/报告日所属期间选定**整段**引用版本,
|
|
26
26
|
禁止新旧条款混引;版本无法确定时记录冲突并转人工判断,不任选一版;
|
|
27
27
|
3. 用本次 manifest 验证 `01-kb-assembly.md` 所需文件;缺失项按路径与原因记 gap,对应检查不引用、不编造;
|
|
28
|
-
4.
|
|
28
|
+
4. 报告披露层与程序质控层**各自独立**执行、各自独立出条目状态;已装配的内部校对检查点按 §3 执行,一层缺依据不影响另一层执行;
|
|
29
29
|
5. 按 `02-review-focus.md` 分别审核报告、评估说明、测算明细表,不以"未发现问题"笼统概括。
|
|
30
30
|
|
|
31
31
|
## 3 条目状态
|
|
@@ -55,6 +55,8 @@
|
|
|
55
55
|
- 索引卡类文件**不构成规则条目**,不得作为规则性缺陷的 `rule_source` 依据;模板参考类文件只做格式基线对照。
|
|
56
56
|
- 相同检查点稳定去重,但保留全部 `source_skills[]` 与 `rule_source`。
|
|
57
57
|
|
|
58
|
+
内部校对检查点:本次报告披露根正文中已启用的报告与评估说明校对 CHK 按上表逐项执行。不以待官方核验为由跳过内部校对;内部表单来源不需要升级为外部准则,`authority_class=internal_policy` 且 `enforcement_mode=internal_control` 的检查只输出内部质量控制意见。`formal_defect` 另须适用且已官方核验的正式外部依据及具体违反证据。原意、适用范围或材料不足以判定的项记录 `无法核验` 和原因,其余可确定检查继续执行。金额、公式及跨表勾稽交 `crwu-audit-datacheck`,机构制度体系对照仍在本能力范围之外。
|
|
59
|
+
|
|
58
60
|
## 4 来源优先级与冲突
|
|
59
61
|
|
|
60
62
|
1. 现行法律法规、执业准则和有效监管规则(硬约束);
|
|
@@ -2995,6 +2995,27 @@ class PublicAxisMappingTest(unittest.TestCase):
|
|
|
2995
2995
|
)
|
|
2996
2996
|
|
|
2997
2997
|
|
|
2998
|
+
@unittest.skipUnless(has_skill("crwu-audit-public-general-standards"), "public skill absent")
|
|
2999
|
+
class PublicProofreadingContractTest(unittest.TestCase):
|
|
3000
|
+
def test_internal_checks_are_executed_with_bounded_output_authority(self):
|
|
3001
|
+
root = skill_path("crwu-audit-public-general-standards")
|
|
3002
|
+
contract = (root / "references/03-execution-contract.md").read_text(encoding="utf-8")
|
|
3003
|
+
self.assertIn("内部校对检查点", contract)
|
|
3004
|
+
self.assertIn("internal_control", contract)
|
|
3005
|
+
self.assertIn("formal_defect", contract)
|
|
3006
|
+
self.assertIn("不以待官方核验为由跳过内部校对", contract)
|
|
3007
|
+
self.assertIn("逐项", contract)
|
|
3008
|
+
self.assertIn("无法核验", contract)
|
|
3009
|
+
|
|
3010
|
+
def test_institution_policy_exclusion_does_not_exclude_material_checks(self):
|
|
3011
|
+
root = skill_path("crwu-audit-public-general-standards")
|
|
3012
|
+
assembly = (root / "references/01-kb-assembly.md").read_text(encoding="utf-8")
|
|
3013
|
+
self.assertIn("机构制度体系对照", assembly)
|
|
3014
|
+
self.assertIn("不排除", assembly)
|
|
3015
|
+
self.assertIn("内部校对检查点", assembly)
|
|
3016
|
+
self.assertIn("06-规则库/02-通用准则-报告与披露/", assembly)
|
|
3017
|
+
|
|
3018
|
+
|
|
2998
3019
|
class SecondLevelIndexGateTest(unittest.TestCase):
|
|
2999
3020
|
"""CRWU-SKILL-OPT-003:知识库二级对象/子业务必须在父叶子里被**分维度**索引。
|
|
3000
3021
|
|