@hcmai/cli 0.3.8 → 0.3.10
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.
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hcm-delivery-gate0
|
|
3
|
+
title: 成稿闸:技能里不许钉环境取值
|
|
4
|
+
description: 写交付技能的最后一道自查。字段名、中文标签、枚举值、模型名、码值、业务键、口径——这七类换个客户就全错,在写下的当时就该判,不必等到下一个现场。
|
|
5
|
+
category: cli-operations
|
|
6
|
+
stages:
|
|
7
|
+
- baseline
|
|
8
|
+
actionSurface: cli
|
|
9
|
+
requires:
|
|
10
|
+
- hcm-delivery-doctor
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 成稿闸:技能里不许钉环境取值
|
|
14
|
+
|
|
15
|
+
一份交付技能里钉着上一个租户的字段名,这件事**在写下的当时**就已经成立,
|
|
16
|
+
却要等到下一个现场才暴露。门 0 把判定挪到成稿期:判据是那份基线本身,**不连任何环境**。
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
hcm delivery gate0 --skills <技能目录> --recon <基线产物目录> --mapping <映射工件> --output table
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`--recon` 指的是**产物目录本身**(`hcm delivery recon` 打出来的那一层,与
|
|
23
|
+
`hcm delivery recon round --dir` 收的是同一个),不是它的上级。
|
|
24
|
+
|
|
25
|
+
## 退出码三档,不许合并
|
|
26
|
+
|
|
27
|
+
| rc | 含义 | 下一步 |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `0` | 扫过,没判红 | 看一眼 `[gaps]` 段(见下),再发 |
|
|
30
|
+
| `1` | 判红了 | 逐条改稿。判词点名了通道和 token |
|
|
31
|
+
| `2` | **前提不成立** | 先修前提。这一轮的绿**不算数** |
|
|
32
|
+
|
|
33
|
+
🔴 **`2` 压过 `1`**:前提不成立时,那份判红清单本身不可信。
|
|
34
|
+
但清单**照打** —— rc 是给脚本的闸,清单是给人的依据。
|
|
35
|
+
|
|
36
|
+
## 三件容易误判的事
|
|
37
|
+
|
|
38
|
+
**不带 `--mapping` 就报 rc=2,是预期不是出错。** `naturalKey` 那一类没有来源
|
|
39
|
+
⇒ 它此刻**没人守**,而门 0 不肯把「没查」说成「查过且干净」。
|
|
40
|
+
手上确实有映射工件时把它加回来,那一类才真被守住。
|
|
41
|
+
|
|
42
|
+
**`rc=0` 不等于干净。** 这道闸有两个自己声明的缺口,落进去的逐条印在 `[gaps]` 段里、
|
|
43
|
+
**不顶 rc**:
|
|
44
|
+
|
|
45
|
+
- **纯数字 / 单字符的取值** —— 码表里的排序号、只有一个汉字的枚举值都算,**不分中英**。
|
|
46
|
+
它们本来就该判红;放行只为不把一份中文文档淹成红海。
|
|
47
|
+
- **汉字打头或结尾的取值,紧挨着的还是汉字** —— 中文没有分词边界,说不准。
|
|
48
|
+
⚠️ 反过来**不成立**:两侧不是汉字时(字母、数字、标点、空白都算)它**照常判红**。
|
|
49
|
+
|
|
50
|
+
⇒ ASCII 那一半也不是自动干净的(第一个缺口对它同样成立)。跑完把 `[gaps]` 段逐条读过再发。
|
|
51
|
+
|
|
52
|
+
**基线不是一轮完整跑出来的,也是 rc=2。** A 类事实是从这份基线**现算**的;
|
|
53
|
+
基线混着不同轮次,「判红 0 条」对哪一轮都不算数。先跑
|
|
54
|
+
`hcm delivery recon round` 看是哪几份,或回到连得上的地方重跑一次 `hcm delivery recon`。
|
|
55
|
+
|
|
56
|
+
## 扫描面
|
|
57
|
+
|
|
58
|
+
正文与 `references/` 全目录逐 token 扫,**点目录照扫**(`grep -r` 进不去的那种)。
|
|
59
|
+
**软链目录不跟随**:发现即点名那条链、按前提不成立退 rc=2(指向文件的软链照旧扫)。
|
|
60
|
+
|
|
61
|
+
## 判红分五条通道
|
|
62
|
+
|
|
63
|
+
| 通道 | 判什么 | 有没有豁免 |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `aclass` | 七类环境事实:字段名 / 中文标签 / 枚举值 / 模型名 / 码值 / 业务键 / 口径 | **没有** |
|
|
66
|
+
| `protocol-unregistered` | 像端点 / wire 形态,但不在登记册里 | 登记过就豁免 |
|
|
67
|
+
| `registered-but-is-aclass` | 登记册里那条自己也是环境事实 | 没有 —— 登记买不到「它不是环境事实」 |
|
|
68
|
+
| `no-probe` | 条目登记被拒(没进登记册、也没上账本) | 没有 |
|
|
69
|
+
| `artifact-path` | 产物路径 | **没有** |
|
|
70
|
+
|
|
71
|
+
🔴 **协议事实登记册是编译进包的常量,现场登记不了新条目** —— 登记要附一条真跑的探针,
|
|
72
|
+
而探针不随包走。命中 `protocol-unregistered` 时正确的动作是**把那个形态从正文里拿掉**
|
|
73
|
+
(换成「按 `hcm describe <模型>` 现查」这类说法),不是想办法把它登记进去。
|
|
74
|
+
|
|
75
|
+
## 什么时候跑
|
|
76
|
+
|
|
77
|
+
**每次改完技能正文,发之前。** 它零网络、亚秒级,没有理由攒到最后。
|
|
78
|
+
基线换了一轮就重跑一次 —— 上一轮的 rc=0 盖不住这一轮的取值。
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hcm-delivery-triage
|
|
3
|
+
title: 需求分诊:判「产品做不到」之前,六条路先走完
|
|
4
|
+
description: 客户提一条需求,先穷举六类承载物——配置面 / 弹性模型 / JSON Model / GraalJS SPI / 弹性字段 / DataPackage。六格由命令现探现填,你跳不了步;结论与证据由你给,它只判两者打不打架。
|
|
5
|
+
category: cli-operations
|
|
6
|
+
stages:
|
|
7
|
+
- baseline
|
|
8
|
+
actionSurface: cli
|
|
9
|
+
requires:
|
|
10
|
+
- hcm-delivery-doctor
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 需求分诊:判「产品做不到」之前,六条路先走完
|
|
14
|
+
|
|
15
|
+
分诊最贵的失误是:看一眼觉得产品做不到,直接判「产品缺口」,六条承载路径**一条都没查**。
|
|
16
|
+
这条命令把穷举那一步机械化。
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
hcm delivery triage --requests <需求清单.json> --recon <基线产物目录> --out <产物根>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 分工:机器干穷举,你干判断
|
|
23
|
+
|
|
24
|
+
| 谁 | 干什么 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| 命令 | 六格**现探现填** —— 你在 `--requests` 里手写的 `cells` 一律不认 |
|
|
27
|
+
| 你 | 给 `verdict`(REUSE / CONFIG / EXTEND / GAP)与 `evidence` |
|
|
28
|
+
| 命令 | 只判**结论与证据打不打架**,不判结论对不对 |
|
|
29
|
+
|
|
30
|
+
「结论对不对」无法机械验证,「有没有跳步」可以。这条命令只做后者。
|
|
31
|
+
|
|
32
|
+
## `--requests` 的形状
|
|
33
|
+
|
|
34
|
+
一个 JSON 数组,每条:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"request": "客户原话",
|
|
39
|
+
"verdict": "REUSE | CONFIG | EXTEND | GAP",
|
|
40
|
+
"evidence": "凭什么这么判",
|
|
41
|
+
"debtAction": "缺哪个 Action(判 GAP 时)",
|
|
42
|
+
"blindAcknowledged": true
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
🔴 **`cells` 不要写** —— 写了也会被覆盖。那是跳步唯一的入口,所以它被堵死了。
|
|
47
|
+
|
|
48
|
+
## 六格与四档判词
|
|
49
|
+
|
|
50
|
+
| 承载物 | 判据来自 |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `config-surface` | 基线里的模型元数据面 |
|
|
53
|
+
| `flex-model` | 基线里 `type=DYNAMIC` 的模型 |
|
|
54
|
+
| `json-model` | 三个写能力**全部**不允许(不看 `type` 字段 —— 产品的 ModelType 里根本没有 JSON 这一档) |
|
|
55
|
+
| `graaljs-spi` | `/api/tenant-extension/workspaces`(**六格里唯一要联网的一格**) |
|
|
56
|
+
| `flex-data` | 基线字段索引里 `isFlex` 的字段 |
|
|
57
|
+
| `data-package` | 🔴 **恒盲区**,且一次请求都不发 |
|
|
58
|
+
|
|
59
|
+
四档判词,`blind` 与 `miss` **必须分开**:
|
|
60
|
+
|
|
61
|
+
- `hit` —— 看见了,这条路走得通
|
|
62
|
+
- `miss` —— 看了,这条路没有
|
|
63
|
+
- `blind` —— **这条路在 HTTP 面上看不见**,不是「没有」
|
|
64
|
+
- `unavailable` —— 本该看得见,这次没取到(带原始错误 + 下一步)
|
|
65
|
+
|
|
66
|
+
🔴 **`data-package` 永远是 `blind`**:它在 HTTP 面上没有发现入口。把它渲染成「没有」,
|
|
67
|
+
顾问就会漏掉一整条实施路径。要落地它得走产品团队。
|
|
68
|
+
|
|
69
|
+
## 四条自洽规则
|
|
70
|
+
|
|
71
|
+
| 规则 | 什么时候拦你 |
|
|
72
|
+
|---|---|
|
|
73
|
+
| R1 | 四段(客户原话 / 六格 / 结论 / 证据)缺一段,或六格任一没结论 |
|
|
74
|
+
| R2 | 判了 GAP,但六格里有命中 —— 有路走通还判缺口 |
|
|
75
|
+
| R3 | 判了 CONFIG,但六格里零命中 —— 说得出配在哪,这个结论才立得住 |
|
|
76
|
+
| R4 | 判了 GAP、有盲区,却没有 `blindAcknowledged` |
|
|
77
|
+
|
|
78
|
+
🔴 **R4 会拦下你写的每一条 GAP**,因为 `data-package` 恒盲区。这是刻意的:
|
|
79
|
+
判「产品做不到」之前,必须先承认「有一条路我根本没看见」。盲区是「没看见」,不是「没有」。
|
|
80
|
+
|
|
81
|
+
## 退出码与落盘
|
|
82
|
+
|
|
83
|
+
| rc | 含义 |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `0` | 自洽,`work/triage.md` 已写出 |
|
|
86
|
+
| `1` | 打架,或前提不成立(`--requests` 没给 / 读不出来 / 不是数组) |
|
|
87
|
+
|
|
88
|
+
🔴 **打架时不落盘。** 一份自相矛盾的分诊产物比没有更坏 —— 下游会把它当成走完全程的那份读,
|
|
89
|
+
而它自己说不出自己是半截的。屏上会**逐条**印出是第几条、哪条规则、为什么。
|
|
90
|
+
|
|
91
|
+
## GAP 会自动进产品的债务清单
|
|
92
|
+
|
|
93
|
+
判 GAP 时产出物里落一行 `# DEBT: 缺 XxxAction`(ADR-303 §7 的格式,逐字)。
|
|
94
|
+
说不出缺哪个 Action 也照样落一行 —— 否则这条 GAP 就从清单里消失了。
|
|
95
|
+
|
|
96
|
+
## 什么时候跑
|
|
97
|
+
|
|
98
|
+
**客户提完需求、你准备回话之前。** 先跑一次 `hcm delivery recon` 拿基线,再跑这条。
|
|
99
|
+
`--recon` 指的是**产物目录本身**(`hcm delivery recon` 打出来的那一层),不是它的上级;
|
|
100
|
+
不给它时命令会按爬取身份现算一份,但那要多打一发请求。
|
package/dist/skills/llms.txt
CHANGED
|
@@ -9,3 +9,5 @@
|
|
|
9
9
|
## 清单
|
|
10
10
|
|
|
11
11
|
- `hcm-delivery-doctor` — 到客户现场敲的第一条命令:连不上 / 身份不对 / 没权限 / 站错层,四件事分开问。 → `hcm-delivery-doctor/SKILL.md`
|
|
12
|
+
- `hcm-delivery-gate0` — 写交付技能的成稿闸:七类环境事实 / 未登记的协议形态 / 产物路径,在写下的当时就判掉。 → `hcm-delivery-gate0/SKILL.md`
|
|
13
|
+
- `hcm-delivery-triage` — 需求分诊:判「产品做不到」之前,六条承载路径先走完;机器穷举,你判断。 → `hcm-delivery-triage/SKILL.md`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"cliVersion": "0.3.
|
|
3
|
+
"cliVersion": "0.3.10",
|
|
4
4
|
"commands": [
|
|
5
5
|
{
|
|
6
6
|
"path": "action",
|
|
@@ -195,6 +195,15 @@
|
|
|
195
195
|
"--dir"
|
|
196
196
|
]
|
|
197
197
|
},
|
|
198
|
+
{
|
|
199
|
+
"path": "delivery triage",
|
|
200
|
+
"options": [
|
|
201
|
+
"--capabilities",
|
|
202
|
+
"--out",
|
|
203
|
+
"--recon",
|
|
204
|
+
"--requests"
|
|
205
|
+
]
|
|
206
|
+
},
|
|
198
207
|
{
|
|
199
208
|
"path": "describe",
|
|
200
209
|
"options": [
|
|
@@ -714,6 +723,48 @@
|
|
|
714
723
|
"sha256": "6339629ad101b6391b657985f92b2e27f28d5df0b06669aa9e83dd56b42bcc3c"
|
|
715
724
|
}
|
|
716
725
|
]
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"id": "hcm-delivery-gate0",
|
|
729
|
+
"title": "成稿闸:技能里不许钉环境取值",
|
|
730
|
+
"description": "写交付技能的最后一道自查。字段名、中文标签、枚举值、模型名、码值、业务键、口径——这七类换个客户就全错,在写下的当时就该判,不必等到下一个现场。",
|
|
731
|
+
"category": "cli-operations",
|
|
732
|
+
"stages": [
|
|
733
|
+
"baseline"
|
|
734
|
+
],
|
|
735
|
+
"actionSurface": "cli",
|
|
736
|
+
"requires": [
|
|
737
|
+
"hcm-delivery-doctor"
|
|
738
|
+
],
|
|
739
|
+
"bytes": 4118,
|
|
740
|
+
"files": [
|
|
741
|
+
{
|
|
742
|
+
"path": "SKILL.md",
|
|
743
|
+
"bytes": 4118,
|
|
744
|
+
"sha256": "7d5f4e99ea951ad401d8a8dab8d85770d0d18ac28fddcd5f2bde124edd0879c1"
|
|
745
|
+
}
|
|
746
|
+
]
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
"id": "hcm-delivery-triage",
|
|
750
|
+
"title": "需求分诊:判「产品做不到」之前,六条路先走完",
|
|
751
|
+
"description": "客户提一条需求,先穷举六类承载物——配置面 / 弹性模型 / JSON Model / GraalJS SPI / 弹性字段 / DataPackage。六格由命令现探现填,你跳不了步;结论与证据由你给,它只判两者打不打架。",
|
|
752
|
+
"category": "cli-operations",
|
|
753
|
+
"stages": [
|
|
754
|
+
"baseline"
|
|
755
|
+
],
|
|
756
|
+
"actionSurface": "cli",
|
|
757
|
+
"requires": [
|
|
758
|
+
"hcm-delivery-doctor"
|
|
759
|
+
],
|
|
760
|
+
"bytes": 4294,
|
|
761
|
+
"files": [
|
|
762
|
+
{
|
|
763
|
+
"path": "SKILL.md",
|
|
764
|
+
"bytes": 4294,
|
|
765
|
+
"sha256": "7a71d7917d73343d9c130f1d9248231c36c3abb3ebc342c3d3afe5abb9098b1a"
|
|
766
|
+
}
|
|
767
|
+
]
|
|
717
768
|
}
|
|
718
769
|
]
|
|
719
770
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hcmai/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.10",
|
|
4
4
|
"description": "Official HCM Next CLI for business APIs, tenant delivery, workspaces, and AI agents.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"test": "vitest run"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@hcmai/sdk": "0.3.
|
|
40
|
+
"@hcmai/sdk": "0.3.10",
|
|
41
41
|
"axios": "^1.6.0",
|
|
42
42
|
"commander": "^12.0.0",
|
|
43
43
|
"ink": "^7.0.5",
|