adspecs 0.1.18 → 0.1.20

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.
Files changed (88) hide show
  1. package/.adspecs/extensions/git/commands/adspecs.git.initialize.md +4 -4
  2. package/.adspecs/extensions/git/extension.yml +1 -1
  3. package/.adspecs/extensions/git/git-config.yml +17 -2
  4. package/.adspecs/extensions.yml +32 -0
  5. package/.adspecs/feature.json +16 -16
  6. package/.adspecs/feature.yml +28 -28
  7. package/.adspecs/paths.json +17 -0
  8. package/.adspecs/templates/02-/344/272/247/345/223/201/351/234/200/346/261/202/350/257/264/346/230/216/344/271/246/346/250/241/346/235/277.md +4 -0
  9. package/.adspecs/workflows/adspecs/workflow.yml +5 -4
  10. package/.claude-plugin/marketplace.json +23 -23
  11. package/.claude-plugin/plugin.json +18 -18
  12. package/.qoder-plugin/plugin.json +31 -31
  13. package/CLAUDE.md +1 -5
  14. package/README.md +395 -395
  15. package/bin/adspecs.js +129 -129
  16. package/hooks/commit-queue.js +245 -245
  17. package/hooks/hooks.json +63 -63
  18. package/hooks/session-start.js +44 -44
  19. package/hooks/wiki-queue.js +127 -127
  20. package/package.json +61 -61
  21. package/references/ant6-front-standard/index.md +99 -99
  22. package/references/antd-front-demo/.env.develop +12 -0
  23. package/references/antd-front-demo/.env.production +5 -0
  24. package/references/antd-front-demo/package-lock.json +2 -2
  25. package/references/antd-front-demo/package.json +1 -1
  26. package/references/antd-front-demo/public/mockServiceWorker.js +361 -361
  27. package/references/ecp-end-standard/index.md +63 -63
  28. package/references/python-end-standard/01-Python/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +372 -372
  29. package/references/python-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +226 -226
  30. package/references/python-end-standard/03-Celery/345/274/202/346/255/245/344/273/273/345/212/241/350/247/204/350/214/203.md +237 -237
  31. package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -231
  32. package/scripts/postinstall.js +107 -107
  33. package/scripts/sync-version.js +105 -105
  34. package/skills/.claude/.wiki-update-queue +26 -26
  35. package/skills/adspecs-constitution/SKILL.md +157 -0
  36. package/skills/adspecs-export-word/SKILL.md +498 -498
  37. package/skills/adspecs-export-word/references/md-to-docx.js +862 -862
  38. package/skills/adspecs-export-word/references/package-lock.json +220 -220
  39. package/skills/adspecs-export-word/references/package.json +10 -10
  40. package/skills/adspecs-front-prototype/SKILL.md +405 -0
  41. package/skills/adspecs-git-commit/SKILL.md +23 -8
  42. package/skills/adspecs-git-initialize/SKILL.md +54 -0
  43. package/skills/adspecs-plan/SKILL.md +59 -69
  44. package/skills/adspecs-prd/SKILL.md +13 -5
  45. package/skills/adspecs-prd-to-demo/SKILL.md +532 -0
  46. package/skills/adspecs-tasks/SKILL.md +175 -204
  47. package/skills/adspecs-update-status/SKILL.md +382 -382
  48. package/skills/adspecs-utest/SKILL.md +107 -116
  49. package/skills/grill-me/SKILL.md +7 -0
  50. package/skills/grill-me/agents/openai.yaml +5 -0
  51. package/skills/playwright-cli/SKILL.md +420 -0
  52. package/skills/playwright-cli/references/element-attributes.md +23 -0
  53. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  54. package/skills/playwright-cli/references/request-mocking.md +87 -0
  55. package/skills/playwright-cli/references/running-code.md +241 -0
  56. package/skills/playwright-cli/references/session-management.md +225 -0
  57. package/skills/playwright-cli/references/storage-state.md +275 -0
  58. package/skills/playwright-cli/references/test-generation.md +433 -0
  59. package/skills/playwright-cli/references/tracing.md +139 -0
  60. package/skills/playwright-cli/references/video-recording.md +143 -0
  61. package/skills/playwright-trace/SKILL.md +171 -0
  62. package/skills/project-init/references/front-demo/.claude/settings.local.json +9 -0
  63. package/skills/wiki-update/SKILL.md +232 -232
  64. package/src/commands/doctor.js +197 -197
  65. package/src/commands/init.js +83 -83
  66. package/src/commands/plugin.js +165 -165
  67. package/src/commands/update.js +87 -87
  68. package/src/lib/area-scanner.js +129 -129
  69. package/src/lib/copier.js +104 -104
  70. package/src/lib/dir-utils.js +133 -133
  71. package/src/lib/json-merge.js +114 -114
  72. package/src/lib/paths-defaults.js +37 -37
  73. package/src/lib/prompts.js +347 -345
  74. package/src/lib/readme-gen.js +143 -143
  75. package/src/lib/report.js +327 -327
  76. package/src/lib/scaffolder.js +518 -518
  77. package/src/lib/short-name.js +36 -36
  78. package/src/utils.js +80 -80
  79. package/references/antd-front-demo/.env +0 -15
  80. package/references/antd-front-demo/src/pages/aps/coil/components/CoilDrawer.tsx +0 -141
  81. package/references/antd-front-demo/src/pages/aps/coil/index.tsx +0 -209
  82. package/references/antd-front-demo/src/pages/aps/optimization/index.tsx +0 -192
  83. package/references/antd-front-demo/src/pages/aps/order/components/OrderDrawer.tsx +0 -251
  84. package/references/antd-front-demo/src/pages/aps/order/index.tsx +0 -273
  85. package/references/antd-front-demo/src/pages/aps/param/index.tsx +0 -153
  86. package/references/antd-front-demo/src/pages/aps/plan/components/CuttingPlanVisualization.tsx +0 -821
  87. package/references/antd-front-demo/src/pages/aps/plan/index.tsx +0 -254
  88. package/references/antd-front-demo/src/pages/aps/task/index.tsx +0 -190
@@ -10,12 +10,12 @@ Initialize a Git repository in the current project directory if one does not alr
10
10
 
11
11
  Run the appropriate script from the project root:
12
12
 
13
- - **Bash**: `.specify/extensions/git/scripts/bash/initialize-repo.sh`
14
- - **PowerShell**: `.specify/extensions/git/scripts/powershell/initialize-repo.ps1`
13
+ - **Bash**: `.adspecs/extensions/git/scripts/bash/initialize-repo.sh`
14
+ - **PowerShell**: `.adspecs/extensions/git/scripts/powershell/initialize-repo.ps1`
15
15
 
16
16
  If the extension scripts are not found, fall back to:
17
- - **Bash**: `git init && git add . && git commit -m "Initial commit from Specify template"`
18
- - **PowerShell**: `git init; git add .; git commit -m "Initial commit from Specify template"`
17
+ - **Bash**: `git init && git add . && git commit -m "Initial commit from Adspecs template"`
18
+ - **PowerShell**: `git init; git add .; git commit -m "Initial commit from Adspecs template"`
19
19
 
20
20
  The script handles all checks internally:
21
21
  - Skips if Git is not available
@@ -10,7 +10,7 @@ extension:
10
10
  license: MIT
11
11
 
12
12
  requires:
13
- adspecs_version: ">=0.2.0"
13
+ adspecs_version: ">=0.1.0"
14
14
  tools:
15
15
  - name: git
16
16
  required: false
@@ -1,5 +1,5 @@
1
1
  # Git Branching Workflow Extension Configuration
2
- # Copied to .specify/extensions/git/git-config.yml on install
2
+ # Copied to .adspecs/extensions/git/git-config.yml on install
3
3
 
4
4
  # Branch numbering strategy: "sequential" (001, 002, ...) or "timestamp" (YYYYMMDD-HHMMSS)
5
5
  branch_numbering: sequential
@@ -11,7 +11,10 @@ init_commit_message: "[adspecs] Initial commit"
11
11
  # Set "default" to enable for all commands, then override per-command.
12
12
  # Each key can be true/false. Message is customizable per-command.
13
13
  auto_commit:
14
- default: false
14
+ default: false
15
+ before_prd:
16
+ enabled: false
17
+ message: "[adspecs] Save progress before prd"
15
18
  before_clarify:
16
19
  enabled: false
17
20
  message: "[adspecs] Save progress before clarification"
@@ -21,6 +24,12 @@ auto_commit:
21
24
  before_tasks:
22
25
  enabled: false
23
26
  message: "[adspecs] Save progress before task generation"
27
+ before_front-spec:
28
+ enabled: false
29
+ message: "[adspecs] Save progress before front-spec"
30
+ before_front-tasks:
31
+ enabled: false
32
+ message: "[adspecs] Save progress before front-tasks"
24
33
  before_implement:
25
34
  enabled: false
26
35
  message: "[adspecs] Save progress before implementation"
@@ -33,6 +42,9 @@ auto_commit:
33
42
  before_taskstoissues:
34
43
  enabled: false
35
44
  message: "[adspecs] Save progress before issue sync"
45
+ before_update_status:
46
+ enabled: false
47
+ message: "[adspecs] Save progress before update status"
36
48
  after_constitution:
37
49
  enabled: false
38
50
  message: "[adspecs] Add project constitution"
@@ -63,3 +75,6 @@ auto_commit:
63
75
  after_taskstoissues:
64
76
  enabled: false
65
77
  message: "[adspecs] Sync tasks to issues"
78
+ after_updatestatus:
79
+ enabled: true
80
+ message: "[adspecs] Sync update status"
@@ -50,6 +50,22 @@ hooks:
50
50
  optional: false
51
51
  prompt: Commit outstanding changes before task generation?
52
52
  description: Auto-commit before task generation
53
+ condition: null
54
+ before_front-spec:
55
+ - extension: git
56
+ command: adspecs.git.commit
57
+ enabled: false
58
+ optional: false
59
+ prompt: Commit outstanding changes before front-spec planning?
60
+ description: Auto-commit before front-spec planning
61
+ condition: null
62
+ before_front-tasks:
63
+ - extension: git
64
+ command: adspecs.git.commit
65
+ enabled: false
66
+ optional: false
67
+ prompt: Commit outstanding changes before front tasks generation?
68
+ description: Auto-commit before front tasks generation
53
69
  condition: null
54
70
  before_implement:
55
71
  - extension: git
@@ -130,6 +146,22 @@ hooks:
130
146
  optional: true
131
147
  prompt: Commit task changes?
132
148
  description: Auto-commit after task generation
149
+ condition: null
150
+ after_front-spec:
151
+ - extension: git
152
+ command: adspecs.git.commit
153
+ enabled: true
154
+ optional: true
155
+ prompt: Commit front-spec changes?
156
+ description: Auto-commit after implementation front-spec
157
+ condition: null
158
+ after_front-tasks:
159
+ - extension: git
160
+ command: adspecs.git.commit
161
+ enabled: true
162
+ optional: true
163
+ prompt: Commit front tasks changes?
164
+ description: Auto-commit after implementation front-tasks
133
165
  condition: null
134
166
  after_implement:
135
167
  - extension: git
@@ -1,16 +1,16 @@
1
- {
2
- "active": "",
3
- "features": [],
4
- "requirement": [],
5
- "prd": [],
6
- "frontDemos": [],
7
- "endDesigns": [],
8
- "frontDesigns": [],
9
- "endCodes": [],
10
- "frontCodes": [],
11
- "unitTests": [],
12
- "situationTests": [],
13
- "code-reviews": [],
14
- "uats": [],
15
- "depolys": []
16
- }
1
+ {
2
+ "active": "",
3
+ "features": [],
4
+ "requirement": [],
5
+ "prd": [],
6
+ "frontDemos": [],
7
+ "endDesigns": [],
8
+ "frontDesigns": [],
9
+ "endCodes": [],
10
+ "frontCodes": [],
11
+ "unitTests": [],
12
+ "situationTests": [],
13
+ "code-reviews": [],
14
+ "uats": [],
15
+ "depolys": []
16
+ }
@@ -1,28 +1,28 @@
1
- # adspecs Feature Tracking - YAML format
2
- # 此文件由 feature.json 自动同步生成,用于人类可读查看
3
- # 请勿直接编辑此文件,修改 feature.json 后重新生成
4
-
5
- active: ""
6
-
7
- features:
8
- # - id: "<功能ID>"
9
- # directory: "<resolved feature dir>"
10
- # filename: "<resolved feature filename>"
11
- # name: "<需求名称>"
12
- # phase: requirement
13
- # status: drafting
14
- # created: "<DATE>"
15
-
16
- # 阶段数组 — 各开发阶段的功能条目追踪
17
- requirement: [] # 业务需求分析
18
- prd: [] # 产品需求说明书
19
- frontDemos: [] # 前端演示项目
20
- endDesigns: [] # 后端系统设计
21
- frontDesigns: [] # 前端功能设计
22
- endCodes: [] # 后端代码实现
23
- frontCodes: [] # 前端代码实现
24
- unitTests: [] # 单元测试
25
- situationTests: [] # 系统集成测试
26
- code-reviews: [] # 代码评审
27
- uats: [] # 用户验收测试
28
- depolys: [] # 部署上线
1
+ # adspecs Feature Tracking - YAML format
2
+ # 此文件由 feature.json 自动同步生成,用于人类可读查看
3
+ # 请勿直接编辑此文件,修改 feature.json 后重新生成
4
+
5
+ active: ""
6
+
7
+ features:
8
+ # - id: "<功能ID>"
9
+ # directory: "<resolved feature dir>"
10
+ # filename: "<resolved feature filename>"
11
+ # name: "<需求名称>"
12
+ # phase: requirement
13
+ # status: drafting
14
+ # created: "<DATE>"
15
+
16
+ # 阶段数组 — 各开发阶段的功能条目追踪
17
+ requirement: [] # 业务需求分析
18
+ prd: [] # 产品需求说明书
19
+ frontDemos: [] # 前端演示项目
20
+ endDesigns: [] # 后端系统设计
21
+ frontDesigns: [] # 前端功能设计
22
+ endCodes: [] # 后端代码实现
23
+ frontCodes: [] # 前端代码实现
24
+ unitTests: [] # 单元测试
25
+ situationTests: [] # 系统集成测试
26
+ code-reviews: [] # 代码评审
27
+ uats: [] # 用户验收测试
28
+ depolys: [] # 部署上线
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "adspecs plugin path configuration",
3
+ "version": 1,
4
+ "paths": {
5
+ "biz_analysis_dir": "docs/00-customer-requirements",
6
+ "architecture_dir": "docs/10-architecture",
7
+ "research_output_dir": "docs/02-prd",
8
+ "sow_dir": "docs/05-sow",
9
+ "prd_dir": "docs/20-prd",
10
+ "design_dir": "docs/30-system-design",
11
+ "test_report_dir": "docs/80-development",
12
+ "export_dir": "docs/90-export",
13
+ "front_demo_dir": "front-demo",
14
+ "front_prototype_dir": "web-ui",
15
+ "wiki_dir": "wiki"
16
+ }
17
+ }
@@ -370,6 +370,9 @@ stateDiagram-v2
370
370
  - [如果有特殊的业务逻辑,描述清楚]
371
371
  - [如:需要调用第三方接口、需要特殊计算、需要特殊权限等]
372
372
 
373
+ **异常处理**:
374
+ - [详细描述异常场景业务逻辑,重点包括权限异常、数据为空、接口失败、重复提交、状态冲突、网络异常、历史数据兼容、用户中途退出]
375
+
373
376
  **业务实体**(若功能涉及数据,请包含):
374
377
  - **[实体1]**: [其代表的含义,未实现的关键属性]
375
378
  - **[实体2]**: [它代表什么,与其他实体的关系]
@@ -394,6 +397,7 @@ stateDiagram-v2
394
397
  - [原型文件路径]: [如:应收佣金(一期).html]
395
398
  - [原型页面说明]: [描述原型页面对应的功能,包括详细描述界面中各个按钮、字段之间的联动逻辑]
396
399
  ---
400
+
397
401
  #### 4.3.2 功能2: [功能编号] [功能名称]
398
402
 
399
403
  [按照上述格式继续描述。报表类功能可用"页面布局"小节替代操作流程;扫码/移动端功能可用"功能入口"小节列出各操作场景]
@@ -2,7 +2,7 @@ schema_version: "1.0"
2
2
  workflow:
3
3
  id: "adspecs"
4
4
  name: "Full SDD Cycle"
5
- version: "1.0.1"
5
+ version: "0.1.18"
6
6
  author: "GitHub"
7
7
  description: "Runs adspecs → plan → tasks → implement with review gates"
8
8
 
@@ -10,7 +10,7 @@ requires:
10
10
  # 0.8.5 is the first release with engine-side resolution of the
11
11
  # ``integration: "auto"`` default. Older versions would treat "auto"
12
12
  # as a literal integration key and fail at dispatch.
13
- adspecs_version: ">=1.0.1"
13
+ adspecs_version: ">=0.1.0"
14
14
  integrations:
15
15
  # The four commands below (adspecs, plan, tasks, implement) are core
16
16
  # adspecs commands provided by every integration. The list here is an
@@ -21,6 +21,7 @@ requires:
21
21
  # core commands referenced in ``steps``.
22
22
  any:
23
23
  - "claude"
24
+ - "qoder"
24
25
  - "copilot"
25
26
  - "gemini"
26
27
  - "opencode"
@@ -40,8 +41,8 @@ inputs:
40
41
  enum: ["full", "backend-only", "frontend-only"]
41
42
 
42
43
  steps:
43
- - id: biz-analysis
44
- command: adspecs.biz-analysis
44
+ - id: new-requirement
45
+ command: adspecs.new-requirement
45
46
  integration: "{{ inputs.integration }}"
46
47
  input:
47
48
  args: "{{ inputs.spec }}"
@@ -1,23 +1,23 @@
1
- {
2
- "name": "adspecs-marketplace",
3
- "owner": {
4
- "name": "Qingwen Chen",
5
- "email": "cqinwn@qq.com",
6
- "url": "https://gitee.com/yuebon/adspecs",
7
- "github": "https://gitee.com/yuebon/adspecs"
8
- },
9
- "plugins": [
10
- {
11
- "name": "adspecs",
12
- "description": "AI Coding研发协同开发插件",
13
- "version": "0.1.18",
14
- "source": "./",
15
- "author": {
16
- "name": "Qingwen Chen",
17
- "email": "cqinwn@qq.com",
18
- "url": "https://gitee.com/yuebon/adspecs",
19
- "github": "https://gitee.com/yuebon/adspecs"
20
- }
21
- }
22
- ]
23
- }
1
+ {
2
+ "name": "adspecs-marketplace",
3
+ "owner": {
4
+ "name": "Qingwen Chen",
5
+ "email": "cqinwn@qq.com",
6
+ "url": "https://gitee.com/yuebon/adspecs",
7
+ "github": "https://gitee.com/yuebon/adspecs"
8
+ },
9
+ "plugins": [
10
+ {
11
+ "name": "adspecs",
12
+ "description": "AI Coding研发协同开发插件",
13
+ "version": "0.1.20",
14
+ "source": "./",
15
+ "author": {
16
+ "name": "Qingwen Chen",
17
+ "email": "cqinwn@qq.com",
18
+ "url": "https://gitee.com/yuebon/adspecs",
19
+ "github": "https://gitee.com/yuebon/adspecs"
20
+ }
21
+ }
22
+ ]
23
+ }
@@ -1,18 +1,18 @@
1
- {
2
- "name": "adspecs",
3
- "displayName": "adspecs AI Plugin",
4
- "description": "AI first工程规范驱动开发插件",
5
- "version": "0.1.18",
6
- "author": {
7
- "name": "Qingwen Chen",
8
- "email": "cqinwn@qq.com",
9
- "url": "https://gitee.com/yuebon/adspecs"
10
- },
11
- "skills": "./skills/",
12
- "license": "apache-2.0",
13
- "keywords": [
14
- "adspecs",
15
- "ai",
16
- "development"
17
- ]
18
- }
1
+ {
2
+ "name": "adspecs",
3
+ "displayName": "adspecs AI Plugin",
4
+ "description": "AI first工程规范驱动开发插件",
5
+ "version": "0.1.20",
6
+ "author": {
7
+ "name": "Qingwen Chen",
8
+ "email": "cqinwn@qq.com",
9
+ "url": "https://gitee.com/yuebon/adspecs"
10
+ },
11
+ "skills": "./skills/",
12
+ "license": "apache-2.0",
13
+ "keywords": [
14
+ "adspecs",
15
+ "ai",
16
+ "development"
17
+ ]
18
+ }
@@ -1,31 +1,31 @@
1
- {
2
- "name": "adspecs",
3
- "displayName": "adspecs AI 工程规范驱动开发插件",
4
- "version": "0.1.18",
5
- "description": "AI-first specification-driven development plugin for ECP platform full-lifecycle development",
6
- "descriptionZh": "AI优先的工程规范驱动开发插件,覆盖需求分析、PRD、系统设计、任务拆解、TDD、代码评审、Wiki同步全流程",
7
- "author": {
8
- "name": "Qingwen Chen",
9
- "email": "cqinwn@qq.com"
10
- },
11
- "homepage": "https://gitee.com/yuebon/adspecs",
12
- "repository": "https://gitee.com/yuebon/adspecs",
13
- "logo": "./assets/avatar.svg",
14
- "keywords": [
15
- "qoder-plugin",
16
- "adspecs",
17
- "spec-driven",
18
- "tdd"
19
- ],
20
- "category": "developer-tools",
21
- "tags": [
22
- "skill",
23
- "specification",
24
- "tdd",
25
- "documentation"
26
- ],
27
- "skills": "./skills/",
28
- "rules": "./rules/",
29
- "hooks": "./hooks/hooks.json",
30
- "preserveUpstreamMetadata": true
31
- }
1
+ {
2
+ "name": "adspecs",
3
+ "displayName": "adspecs AI 工程规范驱动开发插件",
4
+ "version": "0.1.20",
5
+ "description": "AI-first specification-driven development plugin for ECP platform full-lifecycle development",
6
+ "descriptionZh": "AI优先的工程规范驱动开发插件,覆盖需求分析、PRD、系统设计、任务拆解、TDD、代码评审、Wiki同步全流程",
7
+ "author": {
8
+ "name": "Qingwen Chen",
9
+ "email": "cqinwn@qq.com"
10
+ },
11
+ "homepage": "https://gitee.com/yuebon/adspecs",
12
+ "repository": "https://gitee.com/yuebon/adspecs",
13
+ "logo": "./assets/avatar.svg",
14
+ "keywords": [
15
+ "qoder-plugin",
16
+ "adspecs",
17
+ "spec-driven",
18
+ "tdd"
19
+ ],
20
+ "category": "developer-tools",
21
+ "tags": [
22
+ "skill",
23
+ "specification",
24
+ "tdd",
25
+ "documentation"
26
+ ],
27
+ "skills": "./skills/",
28
+ "rules": "./rules/",
29
+ "hooks": "./hooks/hooks.json",
30
+ "preserveUpstreamMetadata": true
31
+ }
package/CLAUDE.md CHANGED
@@ -155,7 +155,7 @@ Skills support configurable output directories via `.adspecs/paths.json` in the
155
155
  - **`docs/40-project_conventions/`** — ECP coding standards (backend Java + frontend integration)
156
156
  - **`front-demo/`** — Vue 3 demo project (Vite + TypeScript + Element Plus) with `.claude/rules/` for `@gushen` component conventions
157
157
  - **`antd-front-demo/`** — Ant Design React demo project
158
- - **`web-ui/`** — ECP management console shell project
158
+ - **`web-ui/`** — management console shell project
159
159
 
160
160
  Additionally, `.adspecs/` at the plugin root contains:
161
161
 
@@ -166,10 +166,6 @@ Additionally, `.adspecs/` at the plugin root contains:
166
166
 
167
167
  ## Key Architecture Patterns
168
168
 
169
- ### ECP Platform Conventions (Backend)
170
-
171
- Backend code generated by this plugin follows strict ECP 10-rule coding standard: `BaseEntity` inheritance, `ReqeustCommonDataBean` (intentional platform typo), `BaseCommonDAO_HI`, no `QueryWrapper`, `II{Entity}` service interfaces, FastJSON for save / Spring BeanUtils for update, `@CheckToken` on all endpoints, 7-language i18n, `ResponseMsgCode` enum (no hardcoded strings). These rules are enforced in `adspecs-tasks` and reference convention docs.
172
-
173
169
  ### TDD Pipeline
174
170
 
175
171
  Task skills (`adspecs-tasks`, `adspecs-front-tasks`) follow strict RED→GREEN→REFACTOR ordering. Test tasks marked `[TDD]` must precede all implementation tasks within each user story phase.