@elvis1513/auto-coding-skill 0.1.1 → 0.1.3

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
@@ -22,14 +22,11 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
22
22
  1. Install skill into project:
23
23
 
24
24
  ```bash
25
- autocoding init --ai codex
26
- # or
27
- autocoding init --ai claude
28
- # or both
29
25
  autocoding init --ai all
26
+ # or: --ai codex / --ai claude
30
27
  ```
31
28
 
32
- 2. Initialize docs/tooling:
29
+ 2. Initialize docs and local scripts:
33
30
 
34
31
  ```bash
35
32
  python3 .codex/skills/auto-coding-skill/scripts/ap.py --repo . install
@@ -37,24 +34,15 @@ python3 .codex/skills/auto-coding-skill/scripts/ap.py --repo . install
37
34
  python3 .claude/skills/auto-coding-skill/scripts/ap.py --repo . install
38
35
  ```
39
36
 
40
- 3. Fill one config file only:
37
+ 3. Fill only one file manually:
41
38
 
42
- - `docs/project/project-config.md`
39
+ - `docs/ENGINEERING.md` frontmatter
43
40
 
44
- This file is the single source for:
45
- - build/test/lint/typecheck/smoke/regression commands
46
- - deployment info (ip/user/password/service/path/health)
47
- - docs paths
41
+ This frontmatter is the only manual config source (commands + deployment + docs paths).
48
42
 
49
- Required Python deps:
43
+ 4. Start AI development by constraints:
50
44
 
51
- ```bash
52
- pip install pyyaml requests
53
- ```
54
-
55
- 4. Let AI execute workflow by docs constraints:
56
-
57
- - `ENGINEERING.md`
45
+ - `docs/ENGINEERING.md`
58
46
  - `docs/tasks/taskbook.md`
59
47
  - `docs/design/**`
60
48
  - `docs/interfaces/**`
@@ -64,40 +52,145 @@ pip install pyyaml requests
64
52
 
65
53
  ## AGENTS.md Constraint Example
66
54
 
67
- Add this in project `AGENTS.md`:
68
-
69
55
  ```md
70
56
  ## Mandatory Skill
71
- - Always use `auto-coding-skill` for every implementation task.
57
+ - Always use `auto-coding-skill` for implementation tasks.
72
58
  - Before any code change, read and obey:
73
- 1) ENGINEERING.md
74
- 2) docs/project/project-config.md
75
- 3) docs/tasks/taskbook.md
76
- - Execute gates using `python3 tools/autopipeline/ap.py`.
77
- - If any required doc is missing, create/update docs first, then code.
59
+ 1) docs/ENGINEERING.md
60
+ 2) docs/tasks/taskbook.md
61
+ - Execute gates using `python3 scripts/autopipeline/ap.py`.
62
+ - If required docs are missing, create/update docs first, then code.
78
63
  ```
79
64
 
65
+ ## Docs Structure and Recording Rules
66
+
67
+ ### 1) docs/ENGINEERING.md
68
+ - Purpose: single source of project config + engineering gate rules.
69
+ - How to record:
70
+ - Fill YAML frontmatter once (project/commands/deployment/docs fields).
71
+ - Keep all environment info here only (ip/username/password/service/path/health).
72
+ - Do not duplicate config in other docs.
73
+
74
+ ### 2) docs/deployment/
75
+ - Files:
76
+ - `docs/deployment/deploy-runbook.md`: deployment procedure and validation checklist.
77
+ - `docs/deployment/deploy-records/<TASK_ID>-YYYYMMDD.md`: per-deploy execution record.
78
+ - How to record:
79
+ - In deploy record, write target host, service, artifact, remote path, backup, systemctl status, smoke/regression evidence.
80
+
81
+ ### 3) docs/design/
82
+ - Files:
83
+ - `docs/design/<TASK_ID>-<slug>.md` (from DD template).
84
+ - Purpose:
85
+ - Detailed design before coding (scope,方案、时序图、ER图、接口编排、测试策略、回滚).
86
+ - How to record:
87
+ - One task/subtask one DD file.
88
+ - Status changes: Draft -> Reviewed -> Approved.
89
+
90
+ ### 4) docs/interfaces/
91
+ - Files:
92
+ - `docs/interfaces/api.md`: authoritative API documentation (current contract).
93
+ - `docs/interfaces/api-change-log.md`: append-only API changes per task.
94
+ - How to record:
95
+ - API changes must update both files in the same task.
96
+ - `api.md` records latest endpoint contract.
97
+ - `api-change-log.md` appends task-level delta (新增/修改/废弃/兼容策略/影响面).
98
+
99
+ ### 5) docs/reviews/
100
+ - Files:
101
+ - `docs/reviews/<TASK_ID>-<timestamp>.md` (from review template).
102
+ - Purpose:
103
+ - Gate review evidence: static checks, code quality, test quality, risks.
104
+ - How to record:
105
+ - Record commands used (lint/typecheck from docs/ENGINEERING.md frontmatter) and conclusion (Pass/Blocked).
106
+
107
+ ### 6) docs/tasks/
108
+ - Files:
109
+ - `docs/tasks/taskbook.md`: master task ledger (all tasks appended here).
110
+ - `docs/tasks/summaries/<TASK_ID>.md`: end-of-task summary artifact.
111
+ - How to record:
112
+ - `taskbook.md` stores task scope/acceptance/subtasks/evidence links.
113
+ - `summaries/<TASK_ID>.md` stores final objective result, change overview, gate evidence, risks, follow-ups.
114
+
115
+ ### 7) docs/testing/
116
+ - Files:
117
+ - `docs/testing/regression-matrix.md`
118
+ - Purpose:
119
+ - Full regression matrix; must be 0 FAIL.
120
+ - How to record:
121
+ - Add/maintain rows by regression ID (R-xxx), area, steps/command, expected, status, evidence.
122
+ - If any FAIL exists, gate fails.
123
+
80
124
  ## Commands
81
125
 
82
126
  ```bash
83
- python3 tools/autopipeline/ap.py run build
84
- python3 tools/autopipeline/ap.py run test
85
- python3 tools/autopipeline/ap.py run lint
86
- python3 tools/autopipeline/ap.py verify-api-docs
87
- python3 tools/autopipeline/ap.py check-matrix
88
- python3 tools/autopipeline/ap.py gen-summary T0001-1
89
- python3 tools/autopipeline/ap.py commit-push T0001-1 --msg "T0001-1: <summary>" --require-matrix
127
+ pip install pyyaml requests
128
+ python3 scripts/autopipeline/ap.py run build
129
+ python3 scripts/autopipeline/ap.py run test
130
+ python3 scripts/autopipeline/ap.py run lint
131
+ python3 scripts/autopipeline/ap.py verify-api-docs
132
+ python3 scripts/autopipeline/ap.py check-matrix
133
+ python3 scripts/autopipeline/ap.py gen-summary T0001-1
134
+ python3 scripts/autopipeline/ap.py commit-push T0001-1 --msg "T0001-1: <summary>" --require-matrix
135
+ ```
136
+
137
+ ## Publish (NPM)
138
+
139
+ 1. Sync assets and basic check:
140
+
141
+ ```bash
142
+ npm run sync-assets
143
+ npm test
90
144
  ```
91
145
 
92
- ## Publish
146
+ 2. Bump version (required before every publish):
147
+
148
+ ```bash
149
+ npm version patch
150
+ # or: npm version minor
151
+ # or: npm version major
152
+ ```
153
+
154
+ `npm version` will update `package.json` and create a git tag.
155
+
156
+ 3. Login and run release check:
93
157
 
94
158
  ```bash
95
159
  npm login
96
160
  npm whoami
97
161
  npm run release:check
162
+ ```
163
+
164
+ 4. Publish package:
165
+
166
+ ```bash
98
167
  npm publish --access public
168
+ # if your account requires 2FA OTP:
169
+ npm publish --access public --otp <6-digit-otp>
99
170
  ```
100
171
 
172
+ 5. Verify and update clients:
173
+
174
+ ```bash
175
+ npm view @elvis1513/auto-coding-skill version
176
+ npm install -g @elvis1513/auto-coding-skill@latest
177
+ ```
178
+
179
+ ### Common Publish Errors
180
+
181
+ - `403 You cannot publish over the previously published versions`
182
+ - Cause: same version already exists.
183
+ - Fix: run `npm version patch` (or `minor`/`major`) then publish again.
184
+ - `403 Two-factor authentication ... is required to publish`
185
+ - Cause: publish requires 2FA.
186
+ - Fix: use `npm publish --access public --otp <6-digit-otp>`.
187
+ - `404 Not Found` when install
188
+ - Cause: package not published successfully, or scope/name mismatch.
189
+ - Fix: verify with `npm view @elvis1513/auto-coding-skill version` first.
190
+ - `Access token expired or revoked`
191
+ - Cause: npm auth token expired.
192
+ - Fix: run `npm login` again and retry publish/install.
193
+
101
194
  ## License
102
195
 
103
196
  MIT
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: auto-coding-skill
3
- description: Use for strict project engineering workflow in Claude/Codex. It initializes docs and enforces taskbook -> design -> implement -> quality gates -> docs -> deploy -> regression -> summary -> commit/push.
3
+ description: Use for strict project engineering workflow in Claude/Codex. Initialize docs, fill docs/ENGINEERING.md frontmatter once, then execute design->implement->gates->summary->commit/push.
4
4
  ---
5
5
 
6
6
  # Auto Coding Skill (Claude + Codex)
@@ -26,19 +26,19 @@ python3 .codex/skills/auto-coding-skill/scripts/ap.py --repo . install
26
26
  # or .claude path
27
27
  ```
28
28
 
29
- Install runtime deps:
29
+ 3) Install runtime deps:
30
30
 
31
31
  ```bash
32
32
  pip install pyyaml requests
33
33
  ```
34
34
 
35
- ## Single manual config file
35
+ ## Single manual config source
36
36
 
37
- Fill only this file:
37
+ Fill only:
38
38
 
39
- - `docs/project/project-config.md`
39
+ - `docs/ENGINEERING.md` frontmatter
40
40
 
41
- YAML frontmatter in this file contains:
41
+ This contains all manual fields:
42
42
  - `commands.*`
43
43
  - `deployment.*`
44
44
  - `docs.*`
@@ -47,23 +47,22 @@ Do not duplicate config in other md/yaml files.
47
47
 
48
48
  ## Execution order
49
49
 
50
- 1) `ENGINEERING.md`
51
- 2) `docs/project/project-config.md`
52
- 3) `docs/tasks/taskbook.md`
53
- 4) `docs/design/**`
54
- 5) implementation
55
- 6) run gates via `python3 tools/autopipeline/ap.py`
56
- 7) update API docs + regression matrix + bug list + summary
57
- 8) commit/push
50
+ 1) `docs/ENGINEERING.md`
51
+ 2) `docs/tasks/taskbook.md`
52
+ 3) `docs/design/**`
53
+ 4) implementation
54
+ 5) run gates via `python3 scripts/autopipeline/ap.py`
55
+ 6) update API docs + regression matrix + bug list + summary
56
+ 7) commit/push
58
57
 
59
58
  ## Commands
60
59
 
61
60
  ```bash
62
- python3 tools/autopipeline/ap.py run build
63
- python3 tools/autopipeline/ap.py run test
64
- python3 tools/autopipeline/ap.py run lint
65
- python3 tools/autopipeline/ap.py verify-api-docs
66
- python3 tools/autopipeline/ap.py check-matrix
67
- python3 tools/autopipeline/ap.py gen-summary T0001-1
68
- python3 tools/autopipeline/ap.py commit-push T0001-1 --msg "T0001-1: <summary>" --require-matrix
61
+ python3 scripts/autopipeline/ap.py run build
62
+ python3 scripts/autopipeline/ap.py run test
63
+ python3 scripts/autopipeline/ap.py run lint
64
+ python3 scripts/autopipeline/ap.py verify-api-docs
65
+ python3 scripts/autopipeline/ap.py check-matrix
66
+ python3 scripts/autopipeline/ap.py gen-summary T0001-1
67
+ python3 scripts/autopipeline/ap.py commit-push T0001-1 --msg "T0001-1: <summary>" --require-matrix
69
68
  ```
@@ -1,67 +1,91 @@
1
- # ENGINEERING.md — AutoPipeline Gates (Source of Truth)
1
+ ---
2
+ project:
3
+ name: ""
4
+ repo_root: "."
5
+
6
+ commands:
7
+ build: ""
8
+ test: ""
9
+ lint: ""
10
+ typecheck: ""
11
+ format: ""
12
+ smoke: ""
13
+ regression: ""
14
+
15
+ deployment:
16
+ host: ""
17
+ ssh_port: 22
18
+ username: ""
19
+ password: ""
20
+ service_name: ""
21
+ systemd_dir: "/usr/lib/systemd/system"
22
+ remote_app_root: ""
23
+ remote_jar_path: ""
24
+ remote_config_dir: ""
25
+ remote_bin_dir: ""
26
+ health_base_url: ""
27
+ health_path: ""
28
+
29
+ docs:
30
+ taskbook: "docs/tasks/taskbook.md"
31
+ design_dir: "docs/design"
32
+ review_dir: "docs/reviews"
33
+ api_doc: "docs/interfaces/api.md"
34
+ api_change_log: "docs/interfaces/api-change-log.md"
35
+ regression_matrix: "docs/testing/regression-matrix.md"
36
+ bug_list: "docs/bugs/bug-list.md"
37
+ summary_dir: "docs/tasks/summaries"
38
+ ---
39
+
40
+ # docs/ENGINEERING.md — AutoPipeline Gates (Source of Truth)
2
41
 
3
42
  目标:把一次任务固化为不可跳过的流水线:
4
43
  读任务 → 写DD → 实现 → 本地测试通过 → 静态分析+Review落盘 → 更新API Markdown+接口变更清单 →
5
44
  部署(systemd/jar) → 重启验证 → 按API Markdown全量回归 + 回归矩阵0fail →
6
45
  记录Bug并新增自动化回归 → 任务总结落盘 → commit → push
7
46
 
8
- 规则:任一步骤失败或缺产物,禁止进入下一步;**未 push 视为任务未完成**,禁止开始下一个任务/子任务。
47
+ 规则:任一步骤失败或缺产物,禁止进入下一步;未 push 视为任务未完成,禁止开始下一个任务/子任务。
9
48
 
10
49
  ---
11
50
 
12
- ## 0. 权威输入与冲突裁决(优先级)
13
- ## 0.1 项目配置(必须,单一入口)
51
+ ## 0. 配置填写(必须)
14
52
 
15
- - 所有人工维护信息统一放在:`docs/project/project-config.md`
16
- - 该文件 YAML frontmatter 中必须包含:
17
- - `commands.*`(build/test/lint/typecheck/smoke/regression)
18
- - `deployment.*`(ip/用户名/密码/服务名/路径/健康检查等)
19
- - `docs.*`(任务本、API文档、回归矩阵、Bug清单、总结目录等路径)
53
+ 先填写 `docs/ENGINEERING.md` frontmatter 中的所有空值(例如 ip/用户名/密码/服务名/路径/命令)。
54
+ 禁止在其他 md/yaml 重复维护这些配置。
20
55
 
21
- 任何 gate 只允许使用该文件中的配置执行,禁止在其他 md/yaml 再维护一份配置。
56
+ ---
22
57
 
58
+ ## 1. 权威输入与冲突裁决(优先级)
23
59
 
24
- 1) ENGINEERING.md(本文件)
25
- 2) docs/project/project-config.md
26
- 3) docs/tasks/taskbook.md
27
- 4) docs/design/**
28
- 5) docs/interfaces/api.md
29
- 6) docs/interfaces/api-change-log.md
30
- 7) docs/testing/regression-matrix.md(必须 0 FAIL)
31
- 8) docs/bugs/bug-list.md(长期积累,回归必测)
32
- 9) docs/tasks/summaries/**(每任务一份,强制产物)
33
- 10) docs/deployment/**
34
- 11) 代码实现(不得反向覆盖 1~10)
60
+ 1) docs/ENGINEERING.md(本文件)
61
+ 2) docs/tasks/taskbook.md
62
+ 3) docs/design/**
63
+ 4) docs/interfaces/api.md
64
+ 5) docs/interfaces/api-change-log.md
65
+ 6) docs/testing/regression-matrix.md(必须 0 FAIL)
66
+ 7) docs/bugs/bug-list.md(长期积累,回归必测)
67
+ 8) docs/tasks/summaries/**(每任务一份,强制产物)
68
+ 9) docs/deployment/**
69
+ 10) 代码实现(不得反向覆盖 1~9)
35
70
 
36
71
  ---
37
72
 
38
- ## 1. Gate 流水线(强制、不可跳过)
73
+ ## 2. Gate 流水线(强制、不可跳过)
39
74
 
40
75
  Gate-1 读任务:只从 taskbook 取范围与验收;缺信息先补 taskbook
41
- Gate-1.5 配置确认:先补齐 `docs/project/project-config.md`;未补齐禁止进入实现
42
76
  Gate-2 写DD:无DD禁止写代码;DD必须含 时序图/ER图/接口时序(Mermaid)
43
77
  Gate-3 实现:严格按DD;接口变更必须同步 API Markdown
44
- Gate-4 本地CI:必须通过(ci-local
78
+ Gate-4 本地CI:必须通过(commands.build / commands.test
45
79
  Gate-5 静态分析+Review:静态分析通过;docs/reviews/ 生成记录
46
80
  Gate-6 文档:更新 api.md + 追加 api-change-log.md
47
- Gate-7 部署:单机 systemd/jar;允许 root+密码;service目录固定 /usr/lib/systemd/system;只保留1份备份;失败自动回滚
81
+ Gate-7 部署:单机 systemd/jarservice目录固定 /usr/lib/systemd/system;失败自动回滚
48
82
  Gate-8 重启+健康:restart后必须健康检查通过
49
- Gate-9 全量回归:按 API Markdown 全量回归;回归矩阵(`docs/testing/regression-matrix.md`)全量 PASS(0 fail);发现问题必须写 bug-list 并新增自动化回归用例(纳入 Gate-9)
50
- Gate-10 任务总结:必须生成 docs/tasks/summaries/<TASK_ID>.md(可用工具生成初稿)
51
- Gate-11 完成:全门禁通过后必须 commit+push(未push=未完成)
52
-
53
- ---
54
-
55
- ## 2. 部署约束(来自你的固定要求)
56
-
57
- - 允许 sshpass / 或 python 从 `docs/project/project-config.md` 读取 root 密码(非交互)
58
- - systemd 目录固定:/usr/lib/systemd/system
59
- - 只保留一个最新备份(*.bak / *.tgz.bak),失败自动回滚并重启服务
60
- - 健康检查端点不固定:`docs/project/project-config.md` 的 deployment.health_* 字段配置
61
- - 部署可更新项:app/config/、app/bin/、/usr/lib/systemd/system/*.service、jar
83
+ Gate-9 全量回归:按 API Markdown 全量回归;回归矩阵全量 PASS(0 fail);发现问题必须写 bug-list 并新增自动化回归用例
84
+ Gate-10 任务总结:必须生成 docs/tasks/summaries/<TASK_ID>.md
85
+ Gate-11 完成:全门禁通过后必须 commit+push
62
86
 
63
87
  ---
64
88
 
65
- ## 3. Repo 工具入口(建议)
89
+ ## 3. Repo 工具入口
66
90
 
67
- 统一用 `python3 tools/autopipeline/ap.py <command>` 执行。
91
+ 统一用 `python3 scripts/autopipeline/ap.py <command>` 执行。
@@ -1 +1 @@
1
- Follow ENGINEERING.md strictly. Source of truth: ENGINEERING.md.
1
+ Follow docs/ENGINEERING.md strictly. Source of truth: docs/ENGINEERING.md.
@@ -1 +1 @@
1
- Follow ENGINEERING.md strictly. Source of truth: ENGINEERING.md.
1
+ Follow docs/ENGINEERING.md strictly. Source of truth: docs/ENGINEERING.md.
@@ -1,6 +1,6 @@
1
1
  # Deploy Runbook(单机 systemd / jar)
2
2
 
3
- 部署参数统一读取:`docs/project/project-config.md`
3
+ 部署参数统一读取:`docs/ENGINEERING.md` frontmatter
4
4
  - deployment.host / deployment.ssh_port / deployment.username / deployment.password
5
5
  - deployment.service_name / deployment.systemd_dir
6
6
  - deployment.remote_app_root / deployment.remote_jar_path / deployment.remote_config_dir / deployment.remote_bin_dir
@@ -1,7 +1,7 @@
1
1
  # Review — <Task ID> — YYYY-MM-DD HH:MM
2
2
 
3
3
  ## 1. 静态分析结果(必须)
4
- - Command:lint + typecheck(来自 docs/project/project-config.md)
4
+ - Command:lint + typecheck(来自 docs/ENGINEERING.md frontmatter
5
5
  - Summary:
6
6
  - Issues:
7
7
  - Resolved/Deferred(deferred 必须给出后续任务):
@@ -28,7 +28,7 @@
28
28
  - 回滚方式:
29
29
 
30
30
  ## 5. 质量门禁证据(必须可追溯)
31
- - 项目配置:`docs/project/project-config.md`
31
+ - 项目配置:`docs/ENGINEERING.md`(frontmatter)
32
32
  - 本地CI:`ci-local`
33
33
  - 静态分析:`static`
34
34
  - Review 文档:`docs/reviews/<TASK_ID>-<timestamp>.md`
@@ -18,7 +18,7 @@
18
18
  - [ ] T0001-2 <subtask>
19
19
 
20
20
  ### 证据(完成后填写)
21
- - 项目配置:`docs/project/project-config.md`
21
+ - 项目配置:`docs/ENGINEERING.md`(frontmatter)
22
22
  - DD:`docs/design/T0001-<slug>.md`
23
23
  - Review:`docs/reviews/T0001-YYYYMMDD-HHMM.md`
24
24
  - API 文档:`docs/interfaces/api.md`
@@ -21,18 +21,18 @@ def cmd_install(args: argparse.Namespace) -> None:
21
21
  templates = _skill_root() / "data" / "templates"
22
22
 
23
23
  copy_tree(templates / "docs", repo / "docs")
24
- copy_tree(templates / "ENGINEERING.md", repo / "ENGINEERING.md")
24
+ copy_tree(templates / "ENGINEERING.md", repo / "docs" / "ENGINEERING.md")
25
25
 
26
26
  if args.bridges:
27
27
  copy_tree(templates / "bridges", repo)
28
28
 
29
- tools_dir = repo / "tools" / "autopipeline"
30
- tools_dir.mkdir(parents=True, exist_ok=True)
31
- copy_tree(Path(__file__).resolve(), tools_dir / "ap.py")
32
- copy_tree(Path(__file__).resolve().parent / "core.py", tools_dir / "core.py")
29
+ scripts_dir = repo / "scripts" / "autopipeline"
30
+ scripts_dir.mkdir(parents=True, exist_ok=True)
31
+ copy_tree(Path(__file__).resolve(), scripts_dir / "ap.py")
32
+ copy_tree(Path(__file__).resolve().parent / "core.py", scripts_dir / "core.py")
33
33
 
34
34
  gi = repo / ".gitignore"
35
- secret_line = "docs/project/project-config.md"
35
+ secret_line = "docs/ENGINEERING.md"
36
36
  if gi.exists():
37
37
  txt = gi.read_text(encoding="utf-8")
38
38
  if secret_line not in txt:
@@ -41,11 +41,10 @@ def cmd_install(args: argparse.Namespace) -> None:
41
41
  gi.write_text(secret_line + "\n", encoding="utf-8")
42
42
 
43
43
  print(f"[install] OK: scaffold installed into {repo}")
44
- print("[install] Next: edit docs/project/project-config.md and fill all project/env fields")
44
+ print("[install] Next: edit docs/ENGINEERING.md frontmatter and fill all project/env fields")
45
45
 
46
46
 
47
- def _infer_title(repo: Path, task_id: str) -> str:
48
- taskbook = repo / "docs" / "tasks" / "taskbook.md"
47
+ def _infer_title(taskbook: Path, task_id: str) -> str:
49
48
  if not taskbook.exists():
50
49
  return "<Title>"
51
50
  for line in taskbook.read_text(encoding="utf-8").splitlines():
@@ -62,16 +61,18 @@ def cmd_gen_summary(args: argparse.Namespace) -> None:
62
61
  task_id = args.task_id
63
62
  cfg = _load_cfg(repo)
64
63
  docs_cfg = (cfg.get("docs") or {})
64
+ taskbook = Path(repo, str(docs_cfg.get("taskbook", "docs/tasks/taskbook.md")))
65
+ summary_dir = Path(repo, str(docs_cfg.get("summary_dir", "docs/tasks/summaries")))
65
66
  api_change_log = str(docs_cfg.get("api_change_log", "docs/interfaces/api-change-log.md"))
66
67
  regression_matrix = str(docs_cfg.get("regression_matrix", "docs/testing/regression-matrix.md"))
67
68
 
68
- out_dir = repo / "docs" / "tasks" / "summaries"
69
+ out_dir = summary_dir
69
70
  out_dir.mkdir(parents=True, exist_ok=True)
70
71
  out_file = out_dir / f"{task_id}.md"
71
72
  if out_file.exists() and not args.force:
72
73
  raise APError(f"Summary already exists: {out_file} (use --force to overwrite)")
73
74
 
74
- title = _infer_title(repo, task_id)
75
+ title = _infer_title(taskbook, task_id)
75
76
  date = _dt.date.today().isoformat()
76
77
 
77
78
  staged = run(["git", "diff", "--cached", "--name-only"], cwd=repo, check=False).stdout.strip()
@@ -163,7 +164,7 @@ def cmd_run(args: argparse.Namespace) -> None:
163
164
  """
164
165
  Run a configured gate command:
165
166
  build | test | lint | typecheck | format | smoke | regression
166
- Commands are read from docs/project/project-config.md frontmatter.
167
+ Commands are read from docs/ENGINEERING.md frontmatter.
167
168
  """
168
169
  repo = Path(args.repo).resolve()
169
170
  cfg = _load_cfg(repo)
@@ -172,7 +173,7 @@ def cmd_run(args: argparse.Namespace) -> None:
172
173
  if name not in commands:
173
174
  raise APError(
174
175
  f"Command not configured: commands.{name}. "
175
- "Edit docs/project/project-config.md. "
176
+ "Edit docs/ENGINEERING.md frontmatter. "
176
177
  f"Available: {', '.join(commands.keys()) or '(none)'}"
177
178
  )
178
179
  cmd = str(commands[name])
@@ -197,15 +198,18 @@ def cmd_verify_api_docs(args: argparse.Namespace) -> None:
197
198
  def cmd_commit_push(args: argparse.Namespace) -> None:
198
199
  repo = Path(args.repo).resolve()
199
200
  ensure_git_repo(repo)
201
+ cfg = _load_cfg(repo)
202
+ docs_cfg = (cfg.get("docs") or {})
203
+ summary_dir = Path(repo, str(docs_cfg.get("summary_dir", "docs/tasks/summaries")))
200
204
 
201
205
  task_id = args.task_id
202
206
  msg = args.msg
203
207
 
204
- summary = repo / "docs" / "tasks" / "summaries" / f"{task_id}.md"
208
+ summary = summary_dir / f"{task_id}.md"
205
209
  if not summary.exists():
206
210
  raise APError(
207
211
  f"Task summary missing: {summary}\n"
208
- f"Generate: python3 tools/autopipeline/ap.py gen-summary {task_id}"
212
+ f"Generate: python3 scripts/autopipeline/ap.py gen-summary {task_id}"
209
213
  )
210
214
 
211
215
  if args.require_matrix:
@@ -97,15 +97,14 @@ def http_get_status(url: str, timeout_s: int = 5) -> int:
97
97
  def find_config(repo: Path) -> Path:
98
98
  """Find single source project config file."""
99
99
  candidates = [
100
- repo / "docs" / "project" / "project-config.md",
101
- repo / "project-config.md",
100
+ repo / "docs" / "ENGINEERING.md",
102
101
  ]
103
102
  for c in candidates:
104
103
  if c.exists():
105
104
  return c
106
105
  raise APError(
107
- "Project config not found. Create docs/project/project-config.md "
108
- "and put all commands + deployment fields in YAML frontmatter."
106
+ "Project config not found. Create docs/ENGINEERING.md "
107
+ "and put commands + deployment fields in YAML frontmatter."
109
108
  )
110
109
 
111
110
 
package/cli/src/index.js CHANGED
@@ -64,7 +64,7 @@ function resolveTargetDir(ai, mode, destOverride){
64
64
 
65
65
  function ensureGitignore(projectDir){
66
66
  const gi = path.join(projectDir, ".gitignore");
67
- const line = "docs/project/project-config.md";
67
+ const line = "docs/ENGINEERING.md";
68
68
  if (!exists(gi)) {
69
69
  fs.writeFileSync(gi, `${line}\n`, "utf-8");
70
70
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elvis1513/auto-coding-skill",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "CLI installer for auto-coding-skill (Claude Code + Codex CLI).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,45 +0,0 @@
1
- ---
2
- project:
3
- name: "fill-project-name"
4
- repo_root: "."
5
-
6
- commands:
7
- build: "fill-build-command"
8
- test: "fill-test-command"
9
- lint: "fill-lint-command"
10
- typecheck: "fill-typecheck-command"
11
- format: "fill-format-command"
12
- smoke: "fill-smoke-command"
13
- regression: "fill-regression-command"
14
-
15
- docs:
16
- taskbook: "docs/tasks/taskbook.md"
17
- design_dir: "docs/design"
18
- review_dir: "docs/reviews"
19
- api_doc: "docs/interfaces/api.md"
20
- api_change_log: "docs/interfaces/api-change-log.md"
21
- regression_matrix: "docs/testing/regression-matrix.md"
22
- bug_list: "docs/bugs/bug-list.md"
23
- summary_dir: "docs/tasks/summaries"
24
-
25
- deployment:
26
- host: "fill-ip-or-domain"
27
- ssh_port: 22
28
- username: "fill-username"
29
- password: "fill-password"
30
- service_name: "fill-service-name"
31
- systemd_dir: "/usr/lib/systemd/system"
32
- remote_app_root: "fill-remote-app-root"
33
- remote_jar_path: "fill-remote-jar-path"
34
- remote_config_dir: "fill-remote-config-dir"
35
- remote_bin_dir: "fill-remote-bin-dir"
36
- health_base_url: "fill-health-base-url"
37
- health_path: "/health"
38
- ---
39
-
40
- # Project Config(唯一人工维护入口)
41
-
42
- 规则:
43
- 1) 所有需要人工维护的项统一写在本文件 frontmatter。
44
- 2) 其他 docs 不再重复维护配置,统一引用本文件。
45
- 3) 开发前先补齐本文件,再启动任何 Gate。