@k0t0vich/meta-agents-template 0.1.4 → 0.1.6
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/CHANGELOG.md +14 -0
- package/README.md +5 -4
- package/agents.md +10 -10
- package/package.json +1 -1
- package/template/.github/workflows/gitflow-lite-verify.yml +7 -8
- package/template/.meta-agents/config/system.yaml +5 -6
- package/template/.meta-agents/prompts/agile-manager.md +5 -1
- package/template/.meta-agents/prompts/status-agent.md +1 -1
- package/template/.meta-agents/scripts/run-mr-review-gate.mjs +11 -5
- package/template/.meta-agents/scripts/run-review-gate.mjs +3 -3
- package/template/.meta-agents/scripts/sync-status.mjs +7 -10
- package/template/.meta-agents/scripts/task-branch-router.mjs +23 -9
- package/template/.meta-agents/scripts/verify-branch-strategy.mjs +0 -3
- package/template/.meta-agents/scripts/verify-commit-link.mjs +2 -3
- package/template/README.md +4 -3
- package/template/agents.md +10 -10
- package/template/tasks/task-status-log.md +1 -1
- package/template/tracker-command-template.md +17 -17
- package/tracker-command-template.md +18 -18
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this package are documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.6 - 2026-03-20
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- Switched governance/process docs to a single canonical task reference: GitHub `#issue`.
|
|
9
|
+
- Removed mixed prefixed task-id examples (`GOV-*`, `REL-*`, `DOC-*`, `DEV-*`) from workflow commands and policy text.
|
|
10
|
+
- Synchronized current project and template agent artifacts for canonical `#issue` usage (`agents.md`, `tracker-command-template.md`, prompts, branch-router warning, commit-link validation, release docs examples).
|
|
11
|
+
|
|
12
|
+
## 0.1.5 - 2026-03-20
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Removed legacy `codex/*` branch aliases from Git Flow Lite policy, docs, scripts, and CI branch validation.
|
|
16
|
+
- Standardized branch task-ref naming for atomic work (`GOV-*`, `REL-*`, `DOC-*`, `DEV-*`) with `issue-<number>` fallback.
|
|
17
|
+
- Updated branch-routing and status/review parsing so issue-based refs are handled consistently in `feature/issue-<n>-*` flows.
|
|
18
|
+
|
|
5
19
|
## 0.1.4 - 2026-03-20
|
|
6
20
|
|
|
7
21
|
### Added
|
package/README.md
CHANGED
|
@@ -133,7 +133,7 @@ npm run self:bootstrap
|
|
|
133
133
|
10. Есть отдельное явное подтверждение пользователя на прохождение review (`Review Approved: yes`).
|
|
134
134
|
11. Перед merge пройден MR review gate (`RUN_MR_REVIEW_GATE`) с финальным `PASS_CONFIRMED`.
|
|
135
135
|
12. Есть отдельное явное подтверждение пользователя на MR review (`MR Review Approved: yes`).
|
|
136
|
-
13. Каждый коммит связан с issue
|
|
136
|
+
13. Каждый коммит связан с issue (`#issue` в commit message).
|
|
137
137
|
|
|
138
138
|
Если хотя бы один пункт не выполнен, задача не принимается.
|
|
139
139
|
|
|
@@ -143,14 +143,14 @@ npm run self:bootstrap
|
|
|
143
143
|
```bash
|
|
144
144
|
npm run meta:verify
|
|
145
145
|
npm run meta:branch
|
|
146
|
-
npm run meta:task-start -- --task 12 --slug api-redirect
|
|
146
|
+
npm run meta:task-start -- --task #12 --slug api-redirect
|
|
147
147
|
npm run meta:review
|
|
148
148
|
npm run meta:review-approve
|
|
149
149
|
npm run meta:mr-review
|
|
150
150
|
npm run meta:mr-review-approve
|
|
151
151
|
npm run meta:verify-link
|
|
152
|
-
npm run meta:ops -- --command SET_STATUS --payload '{"task":"
|
|
153
|
-
npm run meta:ops -- --command PREPARE_TASK_BRANCH --payload '{"task":"12","slug":"api-redirect"}'
|
|
152
|
+
npm run meta:ops -- --command SET_STATUS --payload '{"task":"#12","status":"IN_PROGRESS"}'
|
|
153
|
+
npm run meta:ops -- --command PREPARE_TASK_BRANCH --payload '{"task":"#12","slug":"api-redirect"}'
|
|
154
154
|
npm run meta:status
|
|
155
155
|
```
|
|
156
156
|
|
|
@@ -158,6 +158,7 @@ npm run meta:status
|
|
|
158
158
|
`meta:branch` валидирует ветку по Git Flow Lite (`main`, `develop`, `feature/*`, `release/*`, `hotfix/*`).
|
|
159
159
|
`meta:task-start` делает branch-routing preflight: сравнивает задачу с текущей веткой, показывает dirty/ahead блокеры и готовит маршрут (`stay_on_current_branch` или `create_new_branch`).
|
|
160
160
|
`meta:task-start` также делает context-protection check для `agents.md` между текущей и базовой веткой и требует явного подтверждения при diff.
|
|
161
|
+
Именование branch task ref: использовать GitHub issue ref в формате `issue-<number>`.
|
|
161
162
|
`meta:mr-review` формирует сводный pre-merge отчёт по MR/PR, `meta:mr-review-approve` фиксирует финальный PASS после подтверждения пользователя.
|
|
162
163
|
`meta:status` отдаёт единый статус-срез: trackers used, current sprint, current task, current branch context, git uncommitted и summary.
|
|
163
164
|
В `github` режиме локальные `tasks/*` по умолчанию считаются cache/legacy и не являются источником истины.
|
package/agents.md
CHANGED
|
@@ -139,7 +139,6 @@ Name: <agent role>
|
|
|
139
139
|
Обязательное правило:
|
|
140
140
|
- для режима `git_flow_lite` статусный цикл задачи фиксируется как `TODO -> IN_PROGRESS -> REVIEW -> READY -> DONE` (для релизных задач дополнительно `-> PUBLISH`);
|
|
141
141
|
- рабочие ветки: `feature/*`, `release/*`, `hotfix/*`; долгоживущие ветки: `develop`, `main`;
|
|
142
|
-
- для агентных веток также допускаются `codex/feature/*`, `codex/release/*`, `codex/hotfix/*`;
|
|
143
142
|
- интеграционные правила: `feature/* -> develop`, `release/* -> main` + back-merge в `develop`, `hotfix/* -> main` + back-merge в `develop`;
|
|
144
143
|
- `RUN_REVIEW_GATE` сначала формирует отчёт ревьювера и рекомендацию (`PASS_CANDIDATE`/`FAIL`);
|
|
145
144
|
- финальный `RUN_REVIEW_GATE: PASS_CONFIRMED` допускается только после явного подтверждения пользователя `Review Approved: yes`;
|
|
@@ -149,7 +148,7 @@ Name: <agent role>
|
|
|
149
148
|
- без подтверждения пользователя максимум допустимого статуса: `REVIEW`.
|
|
150
149
|
- `SET_STATUS -> READY` разрешён только после `RUN_REVIEW_GATE: PASS_CONFIRMED`.
|
|
151
150
|
- для задач реализации по умолчанию используется отдельная ветка `feature/*`; прямой рабочий поток на `develop`/`main` не допускается.
|
|
152
|
-
- сообщение коммита обязано содержать ссылку на задачу (
|
|
151
|
+
- сообщение коммита обязано содержать ссылку на задачу (`#issue-number`).
|
|
153
152
|
- `READY` означает: коммит сделан и отправлен (`push`) в `feature/*`, `release/*` или `hotfix/*` с открытым PR по правилам ветвления.
|
|
154
153
|
- `DONE` означает: изменения интегрированы в `main`; для `release/*` и `hotfix/*` подтверждён back-merge в `develop`.
|
|
155
154
|
- `PUBLISH` означает: релиз опубликован и доступен в последней версии пакета.
|
|
@@ -166,13 +165,14 @@ Name: <agent role>
|
|
|
166
165
|
## 10.2) Обязательная маршрутизация ветки для Agile Manager Agent
|
|
167
166
|
Перед началом реализации агент обязан:
|
|
168
167
|
1. Проверить веточный контекст через `meta:status`.
|
|
169
|
-
2. Запустить branch-routing preflight через `meta:task-start -- --task
|
|
170
|
-
3.
|
|
171
|
-
4. Если задача
|
|
172
|
-
5.
|
|
173
|
-
6.
|
|
174
|
-
7.
|
|
175
|
-
8.
|
|
168
|
+
2. Запустить branch-routing preflight через `meta:task-start -- --task <#issue> --slug <slug> --kind atomic|feature|release|hotfix`.
|
|
169
|
+
3. В названии рабочей ветки использовать GitHub issue ref в формате `issue-<number>` (например, `feature/issue-21-canonical-github-issue-id`).
|
|
170
|
+
4. Если задача относится к текущей feature-ветке (атомарная подзадача), продолжить в этой ветке только после подтверждения пользователя.
|
|
171
|
+
5. Если задача не относится к текущей ветке, проверить незакоммиченные изменения и непушенные коммиты.
|
|
172
|
+
6. Согласовать с пользователем способ обработки (`commit/stash/discard/push`).
|
|
173
|
+
7. Переключиться на базовую ветку (`develop` или `main`) и обновить её.
|
|
174
|
+
8. Создать новую рабочую ветку по Git Flow Lite.
|
|
175
|
+
9. Перед переключением проверить консистентность `agents.md` между текущей и базовой веткой; при отличиях показать явное предупреждение и запросить подтверждение пользователя.
|
|
176
176
|
|
|
177
177
|
Без этого preflight выполнение реализации запрещено.
|
|
178
178
|
|
|
@@ -199,7 +199,7 @@ Name: <agent role>
|
|
|
199
199
|
19. Для статуса `DONE` подтверждена интеграция в `main`; для `release/*` и `hotfix/*` подтверждён back-merge в `develop`.
|
|
200
200
|
20. Для статуса `PUBLISH` подтверждена публикация в последней версии.
|
|
201
201
|
21. Для релиза обновлён публичный `CHANGELOG.md`.
|
|
202
|
-
22. Коммит содержит ссылку на issue
|
|
202
|
+
22. Коммит содержит ссылку на issue (`#issue`).
|
|
203
203
|
23. Для branch routing собран e2e evidence по двум сценариям: `same feature` и `different feature`.
|
|
204
204
|
24. Перед `--apply` подтверждена консистентность контекста `agents.md` (или явно подтверждён осознанный switch при diff).
|
|
205
205
|
|
package/package.json
CHANGED
|
@@ -8,9 +8,6 @@ on:
|
|
|
8
8
|
- 'feature/**'
|
|
9
9
|
- 'release/**'
|
|
10
10
|
- 'hotfix/**'
|
|
11
|
-
- 'codex/feature/**'
|
|
12
|
-
- 'codex/release/**'
|
|
13
|
-
- 'codex/hotfix/**'
|
|
14
11
|
pull_request:
|
|
15
12
|
branches:
|
|
16
13
|
- main
|
|
@@ -34,7 +31,7 @@ jobs:
|
|
|
34
31
|
run: |
|
|
35
32
|
BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}"
|
|
36
33
|
echo "Branch: $BRANCH"
|
|
37
|
-
if [[ "$BRANCH" =~ ^(main|develop|feature/.+|release/.+|hotfix
|
|
34
|
+
if [[ "$BRANCH" =~ ^(main|develop|feature/.+|release/.+|hotfix/.+)$ ]]; then
|
|
38
35
|
echo "Branch naming PASS"
|
|
39
36
|
else
|
|
40
37
|
echo "Branch naming FAIL: '$BRANCH' is not Git Flow Lite compatible"
|
|
@@ -48,7 +45,9 @@ jobs:
|
|
|
48
45
|
node --check .meta-agents/scripts/task-branch-router.mjs
|
|
49
46
|
npm run meta:verify
|
|
50
47
|
npm run meta:status -- --json
|
|
51
|
-
npm run meta:task-start -- --task 101 --slug verify --json
|
|
48
|
+
npm run meta:task-start -- --task GOV-101 --slug verify --json
|
|
49
|
+
git config user.name "Meta Agents CI"
|
|
50
|
+
git config user.email "meta-agents@example.com"
|
|
52
51
|
|
|
53
52
|
- name: Validate branch routing e2e scenarios
|
|
54
53
|
shell: bash
|
|
@@ -56,8 +55,8 @@ jobs:
|
|
|
56
55
|
git add -A
|
|
57
56
|
git commit -m "ci: bootstrap routing check"
|
|
58
57
|
git branch develop
|
|
59
|
-
git checkout -b
|
|
60
|
-
node .meta-agents/scripts/task-branch-router.mjs --task 101 --slug routing --json > /tmp/same-feature.json
|
|
58
|
+
git checkout -b feature/gov-101-routing
|
|
59
|
+
node .meta-agents/scripts/task-branch-router.mjs --task GOV-101 --slug routing --json > /tmp/same-feature.json
|
|
61
60
|
node -e 'const fs=require("fs"); const d=JSON.parse(fs.readFileSync("/tmp/same-feature.json","utf8")); if (d.decision !== "stay_on_current_branch") { console.error("Expected stay_on_current_branch"); process.exit(1); }'
|
|
62
|
-
node .meta-agents/scripts/task-branch-router.mjs --task 202 --slug routing --json > /tmp/cross-feature.json
|
|
61
|
+
node .meta-agents/scripts/task-branch-router.mjs --task GOV-202 --slug routing --json > /tmp/cross-feature.json
|
|
63
62
|
node -e 'const fs=require("fs"); const d=JSON.parse(fs.readFileSync("/tmp/cross-feature.json","utf8")); if (d.decision !== "create_new_branch") { console.error("Expected create_new_branch"); process.exit(1); }'
|
|
@@ -83,18 +83,18 @@ system:
|
|
|
83
83
|
- main
|
|
84
84
|
- develop
|
|
85
85
|
working_branches:
|
|
86
|
-
feature: "feature/<task-
|
|
86
|
+
feature: "feature/<task-ref>-<slug>"
|
|
87
87
|
release: "release/vX.Y.Z"
|
|
88
|
-
hotfix: "hotfix/<task-
|
|
88
|
+
hotfix: "hotfix/<task-ref>-<slug>"
|
|
89
|
+
task_ref_policy:
|
|
90
|
+
canonical_format: "#<number>"
|
|
91
|
+
branch_format: "issue-<number>"
|
|
89
92
|
allowed_branch_patterns:
|
|
90
93
|
- "^main$"
|
|
91
94
|
- "^develop$"
|
|
92
95
|
- "^feature/.+"
|
|
93
96
|
- "^release/.+"
|
|
94
97
|
- "^hotfix/.+"
|
|
95
|
-
- "^codex/feature/.+"
|
|
96
|
-
- "^codex/release/.+"
|
|
97
|
-
- "^codex/hotfix/.+"
|
|
98
98
|
merge_rules:
|
|
99
99
|
- "feature/* -> develop"
|
|
100
100
|
- "release/* -> main and back-merge to develop"
|
|
@@ -208,7 +208,6 @@ system:
|
|
|
208
208
|
commit_linkage:
|
|
209
209
|
required: true
|
|
210
210
|
accepted_patterns:
|
|
211
|
-
- "TASK-ID"
|
|
212
211
|
- "#issue"
|
|
213
212
|
publish_flow:
|
|
214
213
|
changelog_required: true
|
|
@@ -7,7 +7,7 @@ Rule: для большой фичи в GitHub tracker сначала предл
|
|
|
7
7
|
|
|
8
8
|
Branch routing protocol (обязателен для задач реализации):
|
|
9
9
|
1. Сначала снять контекст: `npm run meta:status -- --json`.
|
|
10
|
-
2. Проверить маршрут ветки: `npm run meta:task-start -- --task
|
|
10
|
+
2. Проверить маршрут ветки: `npm run meta:task-start -- --task <#issue> --slug <slug> --kind atomic`.
|
|
11
11
|
3. Если `route=stay_on_current_branch`, задача считается атомарной внутри текущей feature-ветки.
|
|
12
12
|
4. Если `route=create_new_branch`, перед началом реализации обязательно перейти на базовую ветку (`develop` для feature/release, `main` для hotfix), обновить её и создать новую рабочую ветку.
|
|
13
13
|
5. Создание/переключение ветки выполнять только после явного подтверждения пользователя (`--apply`).
|
|
@@ -18,6 +18,10 @@ Mandatory user dialogue before branch switch:
|
|
|
18
18
|
- подтвердить обработку непушенных коммитов (`ahead > 0`);
|
|
19
19
|
- подтвердить финальный switch/create.
|
|
20
20
|
|
|
21
|
+
Task ref naming rule:
|
|
22
|
+
- использовать GitHub issue ref как единственный канонический идентификатор (`#<number>`);
|
|
23
|
+
- в имени ветки использовать формат `issue-<number>`.
|
|
24
|
+
|
|
21
25
|
Pre-merge rule:
|
|
22
26
|
- после commit+push и открытия PR обязательно выполнить `RUN_MR_REVIEW_GATE`;
|
|
23
27
|
- merge допускается только после `RUN_MR_REVIEW_GATE: PASS_CONFIRMED` и явного `MR Review Approved: yes` от пользователя.
|
|
@@ -21,7 +21,7 @@ Output format (обязательный):
|
|
|
21
21
|
Tooling:
|
|
22
22
|
- Основной путь: `npm run meta:status`.
|
|
23
23
|
- Для machine-readable вывода можно использовать `npm run meta:status -- --json`.
|
|
24
|
-
- Для веточного preflight по конкретной задаче: `npm run meta:task-start -- --task
|
|
24
|
+
- Для веточного preflight по конкретной задаче: `npm run meta:task-start -- --task <#issue> --slug <slug>`.
|
|
25
25
|
|
|
26
26
|
Rule:
|
|
27
27
|
- В `github` режиме локальные `tasks/*` не считать авторитетным источником по умолчанию; рассматривать только как cache/legacy artifacts.
|
|
@@ -77,13 +77,13 @@ function classifyBranch(branch) {
|
|
|
77
77
|
if (/^develop$/.test(branch)) {
|
|
78
78
|
return "develop";
|
|
79
79
|
}
|
|
80
|
-
if (/^feature\/.+/.test(branch)
|
|
80
|
+
if (/^feature\/.+/.test(branch)) {
|
|
81
81
|
return "feature";
|
|
82
82
|
}
|
|
83
|
-
if (/^release\/.+/.test(branch)
|
|
83
|
+
if (/^release\/.+/.test(branch)) {
|
|
84
84
|
return "release";
|
|
85
85
|
}
|
|
86
|
-
if (/^hotfix\/.+/.test(branch)
|
|
86
|
+
if (/^hotfix\/.+/.test(branch)) {
|
|
87
87
|
return "hotfix";
|
|
88
88
|
}
|
|
89
89
|
return "unknown";
|
|
@@ -105,7 +105,7 @@ function extractTaskRefs(text) {
|
|
|
105
105
|
refs.add(ref);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const taskMatches = source.match(/\b[A-
|
|
108
|
+
const taskMatches = source.match(/\b[A-Za-z][A-Za-z0-9_]*-\d+\b/g) || [];
|
|
109
109
|
for (const ref of taskMatches) {
|
|
110
110
|
refs.add(ref.toUpperCase());
|
|
111
111
|
}
|
|
@@ -277,7 +277,13 @@ function gatherTaskRefs(context) {
|
|
|
277
277
|
refs.add(`#${branchIssue[1]}`);
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
const
|
|
280
|
+
const branchIssueToken = String(context.branch || "").match(/(?:^|\/)issue-(\d+)(?:-|$)/i);
|
|
281
|
+
if (branchIssueToken) {
|
|
282
|
+
refs.add(`#${branchIssueToken[1]}`);
|
|
283
|
+
refs.add(`ISSUE-${branchIssueToken[1]}`);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const branchTask = String(context.branch || "").match(/([A-Za-z][A-Za-z0-9_]*-\d+)/);
|
|
281
287
|
if (branchTask) {
|
|
282
288
|
refs.add(branchTask[1].toUpperCase());
|
|
283
289
|
}
|
|
@@ -62,13 +62,13 @@ function classifyBranch(branch) {
|
|
|
62
62
|
if (/^develop$/.test(branch)) {
|
|
63
63
|
return "develop";
|
|
64
64
|
}
|
|
65
|
-
if (/^feature\/.+/.test(branch)
|
|
65
|
+
if (/^feature\/.+/.test(branch)) {
|
|
66
66
|
return "feature";
|
|
67
67
|
}
|
|
68
|
-
if (/^release\/.+/.test(branch)
|
|
68
|
+
if (/^release\/.+/.test(branch)) {
|
|
69
69
|
return "release";
|
|
70
70
|
}
|
|
71
|
-
if (/^hotfix\/.+/.test(branch)
|
|
71
|
+
if (/^hotfix\/.+/.test(branch)) {
|
|
72
72
|
return "hotfix";
|
|
73
73
|
}
|
|
74
74
|
return "unknown";
|
|
@@ -12,9 +12,6 @@ const BRANCH_PATTERNS = [
|
|
|
12
12
|
{ type: "feature", regex: /^feature\/.+/ },
|
|
13
13
|
{ type: "release", regex: /^release\/.+/ },
|
|
14
14
|
{ type: "hotfix", regex: /^hotfix\/.+/ },
|
|
15
|
-
{ type: "feature", regex: /^codex\/feature\/.+/ },
|
|
16
|
-
{ type: "release", regex: /^codex\/release\/.+/ },
|
|
17
|
-
{ type: "hotfix", regex: /^codex\/hotfix\/.+/ },
|
|
18
15
|
];
|
|
19
16
|
|
|
20
17
|
function parseArgs(argv) {
|
|
@@ -258,8 +255,9 @@ function detectTaskFromBranch(branch) {
|
|
|
258
255
|
if (!taskRef) {
|
|
259
256
|
return "";
|
|
260
257
|
}
|
|
261
|
-
|
|
262
|
-
|
|
258
|
+
const issueMatch = taskRef.match(/^ISSUE-(\d+)$/);
|
|
259
|
+
if (issueMatch) {
|
|
260
|
+
return `#${issueMatch[1]}`;
|
|
263
261
|
}
|
|
264
262
|
return taskRef;
|
|
265
263
|
}
|
|
@@ -280,21 +278,20 @@ function extractBranchTaskRef(branch) {
|
|
|
280
278
|
return "";
|
|
281
279
|
}
|
|
282
280
|
|
|
283
|
-
const
|
|
284
|
-
const match = normalized.match(/^(feature|release|hotfix)\/(.+)$/);
|
|
281
|
+
const match = source.match(/^(feature|release|hotfix)\/(.+)$/);
|
|
285
282
|
if (!match) {
|
|
286
283
|
return "";
|
|
287
284
|
}
|
|
288
285
|
|
|
289
286
|
const tail = match[2];
|
|
290
|
-
const uppercaseToken = tail.match(/^([A-
|
|
287
|
+
const uppercaseToken = tail.match(/^([A-Za-z][A-Za-z0-9_]*-\d+)/);
|
|
291
288
|
if (uppercaseToken) {
|
|
292
289
|
return uppercaseToken[1].toUpperCase();
|
|
293
290
|
}
|
|
294
291
|
|
|
295
292
|
const numericToken = tail.match(/^(\d+)(?:-|$)/);
|
|
296
293
|
if (numericToken) {
|
|
297
|
-
return numericToken[1]
|
|
294
|
+
return `ISSUE-${numericToken[1]}`;
|
|
298
295
|
}
|
|
299
296
|
|
|
300
297
|
return "";
|
|
@@ -308,7 +305,7 @@ function extractTaskRefFromCurrentTask(currentTask) {
|
|
|
308
305
|
|
|
309
306
|
const issueMatch = source.match(/#(\d+)/);
|
|
310
307
|
if (issueMatch) {
|
|
311
|
-
return issueMatch[1]
|
|
308
|
+
return `ISSUE-${issueMatch[1]}`;
|
|
312
309
|
}
|
|
313
310
|
|
|
314
311
|
const taskMatch = source.match(/\b([A-Z][A-Z0-9_]*-\d+)\b/);
|
|
@@ -7,9 +7,6 @@ const BRANCH_PATTERNS = [
|
|
|
7
7
|
{ type: "feature", regex: /^feature\/.+/ },
|
|
8
8
|
{ type: "release", regex: /^release\/.+/ },
|
|
9
9
|
{ type: "hotfix", regex: /^hotfix\/.+/ },
|
|
10
|
-
{ type: "feature", regex: /^codex\/feature\/.+/ },
|
|
11
|
-
{ type: "release", regex: /^codex\/release\/.+/ },
|
|
12
|
-
{ type: "hotfix", regex: /^codex\/hotfix\/.+/ },
|
|
13
10
|
];
|
|
14
11
|
|
|
15
12
|
const TASK_KIND_MAP = {
|
|
@@ -180,8 +177,7 @@ function extractBranchTaskRef(branch) {
|
|
|
180
177
|
return "";
|
|
181
178
|
}
|
|
182
179
|
|
|
183
|
-
const
|
|
184
|
-
const match = normalized.match(/^(feature|release|hotfix)\/(.+)$/);
|
|
180
|
+
const match = source.match(/^(feature|release|hotfix)\/(.+)$/);
|
|
185
181
|
if (!match) {
|
|
186
182
|
return "";
|
|
187
183
|
}
|
|
@@ -194,7 +190,7 @@ function extractBranchTaskRef(branch) {
|
|
|
194
190
|
|
|
195
191
|
const issueMatch = tail.match(/^(\d+)(?:-|$)/);
|
|
196
192
|
if (issueMatch) {
|
|
197
|
-
return issueMatch[1]
|
|
193
|
+
return `ISSUE-${issueMatch[1]}`;
|
|
198
194
|
}
|
|
199
195
|
|
|
200
196
|
return "";
|
|
@@ -208,12 +204,12 @@ function normalizeTaskRef(task) {
|
|
|
208
204
|
|
|
209
205
|
const issue = source.match(/^#?(\d+)$/);
|
|
210
206
|
if (issue) {
|
|
211
|
-
return issue[1]
|
|
207
|
+
return `ISSUE-${issue[1]}`;
|
|
212
208
|
}
|
|
213
209
|
|
|
214
210
|
const fromBodyIssue = source.match(/#(\d+)/);
|
|
215
211
|
if (fromBodyIssue) {
|
|
216
|
-
return fromBodyIssue[1]
|
|
212
|
+
return `ISSUE-${fromBodyIssue[1]}`;
|
|
217
213
|
}
|
|
218
214
|
|
|
219
215
|
const taskRef = source.match(/([A-Za-z][A-Za-z0-9_]*-\d+)/);
|
|
@@ -249,7 +245,7 @@ function defaultBaseBranch(kind) {
|
|
|
249
245
|
}
|
|
250
246
|
|
|
251
247
|
function buildTargetBranch({ kind, taskRef, slug }) {
|
|
252
|
-
const prefix =
|
|
248
|
+
const prefix = kind;
|
|
253
249
|
const taskPart = slugify(taskRef) || "task";
|
|
254
250
|
const slugPart = slugify(slug) || "work";
|
|
255
251
|
if (slugPart === taskPart) {
|
|
@@ -377,6 +373,7 @@ function buildPlan(options, gitContext) {
|
|
|
377
373
|
});
|
|
378
374
|
|
|
379
375
|
const blockers = [];
|
|
376
|
+
const namingWarnings = [];
|
|
380
377
|
const requiresDialogue = [];
|
|
381
378
|
|
|
382
379
|
if (!sameFeature && gitContext.dirty && !options.allowDirty) {
|
|
@@ -393,6 +390,12 @@ function buildPlan(options, gitContext) {
|
|
|
393
390
|
);
|
|
394
391
|
}
|
|
395
392
|
|
|
393
|
+
if (!/^ISSUE-\d+$/.test(taskRef)) {
|
|
394
|
+
namingWarnings.push(
|
|
395
|
+
"Canonical task ref should be GitHub issue number (#<number>) so branch naming stays issue-<number>.",
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
|
|
396
399
|
if (sameFeature) {
|
|
397
400
|
requiresDialogue.push(
|
|
398
401
|
"Задача атомарная и относится к текущей feature-ветке. Подтвердите, что продолжаем работу в этой ветке.",
|
|
@@ -414,6 +417,7 @@ function buildPlan(options, gitContext) {
|
|
|
414
417
|
current: gitContext,
|
|
415
418
|
targetBranch,
|
|
416
419
|
blockers,
|
|
420
|
+
namingWarnings,
|
|
417
421
|
contextWarnings: getContextWarnings(baseBranch),
|
|
418
422
|
requiresDialogue,
|
|
419
423
|
suggestedCommands: sameFeature
|
|
@@ -466,6 +470,16 @@ function printPlan(plan, applyResult) {
|
|
|
466
470
|
}
|
|
467
471
|
}
|
|
468
472
|
|
|
473
|
+
console.log("");
|
|
474
|
+
console.log("## Naming Warnings");
|
|
475
|
+
if (plan.namingWarnings.length === 0) {
|
|
476
|
+
console.log("- none");
|
|
477
|
+
} else {
|
|
478
|
+
for (const warning of plan.namingWarnings) {
|
|
479
|
+
console.log(`- ${warning}`);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
469
483
|
console.log("");
|
|
470
484
|
console.log("## Required User Dialogue");
|
|
471
485
|
for (const line of plan.requiresDialogue) {
|
|
@@ -7,9 +7,6 @@ const BRANCH_PATTERNS = [
|
|
|
7
7
|
{ type: "feature", regex: /^feature\/.+/ },
|
|
8
8
|
{ type: "release", regex: /^release\/.+/ },
|
|
9
9
|
{ type: "hotfix", regex: /^hotfix\/.+/ },
|
|
10
|
-
{ type: "feature", regex: /^codex\/feature\/.+/ },
|
|
11
|
-
{ type: "release", regex: /^codex\/release\/.+/ },
|
|
12
|
-
{ type: "hotfix", regex: /^codex\/hotfix\/.+/ },
|
|
13
10
|
];
|
|
14
11
|
|
|
15
12
|
function git(args, allowFailure = false) {
|
|
@@ -8,8 +8,7 @@ function readLastCommitSubject(ref = "HEAD") {
|
|
|
8
8
|
|
|
9
9
|
function validateMessage(message) {
|
|
10
10
|
const hasIssueNumber = /#\d+\b/.test(message);
|
|
11
|
-
|
|
12
|
-
return hasIssueNumber || hasTaskId;
|
|
11
|
+
return hasIssueNumber;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
function parseArgs(argv) {
|
|
@@ -49,7 +48,7 @@ function main() {
|
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
if (!validateMessage(message)) {
|
|
52
|
-
console.error("Commit link FAIL: message must contain
|
|
51
|
+
console.error("Commit link FAIL: message must contain #issue.");
|
|
53
52
|
console.error(`Message: ${message}`);
|
|
54
53
|
process.exit(1);
|
|
55
54
|
}
|
package/template/README.md
CHANGED
|
@@ -50,14 +50,14 @@
|
|
|
50
50
|
```bash
|
|
51
51
|
npm run meta:verify
|
|
52
52
|
npm run meta:branch
|
|
53
|
-
npm run meta:task-start -- --task 12 --slug api-redirect
|
|
53
|
+
npm run meta:task-start -- --task #12 --slug api-redirect
|
|
54
54
|
npm run meta:review
|
|
55
55
|
npm run meta:review-approve
|
|
56
56
|
npm run meta:mr-review
|
|
57
57
|
npm run meta:mr-review-approve
|
|
58
58
|
npm run meta:verify-link
|
|
59
|
-
npm run meta:ops -- --command SET_STATUS --payload '{"task":"
|
|
60
|
-
npm run meta:ops -- --command PREPARE_TASK_BRANCH --payload '{"task":"12","slug":"api-redirect"}'
|
|
59
|
+
npm run meta:ops -- --command SET_STATUS --payload '{"task":"#12","status":"IN_PROGRESS"}'
|
|
60
|
+
npm run meta:ops -- --command PREPARE_TASK_BRANCH --payload '{"task":"#12","slug":"api-redirect"}'
|
|
61
61
|
npm run meta:status
|
|
62
62
|
```
|
|
63
63
|
|
|
@@ -66,6 +66,7 @@ npm run meta:status
|
|
|
66
66
|
`meta:branch` валидирует ветку по Git Flow Lite (`main`, `develop`, `feature/*`, `release/*`, `hotfix/*`).
|
|
67
67
|
`meta:task-start` делает branch-routing preflight: сравнивает задачу с текущей веткой, показывает dirty/ahead блокеры и готовит маршрут (`stay_on_current_branch` или `create_new_branch`).
|
|
68
68
|
`meta:task-start` также делает context-protection check для `agents.md` между текущей и базовой веткой и требует явного подтверждения при diff.
|
|
69
|
+
Именование branch task ref: использовать GitHub issue ref в формате `issue-<number>`.
|
|
69
70
|
`meta:mr-review` формирует сводный pre-merge отчёт по MR/PR, `meta:mr-review-approve` фиксирует финальный PASS после подтверждения пользователя.
|
|
70
71
|
|
|
71
72
|
`meta:status` выдаёт сводный статус:
|
package/template/agents.md
CHANGED
|
@@ -139,7 +139,6 @@ Name: <agent role>
|
|
|
139
139
|
Обязательное правило:
|
|
140
140
|
- для режима `git_flow_lite` статусный цикл задачи фиксируется как `TODO -> IN_PROGRESS -> REVIEW -> READY -> DONE` (для релизных задач дополнительно `-> PUBLISH`);
|
|
141
141
|
- рабочие ветки: `feature/*`, `release/*`, `hotfix/*`; долгоживущие ветки: `develop`, `main`;
|
|
142
|
-
- для агентных веток также допускаются `codex/feature/*`, `codex/release/*`, `codex/hotfix/*`;
|
|
143
142
|
- интеграционные правила: `feature/* -> develop`, `release/* -> main` + back-merge в `develop`, `hotfix/* -> main` + back-merge в `develop`;
|
|
144
143
|
- `RUN_REVIEW_GATE` сначала формирует отчёт ревьювера и рекомендацию (`PASS_CANDIDATE`/`FAIL`);
|
|
145
144
|
- финальный `RUN_REVIEW_GATE: PASS_CONFIRMED` допускается только после явного подтверждения пользователя `Review Approved: yes`;
|
|
@@ -149,7 +148,7 @@ Name: <agent role>
|
|
|
149
148
|
- без подтверждения пользователя максимум допустимого статуса: `REVIEW`.
|
|
150
149
|
- `SET_STATUS -> READY` разрешён только после `RUN_REVIEW_GATE: PASS_CONFIRMED`.
|
|
151
150
|
- для задач реализации по умолчанию используется отдельная ветка `feature/*`; прямой рабочий поток на `develop`/`main` не допускается.
|
|
152
|
-
- сообщение коммита обязано содержать ссылку на задачу (
|
|
151
|
+
- сообщение коммита обязано содержать ссылку на задачу (`#issue-number`).
|
|
153
152
|
- `READY` означает: коммит сделан и отправлен (`push`) в `feature/*`, `release/*` или `hotfix/*` с открытым PR по правилам ветвления.
|
|
154
153
|
- `DONE` означает: изменения интегрированы в `main`; для `release/*` и `hotfix/*` подтверждён back-merge в `develop`.
|
|
155
154
|
- `PUBLISH` означает: релиз опубликован и доступен в последней версии пакета.
|
|
@@ -166,13 +165,14 @@ Name: <agent role>
|
|
|
166
165
|
## 10.2) Обязательная маршрутизация ветки для Agile Manager Agent
|
|
167
166
|
Перед началом реализации агент обязан:
|
|
168
167
|
1. Проверить веточный контекст через `meta:status`.
|
|
169
|
-
2. Запустить branch-routing preflight через `meta:task-start -- --task
|
|
170
|
-
3.
|
|
171
|
-
4. Если задача
|
|
172
|
-
5.
|
|
173
|
-
6.
|
|
174
|
-
7.
|
|
175
|
-
8.
|
|
168
|
+
2. Запустить branch-routing preflight через `meta:task-start -- --task <#issue> --slug <slug> --kind atomic|feature|release|hotfix`.
|
|
169
|
+
3. В названии рабочей ветки использовать GitHub issue ref в формате `issue-<number>` (например, `feature/issue-21-canonical-github-issue-id`).
|
|
170
|
+
4. Если задача относится к текущей feature-ветке (атомарная подзадача), продолжить в этой ветке только после подтверждения пользователя.
|
|
171
|
+
5. Если задача не относится к текущей ветке, проверить незакоммиченные изменения и непушенные коммиты.
|
|
172
|
+
6. Согласовать с пользователем способ обработки (`commit/stash/discard/push`).
|
|
173
|
+
7. Переключиться на базовую ветку (`develop` или `main`) и обновить её.
|
|
174
|
+
8. Создать новую рабочую ветку по Git Flow Lite.
|
|
175
|
+
9. Перед переключением проверить консистентность `agents.md` между текущей и базовой веткой; при отличиях показать явное предупреждение и запросить подтверждение пользователя.
|
|
176
176
|
|
|
177
177
|
Без этого preflight выполнение реализации запрещено.
|
|
178
178
|
|
|
@@ -199,7 +199,7 @@ Name: <agent role>
|
|
|
199
199
|
19. Для статуса `DONE` подтверждена интеграция в `main`; для `release/*` и `hotfix/*` подтверждён back-merge в `develop`.
|
|
200
200
|
20. Для статуса `PUBLISH` подтверждена публикация в последней версии.
|
|
201
201
|
21. Для релиза обновлён публичный `CHANGELOG.md`.
|
|
202
|
-
22. Коммит содержит ссылку на issue
|
|
202
|
+
22. Коммит содержит ссылку на issue (`#issue`).
|
|
203
203
|
23. Для branch routing собран e2e evidence по двум сценариям: `same feature` и `different feature`.
|
|
204
204
|
24. Перед `--apply` подтверждена консистентность контекста `agents.md` (или явно подтверждён осознанный switch при diff).
|
|
205
205
|
|
|
@@ -26,7 +26,7 @@ Reason: Обязательная проверка соблюдения PRD и к
|
|
|
26
26
|
Name: Governance Watchdog Agent
|
|
27
27
|
|
|
28
28
|
Governance Watchdog Agent: verify governance gate,
|
|
29
|
-
task
|
|
29
|
+
task <#issue>,
|
|
30
30
|
required checks "prd_sections_complete, acceptance_defined, user_confirmation_policy_respected",
|
|
31
31
|
result PASS
|
|
32
32
|
```
|
|
@@ -53,7 +53,6 @@ result PASS
|
|
|
53
53
|
Дополнительно для коммита:
|
|
54
54
|
- для `git_flow_lite` используется цикл `TODO -> IN_PROGRESS -> REVIEW -> READY -> DONE` (для релизных задач дополнительно `-> PUBLISH`);
|
|
55
55
|
- рабочие ветки: `feature/*`, `release/*`, `hotfix/*`; долгоживущие ветки: `develop`, `main`;
|
|
56
|
-
- для агентных веток допускаются `codex/feature/*`, `codex/release/*`, `codex/hotfix/*`;
|
|
57
56
|
- правила merge: `feature/* -> develop`, `release/* -> main` + back-merge в `develop`, `hotfix/* -> main` + back-merge в `develop`;
|
|
58
57
|
- `RUN_REVIEW_GATE` работает в два этапа:
|
|
59
58
|
- сначала отчёт и рекомендация (`PASS_CANDIDATE`/`FAIL`);
|
|
@@ -65,10 +64,11 @@ result PASS
|
|
|
65
64
|
- merge разрешён только после `RUN_MR_REVIEW_GATE: PASS_CONFIRMED`;
|
|
66
65
|
- для задач реализации по умолчанию используется отдельная ветка `feature/*`; прямой поток на `develop`/`main` запрещён;
|
|
67
66
|
- перед началом реализации обязателен `PREPARE_TASK_BRANCH` (веточный preflight и user dialogue);
|
|
67
|
+
- branch naming policy: использовать только GitHub issue ref в формате `issue-<number>`;
|
|
68
68
|
- если задача атомарная и относится к текущей feature-ветке, допускается выполнение в текущей ветке после явного подтверждения пользователя;
|
|
69
69
|
- если задача не относится к текущей ветке, требуется: проверить dirty/ahead, согласовать действие с пользователем, перейти на `develop` (или `main` для hotfix), обновить и создать новую ветку;
|
|
70
70
|
- перед `--apply` обязателен контекстный check: сравнить `agents.md` текущей и базовой ветки, при diff запросить явное подтверждение пользователя;
|
|
71
|
-
- сообщение коммита обязательно содержит
|
|
71
|
+
- сообщение коммита обязательно содержит `#issue-number`.
|
|
72
72
|
|
|
73
73
|
Для GitHub трекера статус issue задаётся label-ом (одновременно только один статус из набора):
|
|
74
74
|
- `TODO`
|
|
@@ -80,7 +80,7 @@ result PASS
|
|
|
80
80
|
- `PUBLISH`
|
|
81
81
|
|
|
82
82
|
Семантика статусов:
|
|
83
|
-
- `READY`: коммит сделан и отправлен (`push`) в `feature/*|release/*|hotfix
|
|
83
|
+
- `READY`: коммит сделан и отправлен (`push`) в `feature/*|release/*|hotfix/*`; открыт PR в `develop` или `main` согласно правилам ветвления.
|
|
84
84
|
- `DONE`: изменения интегрированы в `main`; для `release/*` и `hotfix/*` подтверждён back-merge в `develop`.
|
|
85
85
|
- `PUBLISH`: релиз опубликован и доступен в последней версии пакета.
|
|
86
86
|
|
|
@@ -100,7 +100,7 @@ Reason: Нужна обязательная preflight-проверка проц
|
|
|
100
100
|
Name: Governance Watchdog Agent
|
|
101
101
|
|
|
102
102
|
Governance Watchdog Agent: verify governance gate,
|
|
103
|
-
task
|
|
103
|
+
task #12,
|
|
104
104
|
checklist "PRD(Описание+Проверяемость), hard criteria, user confirmation policy",
|
|
105
105
|
result PASS
|
|
106
106
|
```
|
|
@@ -115,7 +115,7 @@ Reason: Нужен обязательный pre-commit review.
|
|
|
115
115
|
Name: Reviewer/Judge Agent
|
|
116
116
|
|
|
117
117
|
Reviewer/Judge Agent: run review gate,
|
|
118
|
-
task
|
|
118
|
+
task #12,
|
|
119
119
|
checklist "what_done_summary, critical_findings, potential_risks, issue_link_presence",
|
|
120
120
|
result PASS_CANDIDATE,
|
|
121
121
|
report "posted to issue #12"
|
|
@@ -133,7 +133,7 @@ Reason: Подтверждение review пользователем получ
|
|
|
133
133
|
Name: Reviewer/Judge Agent
|
|
134
134
|
|
|
135
135
|
Reviewer/Judge Agent: run review gate,
|
|
136
|
-
task
|
|
136
|
+
task #12,
|
|
137
137
|
approve yes,
|
|
138
138
|
result PASS_CONFIRMED
|
|
139
139
|
```
|
|
@@ -168,7 +168,7 @@ Name: Agile Manager Agent
|
|
|
168
168
|
|
|
169
169
|
Agile Manager Agent: set status,
|
|
170
170
|
tracker __DEFAULT_TRACKER__,
|
|
171
|
-
task
|
|
171
|
+
task #12,
|
|
172
172
|
status IN_PROGRESS,
|
|
173
173
|
reason "начата реализация"
|
|
174
174
|
```
|
|
@@ -186,7 +186,7 @@ Agile Manager Agent: prepare task branch,
|
|
|
186
186
|
tracker __DEFAULT_TRACKER__,
|
|
187
187
|
task "#12",
|
|
188
188
|
task kind "atomic",
|
|
189
|
-
command "npm run meta:task-start -- --task 12 --slug api-redirect",
|
|
189
|
+
command "npm run meta:task-start -- --task #12 --slug api-redirect",
|
|
190
190
|
user dialogue "confirm branch context + dirty/ahead handling + agents.md context warning + switch decision"
|
|
191
191
|
```
|
|
192
192
|
|
|
@@ -201,7 +201,7 @@ Name: Agile Manager Agent
|
|
|
201
201
|
|
|
202
202
|
Agile Manager Agent: set status,
|
|
203
203
|
tracker __DEFAULT_TRACKER__,
|
|
204
|
-
task
|
|
204
|
+
task #12,
|
|
205
205
|
status REVIEW,
|
|
206
206
|
reason "готово к review gate"
|
|
207
207
|
```
|
|
@@ -257,9 +257,9 @@ Agile Manager Agent: commit by name,
|
|
|
257
257
|
tracker __DEFAULT_TRACKER__,
|
|
258
258
|
task "API редирект офферов",
|
|
259
259
|
issue 12,
|
|
260
|
-
commit message "
|
|
260
|
+
commit message "#12 | API редирект офферов",
|
|
261
261
|
push yes,
|
|
262
|
-
branch "feature/
|
|
262
|
+
branch "feature/issue-12-api-redirect",
|
|
263
263
|
open mr "optional",
|
|
264
264
|
target status READY,
|
|
265
265
|
what done "добавлен endpoint, тесты, обработка ошибок"
|
|
@@ -275,7 +275,7 @@ Reason: Нужен обязательный pre-merge review по MR/PR с пр
|
|
|
275
275
|
Name: MR Review Agent
|
|
276
276
|
|
|
277
277
|
MR Review Agent: run MR review gate,
|
|
278
|
-
task
|
|
278
|
+
task #12,
|
|
279
279
|
pr 34,
|
|
280
280
|
checklist "mr_context, task_linkage, prd_evidence, critical_findings, potential_risks",
|
|
281
281
|
result PASS_CANDIDATE
|
|
@@ -293,7 +293,7 @@ Reason: Подтверждение MR review пользователем полу
|
|
|
293
293
|
Name: MR Review Agent
|
|
294
294
|
|
|
295
295
|
MR Review Agent: run MR review gate,
|
|
296
|
-
task
|
|
296
|
+
task #12,
|
|
297
297
|
pr 34,
|
|
298
298
|
approve yes,
|
|
299
299
|
result PASS_CONFIRMED
|
|
@@ -310,7 +310,7 @@ Name: Agile Manager Agent
|
|
|
310
310
|
|
|
311
311
|
Agile Manager Agent: set status,
|
|
312
312
|
tracker __DEFAULT_TRACKER__,
|
|
313
|
-
task
|
|
313
|
+
task #12,
|
|
314
314
|
status PUBLISH,
|
|
315
315
|
reason "релиз опубликован в latest"
|
|
316
316
|
```
|
|
@@ -329,7 +329,7 @@ Close Task Approved: yes
|
|
|
329
329
|
|
|
330
330
|
Agile Manager Agent: set status,
|
|
331
331
|
tracker __DEFAULT_TRACKER__,
|
|
332
|
-
task
|
|
332
|
+
task #12,
|
|
333
333
|
status DONE,
|
|
334
334
|
reason "пользователь подтвердил закрытие"
|
|
335
335
|
```
|
|
@@ -345,7 +345,7 @@ Name: Agile Manager Agent
|
|
|
345
345
|
|
|
346
346
|
Agile Manager Agent: assign sprint,
|
|
347
347
|
tracker __DEFAULT_TRACKER__,
|
|
348
|
-
task
|
|
348
|
+
task #12,
|
|
349
349
|
sprint SPRINT-3
|
|
350
350
|
```
|
|
351
351
|
|
|
@@ -26,7 +26,7 @@ Reason: Обязательная проверка соблюдения PRD и к
|
|
|
26
26
|
Name: Governance Watchdog Agent
|
|
27
27
|
|
|
28
28
|
Governance Watchdog Agent: verify governance gate,
|
|
29
|
-
task
|
|
29
|
+
task <#issue>,
|
|
30
30
|
required checks "prd_sections_complete, acceptance_defined, user_confirmation_policy_respected",
|
|
31
31
|
result PASS
|
|
32
32
|
```
|
|
@@ -53,7 +53,6 @@ result PASS
|
|
|
53
53
|
Дополнительно для коммита:
|
|
54
54
|
- для `git_flow_lite` используется цикл `TODO -> IN_PROGRESS -> REVIEW -> READY -> DONE` (для релизных задач дополнительно `-> PUBLISH`);
|
|
55
55
|
- рабочие ветки: `feature/*`, `release/*`, `hotfix/*`; долгоживущие ветки: `develop`, `main`;
|
|
56
|
-
- для агентных веток допускаются `codex/feature/*`, `codex/release/*`, `codex/hotfix/*`;
|
|
57
56
|
- правила merge: `feature/* -> develop`, `release/* -> main` + back-merge в `develop`, `hotfix/* -> main` + back-merge в `develop`;
|
|
58
57
|
- `RUN_REVIEW_GATE` работает в два этапа:
|
|
59
58
|
- сначала отчёт и рекомендация (`PASS_CANDIDATE`/`FAIL`);
|
|
@@ -65,10 +64,11 @@ result PASS
|
|
|
65
64
|
- merge разрешён только после `RUN_MR_REVIEW_GATE: PASS_CONFIRMED`;
|
|
66
65
|
- для задач реализации по умолчанию используется отдельная ветка `feature/*`; прямой поток на `develop`/`main` запрещён;
|
|
67
66
|
- перед началом реализации обязателен `PREPARE_TASK_BRANCH` (веточный preflight и user dialogue);
|
|
67
|
+
- branch naming policy: использовать только GitHub issue ref в формате `issue-<number>`;
|
|
68
68
|
- если задача атомарная и относится к текущей feature-ветке, допускается выполнение в текущей ветке после явного подтверждения пользователя;
|
|
69
69
|
- если задача не относится к текущей ветке, требуется: проверить dirty/ahead, согласовать действие с пользователем, перейти на `develop` (или `main` для hotfix), обновить и создать новую ветку;
|
|
70
70
|
- перед `--apply` обязателен контекстный check: сравнить `agents.md` текущей и базовой ветки, при diff запросить явное подтверждение пользователя;
|
|
71
|
-
- сообщение коммита обязательно содержит
|
|
71
|
+
- сообщение коммита обязательно содержит `#issue-number`.
|
|
72
72
|
|
|
73
73
|
Для GitHub трекера статус issue задаётся label-ом (одновременно только один статус из набора):
|
|
74
74
|
- `TODO`
|
|
@@ -80,7 +80,7 @@ result PASS
|
|
|
80
80
|
- `PUBLISH`
|
|
81
81
|
|
|
82
82
|
Семантика статусов:
|
|
83
|
-
- `READY`: коммит сделан и отправлен (`push`) в `feature/*|release/*|hotfix
|
|
83
|
+
- `READY`: коммит сделан и отправлен (`push`) в `feature/*|release/*|hotfix/*`; открыт PR в `develop` или `main` согласно правилам ветвления.
|
|
84
84
|
- `DONE`: изменения интегрированы в `main`; для `release/*` и `hotfix/*` подтверждён back-merge в `develop`.
|
|
85
85
|
- `PUBLISH`: релиз опубликован и доступен в последней версии пакета.
|
|
86
86
|
|
|
@@ -100,7 +100,7 @@ Reason: Нужна обязательная preflight-проверка проц
|
|
|
100
100
|
Name: Governance Watchdog Agent
|
|
101
101
|
|
|
102
102
|
Governance Watchdog Agent: verify governance gate,
|
|
103
|
-
task
|
|
103
|
+
task #12,
|
|
104
104
|
checklist "PRD(Описание+Проверяемость), hard criteria, user confirmation policy",
|
|
105
105
|
result PASS
|
|
106
106
|
```
|
|
@@ -115,7 +115,7 @@ Reason: Нужен обязательный pre-commit review.
|
|
|
115
115
|
Name: Reviewer/Judge Agent
|
|
116
116
|
|
|
117
117
|
Reviewer/Judge Agent: run review gate,
|
|
118
|
-
task
|
|
118
|
+
task #12,
|
|
119
119
|
checklist "what_done_summary, critical_findings, potential_risks, issue_link_presence",
|
|
120
120
|
result PASS_CANDIDATE,
|
|
121
121
|
report "posted to issue #12"
|
|
@@ -133,7 +133,7 @@ Reason: Подтверждение review пользователем получ
|
|
|
133
133
|
Name: Reviewer/Judge Agent
|
|
134
134
|
|
|
135
135
|
Reviewer/Judge Agent: run review gate,
|
|
136
|
-
task
|
|
136
|
+
task #12,
|
|
137
137
|
approve yes,
|
|
138
138
|
result PASS_CONFIRMED
|
|
139
139
|
```
|
|
@@ -168,7 +168,7 @@ Name: Agile Manager Agent
|
|
|
168
168
|
|
|
169
169
|
Agile Manager Agent: set status,
|
|
170
170
|
tracker github,
|
|
171
|
-
task
|
|
171
|
+
task #12,
|
|
172
172
|
status IN_PROGRESS,
|
|
173
173
|
reason "начата реализация"
|
|
174
174
|
```
|
|
@@ -186,7 +186,7 @@ Agile Manager Agent: prepare task branch,
|
|
|
186
186
|
tracker github,
|
|
187
187
|
task "#12",
|
|
188
188
|
task kind "atomic",
|
|
189
|
-
command "npm run meta:task-start -- --task 12 --slug api-redirect",
|
|
189
|
+
command "npm run meta:task-start -- --task #12 --slug api-redirect",
|
|
190
190
|
user dialogue "confirm branch context + dirty/ahead handling + agents.md context warning + switch decision"
|
|
191
191
|
```
|
|
192
192
|
|
|
@@ -201,7 +201,7 @@ Name: Agile Manager Agent
|
|
|
201
201
|
|
|
202
202
|
Agile Manager Agent: set status,
|
|
203
203
|
tracker github,
|
|
204
|
-
task
|
|
204
|
+
task #12,
|
|
205
205
|
status REVIEW,
|
|
206
206
|
reason "готово к review gate"
|
|
207
207
|
```
|
|
@@ -257,9 +257,9 @@ Agile Manager Agent: commit by name,
|
|
|
257
257
|
tracker github,
|
|
258
258
|
task "API редирект офферов",
|
|
259
259
|
issue 12,
|
|
260
|
-
commit message "
|
|
260
|
+
commit message "#12 | API редирект офферов",
|
|
261
261
|
push yes,
|
|
262
|
-
branch "feature/
|
|
262
|
+
branch "feature/issue-12-api-redirect",
|
|
263
263
|
open mr "optional",
|
|
264
264
|
target status READY,
|
|
265
265
|
what done "добавлен endpoint, тесты, обработка ошибок"
|
|
@@ -275,7 +275,7 @@ Reason: Нужен обязательный pre-merge review по MR/PR с пр
|
|
|
275
275
|
Name: MR Review Agent
|
|
276
276
|
|
|
277
277
|
MR Review Agent: run MR review gate,
|
|
278
|
-
task
|
|
278
|
+
task #12,
|
|
279
279
|
pr 34,
|
|
280
280
|
checklist "mr_context, task_linkage, prd_evidence, critical_findings, potential_risks",
|
|
281
281
|
result PASS_CANDIDATE
|
|
@@ -293,7 +293,7 @@ Reason: Подтверждение MR review пользователем полу
|
|
|
293
293
|
Name: MR Review Agent
|
|
294
294
|
|
|
295
295
|
MR Review Agent: run MR review gate,
|
|
296
|
-
task
|
|
296
|
+
task #12,
|
|
297
297
|
pr 34,
|
|
298
298
|
approve yes,
|
|
299
299
|
result PASS_CONFIRMED
|
|
@@ -310,7 +310,7 @@ Name: Agile Manager Agent
|
|
|
310
310
|
|
|
311
311
|
Agile Manager Agent: set status,
|
|
312
312
|
tracker github,
|
|
313
|
-
task
|
|
313
|
+
task #12,
|
|
314
314
|
status PUBLISH,
|
|
315
315
|
reason "релиз опубликован в latest"
|
|
316
316
|
```
|
|
@@ -329,7 +329,7 @@ Close Task Approved: yes
|
|
|
329
329
|
|
|
330
330
|
Agile Manager Agent: set status,
|
|
331
331
|
tracker github,
|
|
332
|
-
task
|
|
332
|
+
task #12,
|
|
333
333
|
status DONE,
|
|
334
334
|
reason "пользователь подтвердил закрытие"
|
|
335
335
|
```
|
|
@@ -345,7 +345,7 @@ Name: Agile Manager Agent
|
|
|
345
345
|
|
|
346
346
|
Agile Manager Agent: assign sprint,
|
|
347
347
|
tracker github,
|
|
348
|
-
task
|
|
348
|
+
task #12,
|
|
349
349
|
sprint SPRINT-3
|
|
350
350
|
```
|
|
351
351
|
|
|
@@ -362,7 +362,7 @@ Status Agent: status snapshot,
|
|
|
362
362
|
tracker github,
|
|
363
363
|
source policy "github/mcp/custom -> external tracker first, local -> tasks first",
|
|
364
364
|
include "trackers_used,current_sprint,current_task,current_branch_context,git_uncommitted,summary",
|
|
365
|
-
command "
|
|
365
|
+
command "npm run meta:status"
|
|
366
366
|
```
|
|
367
367
|
|
|
368
368
|
### PREPARE_RELEASE_NOTE
|