@weotro/dx 0.1.0 → 0.1.1
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/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# dx
|
|
1
|
+
# @weotro/dx
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@weotro/dx` 是一个可安装的 Node.js CLI,安装后提供 `dx` 命令,用于管理符合约定的 pnpm + Nx monorepo 项目的构建、启动、数据库和部署等流程。
|
|
4
4
|
|
|
5
5
|
本工具通过项目内的 `dx/config/*` 配置文件来驱动命令执行:你可以把它理解成「带环境变量分层 + 校验 + 命令编排能力的脚本系统」。
|
|
6
6
|
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
## 安装
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
包名是 `@weotro/dx`。必须全局安装,并始终使用最新版本:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
44
|
pnpm add -g @weotro/dx@latest
|
|
@@ -742,14 +742,12 @@ dx 只会执行你在 `dx/config/commands.json` 中配置的命令,不会在
|
|
|
742
742
|
- 项目布局包含 `apps/backend`、`apps/front`、`apps/admin-front`(如有差异,通过 `dx/config/commands.json` 适配)
|
|
743
743
|
- 版本注入脚本 `dx-with-version-env` 默认支持 app: `backend` / `front` / `admin`
|
|
744
744
|
|
|
745
|
-
## 发布到 npm
|
|
745
|
+
## 发布到 npm
|
|
746
746
|
|
|
747
|
-
|
|
747
|
+
本项目以公开 scope 包 `@weotro/dx` 发布。发布前确认 `package.json` 中的版本尚未存在于 npm,并保持 Git 工作区干净。
|
|
748
748
|
|
|
749
|
-
|
|
750
|
-
2. 发布前需要把 `package.json` 里的 `private: true` 去掉,并补全 `version` / `license` / `repository` 等字段。
|
|
751
|
-
3. 发布命令(公开包):
|
|
749
|
+
仓库提供的发布脚本会校验 token、版本、Git 工作区和 `private` 标志,并以 public access 发布:
|
|
752
750
|
|
|
753
751
|
```bash
|
|
754
|
-
|
|
752
|
+
./publish.sh --token "npm_xxx"
|
|
755
753
|
```
|
package/lib/logger.js
CHANGED
|
@@ -200,7 +200,7 @@ export class Logger {
|
|
|
200
200
|
const timestamp = this.formatTimestamp()
|
|
201
201
|
const logLine = `[${timestamp}] [${level.toUpperCase()}] ${safeMessage}\n`
|
|
202
202
|
|
|
203
|
-
const logFile = join(this.logDir, `
|
|
203
|
+
const logFile = join(this.logDir, `dx-${new Date().toISOString().split('T')[0]}.log`)
|
|
204
204
|
writeFileSync(logFile, logLine, { flag: 'a', encoding: 'utf8' })
|
|
205
205
|
} catch (error) {
|
|
206
206
|
// 写入日志失败时静默处理,避免影响主流程
|
package/package.json
CHANGED
|
@@ -37,9 +37,21 @@ description: 仅在用户显式调用 $ship-issue-pr 或明确要求使用 ship-
|
|
|
37
37
|
| Issue/PR 形状 | 必须产出“标准样本”级正文;空 PR body、泛泛模板、占位文字一律阻塞 |
|
|
38
38
|
| PR body | 必须使用本技能内置 PR 模板,不得只写“已通过本地测试” |
|
|
39
39
|
| 评论发布 | 审查、验收、修复、验证总结由主流程统一发布 |
|
|
40
|
+
| 独立审查 | 每轮代码审查和每个重大决策必须完成第三方对抗审查;无法完成时阻塞,不能静默跳过 |
|
|
40
41
|
| 合并 | 只能 `gh pr merge --squash --auto`,禁止 `--admin` 和无 `--auto` 合并 |
|
|
41
42
|
| 真完成 | 必须轮询到 `mergedAt` 非空,并回访关联 Issue 状态 |
|
|
42
43
|
|
|
44
|
+
## 第三方对抗审查
|
|
45
|
+
|
|
46
|
+
进入以下任一分支前,完整读取并执行 [third-party-review.md](references/third-party-review.md):
|
|
47
|
+
|
|
48
|
+
- **代码审查:**主流程先独立完成初审,再调用第三方审查同一 diff,核验并合并双方 findings 后才能发布报告或开始修复。
|
|
49
|
+
- **重大决策:**主流程先形成有证据的初步决策,再调用第三方专门反驳,最后记录采纳/拒绝理由并作出最终决策。
|
|
50
|
+
|
|
51
|
+
重大决策包括架构、API、数据、安全、兼容性、用户可见行为、范围边界、冲突语义,以及 `修复 / 拒绝 / follow-up` 等会改变交付结果的取舍。规则已经唯一确定的机械动作不属于重大决策。
|
|
52
|
+
|
|
53
|
+
第三方只能提供审查意见,不得代替主流程修改文件、提交、发布评论或合并。主流程对事实核验和最终结论负责。
|
|
54
|
+
|
|
43
55
|
## 快速流程
|
|
44
56
|
|
|
45
57
|
| 阶段 | 产物 |
|
|
@@ -50,7 +62,7 @@ description: 仅在用户显式调用 $ship-issue-pr 或明确要求使用 ship-
|
|
|
50
62
|
| Commit | Conventional Commit,正文末尾 `Refs: #<issue-id>` |
|
|
51
63
|
| 验证 | `dx lint`、目标构建、相关测试,记录关键输出 |
|
|
52
64
|
| PR | 标题 Conventional Commit,正文含本仓模板,`Closes: #<issue-id>` |
|
|
53
|
-
| 审查修复 | Issue
|
|
65
|
+
| 审查修复 | Issue 验收、验证流水线、主流程初审、第三方对抗审查、逐项修复并提交 |
|
|
54
66
|
| 合并 | 设置 auto-merge,等待真实 merged |
|
|
55
67
|
| 回访 | 确认 Issue 自动关闭;未完成则重开或拆 follow-up |
|
|
56
68
|
|
|
@@ -414,6 +426,13 @@ MSG
|
|
|
414
426
|
|
|
415
427
|
### 7.3 代码审查
|
|
416
428
|
|
|
429
|
+
本节是强制第三方审查门禁。每一轮都按以下顺序执行:
|
|
430
|
+
|
|
431
|
+
1. 主流程在不查看第三方结论的情况下完成初审,形成候选 findings,但暂不发布 PR 评论。
|
|
432
|
+
2. 按 [third-party-review.md](references/third-party-review.md) 的宿主路由调用独立 reviewer;提供 Issue、PR body、base/head、完整 diff、相关文件和验证结果,要求只读审查。
|
|
433
|
+
3. 主流程逐条核验双方 findings:合并重复项,删除无证据项,补充遗漏项;接受或拒绝第三方意见都要写明依据。
|
|
434
|
+
4. 只有对账完成后,才能发布本轮代码审查报告并进入修复。
|
|
435
|
+
|
|
417
436
|
审查范围:
|
|
418
437
|
|
|
419
438
|
- `gh pr diff <PR_NUMBER>` 的改动。
|
|
@@ -463,12 +482,12 @@ gh pr comment <PR_NUMBER> --body-file - <<'MSG'
|
|
|
463
482
|
|
|
464
483
|
| 严重级 | 来源 | 文件:行号 | 描述 | 建议改法 |
|
|
465
484
|
|---|---|---|---|---|
|
|
466
|
-
| Major |
|
|
485
|
+
| Major | 主流程 / 第三方 | path/file.ts:42 | 具体描述 | 具体改法 |
|
|
467
486
|
|
|
468
487
|
### 处理决策
|
|
469
488
|
|
|
470
489
|
- 每条问题标记:修复 / 拒绝 / follow-up
|
|
471
|
-
-
|
|
490
|
+
- 拒绝必须写具体理由;重大取舍必须记录第三方反驳与最终依据
|
|
472
491
|
MSG
|
|
473
492
|
```
|
|
474
493
|
|
|
@@ -657,6 +676,9 @@ Ship Issue PR 阻塞
|
|
|
657
676
|
| E2E 无参全量运行 | 指定文件或目录 |
|
|
658
677
|
| 验证失败说“历史遗留不管” | 修复或登记 follow-up Issue |
|
|
659
678
|
| 多个审查修复攒一个 commit | 每个问题一个 commit |
|
|
679
|
+
| 主流程独自完成代码审查 | 先完成初审,再按宿主路由调用第三方并对账 findings |
|
|
680
|
+
| 先问第三方再形成自己的判断 | 先写初步决策或初审结果,防止主流程被第三方结论锚定 |
|
|
681
|
+
| 第三方调用失败就跳过 | 按路由降级到 subagent;仍不可用则阻塞 |
|
|
660
682
|
| `gh pr merge --squash` 不带 `--auto` | 只允许 `--squash --auto` |
|
|
661
683
|
| 设置 auto-merge 后立即宣称完成 | 必须轮询到 `mergedAt` |
|
|
662
684
|
| 合并后不看 Issue | 必须回访 Issue 状态和验收覆盖 |
|
|
@@ -669,6 +691,8 @@ Ship Issue PR 阻塞
|
|
|
669
691
|
- “PR body 之后再补。”
|
|
670
692
|
- “CI 应该会过,先合并。”
|
|
671
693
|
- “历史遗留错误不是我引入的,跳过。”
|
|
694
|
+
- “我已经审过了,不需要第三方再看。”
|
|
695
|
+
- “先让第三方替我决定,我直接照做。”
|
|
672
696
|
- “GitHub 已显示 mergeable,不用逐条核对验收标准。”
|
|
673
697
|
- “auto-merge 已设置,所以算完成。”
|
|
674
698
|
- “先 `--admin` 合了再说。”
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# 第三方对抗审查
|
|
2
|
+
|
|
3
|
+
第三方审查用于打破主流程的自证闭环。它是强制质量门禁,不是把责任转交给另一个 agent。
|
|
4
|
+
|
|
5
|
+
## 宿主路由
|
|
6
|
+
|
|
7
|
+
先识别当前实际宿主和已暴露能力;根据系统身份与可调用工具判断,不根据仓库中的 `.codex`、`.claude` 目录猜测。
|
|
8
|
+
|
|
9
|
+
| 当前宿主 | 首选第三方 | 降级 |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Codex | 调用可用的 Claude Code 能力完成只读审查 | 无法调用、调用失败或超时后,派出一个 fresh-context reviewer subagent |
|
|
12
|
+
| Claude Code | 调用最匹配的可用 `codex:*` 技能;代码审查优先 `codex:code-review` | 没有适用的 `codex:*` 技能、调用失败或超时后,派出一个 fresh-context reviewer subagent |
|
|
13
|
+
| 其他宿主 | 使用可用的异构 reviewer | 没有异构 reviewer 时派出一个 fresh-context reviewer subagent |
|
|
14
|
+
|
|
15
|
+
“可用”表示能力已在当前会话暴露且能直接调用;不要要求用户临时安装或配置第三方。首选调用失败一次即可降级,不要反复重试。第三方和 fallback subagent 都不得继续递归委派。
|
|
16
|
+
|
|
17
|
+
若第三方与 subagent 均不可用,报告阻塞。没有独立审查结果时,不得发布最终代码审查、落定重大决策或继续合并。
|
|
18
|
+
|
|
19
|
+
## 输入边界
|
|
20
|
+
|
|
21
|
+
- 传递 repo root、base/head、Issue/PR、原始 diff、相关源码、验证输出和必要约束。
|
|
22
|
+
- 对重大决策,同时传递主流程的初步决策、备选方案、证据、假设和已知风险,并明确要求 reviewer 反驳。
|
|
23
|
+
- 提供原始材料,不提供期望结论,不暗示 reviewer 应该赞同。
|
|
24
|
+
- 删除 token、密码、私钥、真实环境变量和无关个人数据。外部 reviewer 不需要的机密不得发送。
|
|
25
|
+
- 要求只读:不改文件、不执行 Git/GitHub 写操作、不发布评论、不提交、不推送、不合并。
|
|
26
|
+
|
|
27
|
+
## 代码审查协议
|
|
28
|
+
|
|
29
|
+
主流程先独立完成初审,再调用第三方。第三方必须检查:
|
|
30
|
+
|
|
31
|
+
- correctness、回归、边界条件、错误路径和安全风险;
|
|
32
|
+
- Issue 验收标准与 PR 实际 diff 是否一致;
|
|
33
|
+
- 测试是否真正覆盖行为,验证证据是否足够;
|
|
34
|
+
- 兼容性、性能、并发、数据迁移和运维风险(按改动适用);
|
|
35
|
+
- 主流程初审可能遗漏或错误判断的地方。
|
|
36
|
+
|
|
37
|
+
要求每条 finding 包含:严重级、文件与稳定符号(行号仅作导航)、可复现或可推导的证据、影响、最小安全修复。无 finding 时也要说明检查范围和剩余风险。
|
|
38
|
+
|
|
39
|
+
主流程对账时逐条标记:`接受`、`合并重复`、`拒绝`。拒绝必须基于代码、测试、Issue 范围或仓库约定,不能只写“不同意”。最终 PR 评论由主流程统一发布,并标明 finding 来源为主流程或第三方。
|
|
40
|
+
|
|
41
|
+
## 重大决策协议
|
|
42
|
+
|
|
43
|
+
以下顺序不可颠倒:
|
|
44
|
+
|
|
45
|
+
1. **初步决策:**主流程写明问题、约束、证据、备选方案、首选方案、最大风险和可逆性。
|
|
46
|
+
2. **对抗审查:**第三方寻找反例、隐藏假设、遗漏方案、兼容性破坏、失败模式和更简单路径,并指出需要补证的部分。
|
|
47
|
+
3. **最终决策:**主流程核验审查意见,记录每项采纳或拒绝理由,再确定方案;第三方意见是证据,不是命令。
|
|
48
|
+
|
|
49
|
+
最终决策至少记录:`初步选择`、`第三方挑战`、`采纳/拒绝`、`最终选择`、`剩余风险`。若第三方指出的关键事实无法核验,决策保持阻塞,不要靠猜测继续。
|
|
50
|
+
|
|
51
|
+
## Reviewer 提示词骨架
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
你是独立、只读的对抗 reviewer。不要修改文件,不要执行任何 Git/GitHub 写操作,也不要委派其他 agent。
|
|
55
|
+
|
|
56
|
+
任务类型:代码审查 / 重大决策审查
|
|
57
|
+
仓库:<repo-root>
|
|
58
|
+
原始材料:<issue-pr-diff-files-validation-or-decision-artifact>
|
|
59
|
+
|
|
60
|
+
目标:主动寻找主流程遗漏、错误假设、反例、回归与更简单方案。不要为了形成意见而制造问题,也不要默认赞同主流程。
|
|
61
|
+
|
|
62
|
+
输出:
|
|
63
|
+
- 代码审查:按严重级列 findings;每条包含稳定位置、证据、影响和最小修复。若无 finding,列检查范围与剩余风险。
|
|
64
|
+
- 决策审查:列最强反对理由、隐藏假设、替代方案、需要补充的证据,以及是否建议维持初步选择。
|
|
65
|
+
```
|