@elvis1513/auto-coding-skill 1.0.1 → 1.0.2

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
@@ -35,7 +35,7 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
35
35
  - Synced reusable workflow improvements from a production project back into this skill.
36
36
  - Moved repo-side helper entrypoint to `docs/tools/autopipeline`.
37
37
  - Tightened regression matrix rules: rows start as `TODO`, and `PASS` requires real execution evidence.
38
- - Added Jenkins API verification flow with credentials sourced from `docs/ENGINEERING.md` or environment variables.
38
+ - Added Jenkins API verification flow with credentials sourced from `docs/ENGINEERING.md`.
39
39
 
40
40
  ## Optimized Standard Flow
41
41
 
@@ -53,12 +53,11 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
53
53
  3. 开发实现
54
54
  - 只修改本次任务必要文件,不做无关重构。
55
55
  4. 本地轻量校验
56
- - build
57
- - 单元测试或关键快速测试
58
- - lint / typecheck
59
- - API 文档检查
60
- - Jenkinsfile / 脚本语法检查
56
+ - 优先执行一个项目自定义快速门禁命令
57
+ - 若未配置,再执行 quick test / test / build 中最先配置的一项
61
58
  - `git diff --check`
59
+ - API 文档检查
60
+ - Jenkins 配置检查
62
61
  5. 立即提交推送
63
62
  - 本地轻量校验通过后,commit + push,触发 Jenkins。
64
63
  6. Jenkins 验证
@@ -75,7 +74,7 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
75
74
  默认不做:
76
75
  - 本地 Docker Compose 启动
77
76
  - 本地 Docker build
78
- - 本地完整 smoke / regression
77
+ - 本地完整 regression
79
78
  - 每个小改动强制 `check-matrix`
80
79
  - 每个小改动强制生成 summary
81
80
  - 未真实执行就要求 regression matrix 全 `PASS`
@@ -83,7 +82,7 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
83
82
 
84
83
  按需保留:
85
84
  - `runtime-up` / `runtime-down`
86
- - 本地 health / smoke / regression
85
+ - 本地 health
87
86
  - `check-matrix`
88
87
  - `gen-summary`
89
88
  - deployment runbook / deployment record
@@ -120,9 +119,7 @@ It must be committed to Git. Do not add it to `.gitignore`.
120
119
 
121
120
  默认必填:
122
121
  - `project.name`
123
- - `commands.build`
124
- - `commands.quick_test` 或 `commands.test`
125
- - `commands.lint` 或 `commands.typecheck`
122
+ - `commands.light_gate` 或 `commands.quick_test` 或 `commands.test` 或 `commands.build`
126
123
  - `target_env.name`
127
124
  - `target_env.frontend_base_url`
128
125
  - `target_env.frontend_username`
@@ -130,6 +127,8 @@ It must be committed to Git. Do not add it to `.gitignore`.
130
127
  - `target_env.backend_base_url`
131
128
  - `target_env.backend_username`
132
129
  - `target_env.backend_password`
130
+ - `target_env.backend_root_username`
131
+ - `target_env.backend_root_password`
133
132
  - `target_env.health_base_url`
134
133
  - `target_env.health_path`
135
134
  - `jenkins.base_url`
@@ -200,6 +199,7 @@ It must be committed to Git. Do not add it to `.gitignore`.
200
199
  - How to record:
201
200
  - Fill YAML frontmatter once.
202
201
  - Keep target env front/backend usernames and passwords, Jenkins UI/API usernames and passwords, commands, docs paths here only.
202
+ - Target environment also includes backend server root username/password.
203
203
  - This file is expected to be committed to Git and maintained in plaintext for this workflow.
204
204
  - Remaining environment keys are all mandatory; blank values, TODO-like placeholders, and incorrect URL/path formats are treated as blocking errors by `doctor`.
205
205
  - Do not duplicate config elsewhere.
@@ -291,12 +291,6 @@ python3 docs/tools/autopipeline/ap.py commit-push <TASK_ID> \
291
291
  Available on-demand commands:
292
292
 
293
293
  ```bash
294
- python3 docs/tools/autopipeline/ap.py run build
295
- python3 docs/tools/autopipeline/ap.py run test
296
- python3 docs/tools/autopipeline/ap.py run quick_test
297
- python3 docs/tools/autopipeline/ap.py run lint
298
- python3 docs/tools/autopipeline/ap.py run typecheck
299
- python3 docs/tools/autopipeline/ap.py run script_syntax
300
294
  python3 docs/tools/autopipeline/ap.py doctor
301
295
  python3 docs/tools/autopipeline/ap.py verify-api-docs
302
296
  python3 docs/tools/autopipeline/ap.py verify-jenkins
@@ -306,8 +300,6 @@ python3 docs/tools/autopipeline/ap.py verify-jenkins-build --job-url <job-url> -
306
300
  python3 docs/tools/autopipeline/ap.py verify-jenkins-build --multibranch-root-job <root-job> --branch-name <branch> --build-number <number>
307
301
  python3 docs/tools/autopipeline/ap.py runtime-up
308
302
  python3 docs/tools/autopipeline/ap.py wait-health --scope runtime
309
- python3 docs/tools/autopipeline/ap.py run smoke
310
- python3 docs/tools/autopipeline/ap.py run regression
311
303
  python3 docs/tools/autopipeline/ap.py runtime-down
312
304
  python3 docs/tools/autopipeline/ap.py check-matrix
313
305
  python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
@@ -332,7 +324,7 @@ python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
332
324
  - `doctor`
333
325
  - Checks whether the default lightweight workflow is actually configured instead of silently skipping gates.
334
326
  - `light-gate`
335
- - Now fails if required commands are missing instead of returning `OK` after skipping everything.
327
+ - Now prefers one curated fast gate command instead of serially running every expensive check.
336
328
  - `verify-target`
337
329
  - Performs real target-environment verification beyond health checks when you provide key backend/frontend paths.
338
330
  - `commit-push --record-closure`
@@ -77,9 +77,7 @@ Do not hide `docs/ENGINEERING.md` in `.gitignore`.
77
77
 
78
78
  Minimum required config for the default flow:
79
79
  - `project.name`
80
- - `commands.build`
81
- - `commands.quick_test` or `commands.test`
82
- - `commands.lint` or `commands.typecheck`
80
+ - `commands.light_gate` or `commands.quick_test` or `commands.test` or `commands.build`
83
81
  - `target_env.name`
84
82
  - `target_env.frontend_base_url`
85
83
  - `target_env.frontend_username`
@@ -87,6 +85,8 @@ Minimum required config for the default flow:
87
85
  - `target_env.backend_base_url`
88
86
  - `target_env.backend_username`
89
87
  - `target_env.backend_password`
88
+ - `target_env.backend_root_username`
89
+ - `target_env.backend_root_password`
90
90
  - `target_env.health_base_url`
91
91
  - `target_env.health_path`
92
92
  - `jenkins.base_url`
@@ -138,8 +138,6 @@ On-demand commands:
138
138
  ```bash
139
139
  python3 docs/tools/autopipeline/ap.py runtime-up
140
140
  python3 docs/tools/autopipeline/ap.py wait-health --scope runtime
141
- python3 docs/tools/autopipeline/ap.py run smoke
142
- python3 docs/tools/autopipeline/ap.py run regression
143
141
  python3 docs/tools/autopipeline/ap.py runtime-down
144
142
  python3 docs/tools/autopipeline/ap.py check-matrix
145
143
  python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
@@ -147,9 +145,9 @@ python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
147
145
 
148
146
  ## Quality policy
149
147
 
150
- - Default local gate is lightweight only: build, unit/quick test, lint, typecheck, API docs, Jenkinsfile / script syntax, `git diff --check`.
148
+ - Default local gate is lightweight and time-bounded: prefer one curated project command via `commands.light_gate`, then run only diff/API/Jenkins checks.
151
149
  - `doctor` should be used early to catch missing or invalid config before the first implementation loop.
152
- - `light-gate` now fails if the required default commands are not configured.
150
+ - `light-gate` now fails if no usable fast gate command is configured.
153
151
  - `doctor`, `light-gate`, and `commit-push` all fail when required environment fields are missing, placeholder-like, or syntactically invalid.
154
152
  - Do not require local Docker Compose or full local regression for every small change.
155
153
  - Jenkins and target environment verification are more valuable than repeated local simulation of deploy-only problems.
@@ -10,26 +10,17 @@ project:
10
10
  jenkinsfile: "Jenkinsfile"
11
11
 
12
12
  commands:
13
+ light_gate: ""
13
14
  build: ""
14
15
  test: ""
15
16
  quick_test: ""
16
17
  lint: ""
17
18
  typecheck: ""
18
19
  format: ""
19
- script_syntax: ""
20
- diff_check: ""
21
- docker_build: ""
22
- compose_up: ""
23
- compose_down: ""
24
- smoke: ""
25
- regression: ""
26
20
 
27
21
  runtime:
28
22
  docker_compose_file: ""
29
23
  docker_service: ""
30
- container_name: ""
31
- image: ""
32
- app_port: ""
33
24
  health_base_url: ""
34
25
  health_path: ""
35
26
  env_file: ""
@@ -43,6 +34,8 @@ target_env:
43
34
  backend_base_url: ""
44
35
  backend_username: ""
45
36
  backend_password: ""
37
+ backend_root_username: ""
38
+ backend_root_password: ""
46
39
  health_base_url: ""
47
40
  health_path: ""
48
41
 
@@ -79,7 +72,7 @@ docs:
79
72
  默认原则:
80
73
  - 默认不要求本地 Docker Compose 启动。
81
74
  - 默认不要求本地 Docker build。
82
- - 默认不要求本地完整 smoke / regression。
75
+ - 默认不要求本地完整 regression。
83
76
  - 默认不要求每个小改动生成长 summary。
84
77
  - 默认不要求 regression matrix 全 PASS。
85
78
  - 默认不要求 deployment record。
@@ -97,21 +90,20 @@ docs:
97
90
  ## 0. 配置填写(必须)
98
91
 
99
92
  先填写 `docs/ENGINEERING.md` frontmatter 中的所有空值。重点包括:
100
- - `commands.*`:本地轻量校验命令
93
+ - `commands.light_gate`:推荐配置一个项目级快速门禁命令,作为默认本地校验入口
101
94
  - `target_env.*`:目标环境前端 / 后端地址、用户名、密码,必须全部填写且真实可用
102
95
  - `jenkins.*`:Jenkins UI/API 用户名、密码、Job、分支、镜像、部署环境,必须全部填写且真实可用
103
96
 
104
97
  字段说明:
105
98
  - `target_env.backend_username` / `target_env.backend_password`:目标环境后台账号
99
+ - `target_env.backend_root_username` / `target_env.backend_root_password`:目标环境后台服务器 root 账号
106
100
  - `target_env.frontend_username` / `target_env.frontend_password`:目标环境前端登录账号
107
101
  - `jenkins.ui_username` / `jenkins.ui_password`:Jenkins 页面登录账号
108
102
  - `jenkins.api_user` / `jenkins.api_password`:Jenkins API 用户名 / 密码
109
103
 
110
104
  默认必填:
111
105
  - `project.name`
112
- - `commands.build`
113
- - `commands.quick_test` 或 `commands.test`
114
- - `commands.lint` 或 `commands.typecheck`
106
+ - `commands.light_gate` 或 `commands.quick_test` 或 `commands.test` 或 `commands.build`
115
107
  - `target_env.name`
116
108
  - `target_env.frontend_base_url`
117
109
  - `target_env.frontend_username`
@@ -119,6 +111,8 @@ docs:
119
111
  - `target_env.backend_base_url`
120
112
  - `target_env.backend_username`
121
113
  - `target_env.backend_password`
114
+ - `target_env.backend_root_username`
115
+ - `target_env.backend_root_password`
122
116
  - `target_env.health_base_url`
123
117
  - `target_env.health_path`
124
118
  - `jenkins.ui_username`
@@ -133,7 +127,7 @@ docs:
133
127
 
134
128
  按需填写:
135
129
  - `runtime.*`:仅在本地运行诊断时使用
136
- - `commands.compose_up` / `commands.compose_down` / `commands.smoke` / `commands.regression`
130
+ - `commands.build` / `commands.test` / `commands.quick_test` / `commands.lint` / `commands.typecheck` / `commands.format`:按项目实际情况保留
137
131
 
138
132
  ---
139
133
 
@@ -197,13 +191,12 @@ docs:
197
191
  只修改本次任务必要文件,不做无关重构。
198
192
 
199
193
  4. 本地轻量校验
200
- 默认只跑:
201
- - 编译 / build
202
- - 单元测试或关键快速测试
203
- - lint / typecheck
204
- - API 文档检查
205
- - Jenkinsfile / 脚本语法检查
194
+ 默认只跑最少必要检查:
195
+ - 优先执行 `commands.light_gate`
196
+ - 若未配置,则执行 `quick_test` / `test` / `build` 中最先配置的一项
206
197
  - `git diff --check`
198
+ - API 文档检查
199
+ - Jenkins 配置检查
207
200
 
208
201
  5. 立即提交推送
209
202
  轻量校验通过后,commit + push,触发 Jenkins。
@@ -250,8 +243,6 @@ docs:
250
243
  - `runtime-up`
251
244
  - `runtime-down`
252
245
  - 本地 health check
253
- - 本地 `smoke`
254
- - 本地 `regression`
255
246
  - `check-matrix`
256
247
  - `gen-summary`
257
248
 
@@ -271,7 +262,7 @@ docs:
271
262
 
272
263
  说明:
273
264
  - `doctor`:检查默认流程必填项和常见配置错误。
274
- - `light-gate`:默认轻量门禁。
265
+ - `light-gate`:默认轻量门禁,优先执行项目自定义快速门禁命令。
275
266
  - `verify-target`:目标环境健康检查 + 按需关键 API / 页面验证。
276
267
  - `record-closure`:默认轻量闭环记录。
277
268
  - `check-matrix`、`gen-summary`、`runtime-up/down`:保留为按需工具。
@@ -3,18 +3,17 @@
3
3
  > 仅在任务需要独立 review 记录时使用;不是每个小改动的默认强制文档。
4
4
 
5
5
  ## 1. 静态分析结果
6
- - Command:lint / typecheck / script_syntax / diff_check
6
+ - Command:light_gate / diff_check / verify_api_docs / verify_jenkins
7
7
  - Summary:
8
8
  - Issues:
9
9
 
10
10
  ## 2. 本地轻量校验
11
- - build:
12
- - test or quick_test:
11
+ - light_gate or quick_test/test/build:
13
12
  - api docs:
14
- - jenkinsfile / scripts
13
+ - jenkins
15
14
 
16
15
  ## 3. 按需本地运行验证(如果有)
17
- - runtime-up / health / smoke / regression
16
+ - runtime-up / health:
18
17
 
19
18
  ## 4. Jenkins 与目标环境
20
19
  - Jenkins readiness:
@@ -19,7 +19,7 @@
19
19
  - 兼容性影响:
20
20
 
21
21
  ## 3. 质量证据
22
- - 本地轻量校验:build / test or quick_test / lint / typecheck / api docs / jenkinsfile / diff-check
22
+ - 本地轻量校验:light_gate or quick_test/test/build / api docs / jenkins / diff-check
23
23
  - Jenkins Build:
24
24
  - 目标环境验证:
25
25
  - 闭环记录:`docs/tasks/closure-log.md`
@@ -454,7 +454,7 @@ def cmd_gen_summary(args: argparse.Namespace) -> None:
454
454
  - 变更记录位置:`{api_change_log}`
455
455
 
456
456
  ## 4. 质量证据
457
- - 本地轻量校验:build / test or quick_test / lint / typecheck / api docs / jenkinsfile / diff-check — TODO
457
+ - 本地轻量校验:light_gate or quick_test/test/build / api docs / jenkins / diff-check — TODO
458
458
  - Jenkins Build:TODO
459
459
  - 目标环境验证:TODO
460
460
  - 闭环记录:TODO
@@ -572,14 +572,8 @@ def _require_explicit_field(missing: List[str], field: str, value: object) -> No
572
572
 
573
573
 
574
574
  def _run_git_diff_check(repo: Path, cfg: dict) -> None:
575
- commands = (cfg.get("commands") or {})
576
- configured = str(commands.get("diff_check") or "").strip()
577
- if configured:
578
- print(f"[diff-check] {configured}")
579
- run_shell(configured, cwd=repo)
580
- else:
581
- print("[diff-check] git diff --check")
582
- run(["git", "diff", "--check"], cwd=repo)
575
+ print("[diff-check] git diff --check")
576
+ run(["git", "diff", "--check"], cwd=repo)
583
577
  print("[diff-check] OK")
584
578
 
585
579
 
@@ -613,38 +607,20 @@ def cmd_light_gate(args: argparse.Namespace) -> None:
613
607
  executed: List[str] = []
614
608
  missing: List[str] = []
615
609
 
616
- if not str(commands.get("build") or "").strip():
617
- missing.append("commands.build")
618
- else:
619
- _run_configured_command(repo, cfg, "build")
620
- executed.append("build")
621
-
622
- if str(commands.get("quick_test") or "").strip():
610
+ if str(commands.get("light_gate") or "").strip():
611
+ _run_configured_command(repo, cfg, "light_gate")
612
+ executed.append("light_gate")
613
+ elif str(commands.get("quick_test") or "").strip():
623
614
  _run_configured_command(repo, cfg, "quick_test")
624
615
  executed.append("quick_test")
625
616
  elif str(commands.get("test") or "").strip():
626
617
  _run_configured_command(repo, cfg, "test")
627
618
  executed.append("test")
619
+ elif str(commands.get("build") or "").strip():
620
+ _run_configured_command(repo, cfg, "build")
621
+ executed.append("build")
628
622
  else:
629
- missing.append("commands.quick_test or commands.test")
630
-
631
- static_executed = False
632
- if str(commands.get("lint") or "").strip():
633
- _run_configured_command(repo, cfg, "lint")
634
- executed.append("lint")
635
- static_executed = True
636
-
637
- if str(commands.get("typecheck") or "").strip():
638
- _run_configured_command(repo, cfg, "typecheck")
639
- executed.append("typecheck")
640
- static_executed = True
641
-
642
- if not static_executed:
643
- missing.append("commands.lint or commands.typecheck")
644
-
645
- if str(commands.get("script_syntax") or "").strip():
646
- _run_configured_command(repo, cfg, "script_syntax")
647
- executed.append("script_syntax")
623
+ missing.append("commands.light_gate or commands.quick_test or commands.test or commands.build")
648
624
 
649
625
  if missing:
650
626
  raise APError(
@@ -664,8 +640,6 @@ def cmd_runtime_up(args: argparse.Namespace) -> None:
664
640
  repo = Path(args.repo).resolve()
665
641
  cfg = _load_cfg(repo)
666
642
  runtime_cfg = (cfg.get("runtime") or {})
667
- if _run_configured_command(repo, cfg, "compose_up"):
668
- return
669
643
  compose_args = _compose_base_args(runtime_cfg) + ["up", "-d"]
670
644
  docker_service = str(runtime_cfg.get("docker_service") or "").strip()
671
645
  if docker_service:
@@ -679,8 +653,6 @@ def cmd_runtime_down(args: argparse.Namespace) -> None:
679
653
  repo = Path(args.repo).resolve()
680
654
  cfg = _load_cfg(repo)
681
655
  runtime_cfg = (cfg.get("runtime") or {})
682
- if _run_configured_command(repo, cfg, "compose_down"):
683
- return
684
656
  compose_args = _compose_base_args(runtime_cfg) + ["down", "--remove-orphans"]
685
657
  print(f"[runtime-down] {' '.join(compose_args)}")
686
658
  run(compose_args, cwd=repo)
@@ -811,12 +783,13 @@ def cmd_doctor(args: argparse.Namespace) -> None:
811
783
 
812
784
  if not str(project_cfg.get("name") or "").strip():
813
785
  missing.append("project.name")
814
- if not str(commands.get("build") or "").strip():
815
- missing.append("commands.build")
816
- if not (str(commands.get("quick_test") or "").strip() or str(commands.get("test") or "").strip()):
817
- missing.append("commands.quick_test or commands.test")
818
- if not (str(commands.get("lint") or "").strip() or str(commands.get("typecheck") or "").strip()):
819
- missing.append("commands.lint or commands.typecheck")
786
+ if not (
787
+ str(commands.get("light_gate") or "").strip()
788
+ or str(commands.get("quick_test") or "").strip()
789
+ or str(commands.get("test") or "").strip()
790
+ or str(commands.get("build") or "").strip()
791
+ ):
792
+ missing.append("commands.light_gate or commands.quick_test or commands.test or commands.build")
820
793
  _require_explicit_field(missing, "target_env.name", target_cfg.get("name"))
821
794
  _require_explicit_field(missing, "target_env.frontend_base_url", target_cfg.get("frontend_base_url"))
822
795
  _require_explicit_field(missing, "target_env.frontend_username", target_cfg.get("frontend_username"))
@@ -824,6 +797,8 @@ def cmd_doctor(args: argparse.Namespace) -> None:
824
797
  _require_explicit_field(missing, "target_env.backend_base_url", target_cfg.get("backend_base_url"))
825
798
  _require_explicit_field(missing, "target_env.backend_username", target_cfg.get("backend_username"))
826
799
  _require_explicit_field(missing, "target_env.backend_password", target_cfg.get("backend_password"))
800
+ _require_explicit_field(missing, "target_env.backend_root_username", target_cfg.get("backend_root_username"))
801
+ _require_explicit_field(missing, "target_env.backend_root_password", target_cfg.get("backend_root_password"))
827
802
  _require_explicit_field(missing, "target_env.health_base_url", target_cfg.get("health_base_url"))
828
803
  _require_explicit_field(missing, "target_env.health_path", target_cfg.get("health_path"))
829
804
 
@@ -856,8 +831,8 @@ def cmd_doctor(args: argparse.Namespace) -> None:
856
831
  _validate_url_field(warnings, "jenkins.job_url", jenkins_cfg.get("job_url"))
857
832
 
858
833
  runtime_enabled = any(str(runtime_cfg.get(key) or "").strip() for key in ["docker_compose_file", "docker_service", "health_base_url", "health_path"])
859
- if runtime_enabled and not (str(commands.get("compose_up") or "").strip() or str(runtime_cfg.get("docker_compose_file") or "").strip()):
860
- warnings.append("runtime config is partially enabled but compose_up or docker_compose_file is missing")
834
+ if runtime_enabled and not str(runtime_cfg.get("docker_compose_file") or "").strip():
835
+ warnings.append("runtime config is partially enabled but runtime.docker_compose_file is missing")
861
836
 
862
837
  try:
863
838
  timeout_s = int(jenkins_cfg.get("deploy_timeout_sec") or 0)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elvis1513/auto-coding-skill",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "CLI installer for auto-coding-skill (Claude Code + Codex CLI) with Go fullstack + Jenkins workflow support.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,7 +13,7 @@
13
13
  "LICENSE"
14
14
  ],
15
15
  "scripts": {
16
- "test": "node -c cli/src/index.js",
16
+ "test": "node -c cli/src/index.js && python3 -m py_compile src/auto-coding-skill/scripts/ap.py src/auto-coding-skill/scripts/core.py src/auto-coding-skill/scripts/http_checks.py cli/assets/skill/scripts/ap.py cli/assets/skill/scripts/core.py cli/assets/skill/scripts/http_checks.py && find src cli -type d -name '__pycache__' -prune -exec rm -rf {} +",
17
17
  "sync-assets": "node cli/src/sync-assets.js",
18
18
  "release:check": "npm run sync-assets && npm run test && npm pack --dry-run"
19
19
  },