|
49 | 49 | - **THEN** help 中不包含 `--body` |
50 | 50 | - **且** help 中保留 `--alias` |
51 | 51 |
|
| 52 | +### Requirement: metric create help 提供可复制的使用示例 |
| 53 | + |
| 54 | +`cz-cli analytics-agent metric create --help` MUST 提供至少一个可直接复制的完整示例,帮助用户推断 `--table-name` 全限定格式与 `--expression` 聚合写法,降低首次调用的重试率。示例 MUST 引导用户用虚拟列封装字符串条件,而非在 `--expression` 中直接写字符串字面量(后端 SQL 校验层拒绝字符串字面量)。 |
| 55 | + |
| 56 | +#### Scenario: create help 展示全限定表名与聚合示例 |
| 57 | + |
| 58 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric create --help` |
| 59 | +- **THEN** help 输出包含 `Examples:` 段 |
| 60 | +- **且** 示例中包含全限定表名格式提示 `catalog.schema.table` |
| 61 | +- **且** 示例引导用虚拟列(如 `win_flag`)封装条件,而非 SQL 字符串字面量 |
| 62 | + |
| 63 | +### Requirement: metric 命令组帮助说明与 answer-builder 的关系 |
| 64 | + |
| 65 | +`cz-cli analytics-agent metric --help` MUST 在 epilogue 中说明 metric 是 simple_metric(单表单聚合),多步/多表分析应使用 `answer-builder`(complex_metric),且两者都计入 `domain detail` 的 targetCounts,避免用户混淆两个命令组的定位。 |
| 66 | + |
| 67 | +#### Scenario: metric 组帮助解释 simple/complex metric 关系 |
| 68 | + |
| 69 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric`(缺子命令,渲染组帮助) |
| 70 | +- **THEN** 帮助输出包含 `simple_metric` |
| 71 | +- **且** 帮助输出提示改用 `answer-builder` |
| 72 | +- **且** 帮助输出提到 `targetCounts` |
| 73 | + |
| 74 | +### Requirement: metric enable/disable 支持按 domain 批量操作 |
| 75 | + |
| 76 | +`cz-cli analytics-agent metric enable` 与 `disable` MUST 同时支持单条模式(positional `metric-id`)与批量模式(`--all --domain-id <id>`)。两种模式互斥且至少提供其一。批量模式 MUST 先列出该 domain 下的 metric,跳过已处于目标状态的项,对其余逐个调用单条 enable/disable,并汇总 `total`、`succeeded`、`failed`、`skipped` 与逐项 `results`。批量列表 MUST 翻页覆盖 domain 下的全部 metric,不得只处理服务端默认第一页。批量 disable MUST 复用单条 disable 的 detail+update 回退逻辑。 |
| 77 | + |
| 78 | +#### Scenario: 批量 enable 跳过已启用项并启用其余 |
| 79 | + |
| 80 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric enable --all --domain-id 27` |
| 81 | +- **AND** 该 domain 下有 3 个 metric,其中 1 个已是 `ENABLE` |
| 82 | +- **THEN** CLI 先调用 metric list |
| 83 | +- **且** 对已 `ENABLE` 的项标记为 `skipped`,不再调用 enable |
| 84 | +- **且** 对其余 2 项调用 `/metrics/enable` |
| 85 | +- **且** 输出包含 `total=3`、`succeeded=2`、`skipped=1`、`failed=0` |
| 86 | + |
| 87 | +#### Scenario: 批量操作翻页覆盖首页之外的项 |
| 88 | + |
| 89 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric enable --all --domain-id 27` |
| 90 | +- **AND** 该 domain 下的 metric 数量超过服务端单页默认条数 |
| 91 | +- **THEN** CLI MUST 按页请求 metric list 直到取回全部项 |
| 92 | +- **且** 汇总的 `total` 等于 domain 下 metric 的真实总数,而非单页条数 |
| 93 | + |
| 94 | +#### Scenario: 批量操作部分失败时返回非零退出码 |
| 95 | + |
| 96 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric enable --all --domain-id 27` |
| 97 | +- **AND** 其中一项调用 enable 时后端返回业务错误 |
| 98 | +- **THEN** CLI 继续处理其余项,不中断 |
| 99 | +- **且** 输出中该项 `result=failed` 并带 `error` |
| 100 | +- **且** 命令退出码为非零 |
| 101 | + |
| 102 | +#### Scenario: 同时传 id 与 --all 时本地拒绝 |
| 103 | + |
| 104 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric enable 197 --all` |
| 105 | +- **THEN** CLI MUST 在发请求前直接返回 `USAGE_ERROR` |
| 106 | +- **且** 错误信息 MUST 说明二者互斥 |
| 107 | + |
| 108 | +#### Scenario: --all 缺少 --domain-id 时本地拒绝 |
| 109 | + |
| 110 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric enable --all` |
| 111 | +- **THEN** CLI MUST 在发请求前直接返回 `USAGE_ERROR` |
| 112 | +- **且** 错误信息 MUST 提示需要 `--domain-id` |
| 113 | + |
| 114 | +#### Scenario: 既无 id 也无 --all 时本地拒绝 |
| 115 | + |
| 116 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric enable` |
| 117 | +- **THEN** CLI MUST 在发请求前直接返回 `USAGE_ERROR` |
| 118 | + |
52 | 119 | ### Requirement: metric disable 兼容旧状态接口异常并回退到 detail + update |
53 | 120 |
|
54 | 121 | 当服务端直接 `disable` 路径返回“对象不存在”这类旧兼容异常时,`cz-cli analytics-agent metric disable` MUST 优先尝试读取 detail,再用完整 update 请求把 `status` 改为 `DISABLE`,避免用户因为旧状态路由异常而无法禁用 metric。 |
|
61 | 128 | - **且** 再调用 `metric update` |
62 | 129 | - **且** update 请求体包含 detail 中的核心字段与 `status=DISABLE` |
63 | 130 | - **且** 最终命令返回成功 |
| 131 | + |
| 132 | +#### Scenario: disable 遇到非 not-found 的后端错误时如实上报 |
| 133 | + |
| 134 | +- **WHEN** 用户执行 `cz-cli analytics-agent metric disable 184` |
| 135 | +- **AND** 后端返回非 not-found 业务错误(例如 `CZD-99999` 约束违反) |
| 136 | +- **THEN** CLI MUST NOT 触发 detail+update 回退(回退仅针对 not-found 类异常) |
| 137 | +- **且** CLI 如实上报该后端错误码与信息 |
| 138 | +- **且** 命令退出码为非零 |
| 139 | +- **且** metric 本地状态保持不变(不产生部分写入) |
| 140 | + |
| 141 | +> 已知后端限制:在部分环境,metric disable 会触发后端 `CZD-99999`(`common_reference_relationship.source_id` 非空约束违反),单条与批量 disable 均会命中。此为后端缺陷,CLI 侧仅保证如实透传错误、退出码非零、不改本地状态。 |
0 commit comments