@7n/rules 1.49.2 → 1.49.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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.49.3] - 2026-07-26
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- `n-git-reconcile` починає bounded LLM-кроки на `min`, переходить на `max` лише після валідної відповіді з validation failure, захищає detached worktree за OID, порівнює tests із baseline `origin/main`, запускає doc-files/lint лише для змінених code directories, безпечно пропускає empty cherry-pick, ізолює nested `npx`, повертає non-zero для неповного triage і показує точний фазовий progress.
|
|
8
|
+
|
|
3
9
|
## [1.49.2] - 2026-07-26
|
|
4
10
|
|
|
5
11
|
### Fixed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@7n/rules",
|
|
3
|
-
"version": "1.49.
|
|
3
|
+
"version": "1.49.3",
|
|
4
4
|
"description": "CLI еталонних правил і skills (префікс n-): синк у репозиторій, дельта-lint, конформність",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"rename-yaml-extensions": "bun ./bin/n-rules.js rename-yaml-extensions"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@7n/llm-lib": "2.9.
|
|
68
|
+
"@7n/llm-lib": "2.9.3",
|
|
69
69
|
"@7n/mt": "^0.5.1",
|
|
70
70
|
"@zed-industries/agent-client-protocol": "^0.4.5",
|
|
71
71
|
"ajv": "^8.20.0",
|
|
@@ -25,21 +25,51 @@ JS виконує `fetch`, inventory, patch-equivalence, дедуплікаці
|
|
|
25
25
|
worktree/PR/stash, підготовку worktree від `origin/main`, cherry-pick або
|
|
26
26
|
застосування stash, gates, commit, push, PR і фінальний звіт.
|
|
27
27
|
|
|
28
|
-
LLM отримує лише
|
|
28
|
+
LLM отримує лише bounded-завдання:
|
|
29
29
|
|
|
30
30
|
1. semantic triage кандидатів, які JS не може оцінити за Git-фактами;
|
|
31
31
|
2. розв'язання змістових конфліктів і перевірку перенесеної поведінки у вже
|
|
32
32
|
підготовленому worktree.
|
|
33
33
|
|
|
34
34
|
LLM не видаляє refs, не створює worktree, не push-ить і не відкриває PR.
|
|
35
|
+
LLM виконує лише narrow tests, потрібні під час правок; full repository tests,
|
|
36
|
+
doc generation, lint і changelog gates запускає JS після cognitive кроку.
|
|
37
|
+
Doc-files і unified lint отримують лише унікальні директорії зміненого коду,
|
|
38
|
+
щоб repository-wide baseline та stale docs поза scope не забруднювали PR.
|
|
39
|
+
|
|
40
|
+
Оркестратор показує чесний фазовий progress: inventory має elapsed time без
|
|
41
|
+
вигаданого total, а `triage`, `PR` і `cleanup` — окремі точні bars за вже
|
|
42
|
+
відомими batches/groups/sources. Поточний LLM-етап показує tier `min` або
|
|
43
|
+
`max`. У non-TTY/CI замість перемальовування виводяться append-only рядки.
|
|
44
|
+
|
|
45
|
+
Кожен LLM-крок починається на tier `min`. JS детерміновано перевіряє:
|
|
46
|
+
|
|
47
|
+
- triage — повноту verdicts, schema, groups і commit OID;
|
|
48
|
+
- worktree — відсутність conflict markers та `git diff --check`;
|
|
49
|
+
- поведінку — repository test script відносно test baseline чистого
|
|
50
|
+
`origin/main` і changelog gate. Red baseline приймається лише для
|
|
51
|
+
розпізнаних Vitest failures, якщо після перенесення не додалось нових.
|
|
52
|
+
- змінений код — scoped `doc-files` у fix-режимі та unified lint у
|
|
53
|
+
`--no-fix`, окремо для кожної code directory.
|
|
54
|
+
|
|
55
|
+
Лише валідна відповідь runner, яка провалила validation, запускає повтор того
|
|
56
|
+
самого bounded-завдання на `max` із точною причиною провалу. Infrastructure
|
|
57
|
+
failure runner завершує крок одразу: повтор іншою моделлю не маскує проблему
|
|
58
|
+
transport. Після провалу `max` джерело fail-closed лишається `kept` або
|
|
59
|
+
`failed`, не потрапляє в cleanup, а неповний triage завершує команду non-zero.
|
|
35
60
|
|
|
36
61
|
## Інваріанти
|
|
37
62
|
|
|
38
63
|
- База — тільки свіжий `origin/main`.
|
|
39
|
-
- Живі worktree та гілки відкритих
|
|
64
|
+
- Живі worktree, включно з detached HEAD за commit OID, та гілки відкритих
|
|
65
|
+
PR — protected.
|
|
40
66
|
- Стара дата або великий divergence не означають, що зміна непотрібна.
|
|
41
|
-
- `ours`/`theirs` не застосовуються
|
|
67
|
+
- `ours`/`theirs` не застосовуються механічно: конфлікт розв'язується за
|
|
42
68
|
поведінкою й підтверджується тестом.
|
|
69
|
+
- Empty cherry-pick пропускається лише за активного `CHERRY_PICK_HEAD`,
|
|
70
|
+
відсутніх conflicts і порожнього staged diff.
|
|
71
|
+
- Вкладені `npx` не успадковують package selector зовнішнього
|
|
72
|
+
`npm exec --package`.
|
|
43
73
|
- За невизначеності джерело лишається `kept`; misleading ready PR не
|
|
44
74
|
створюється.
|
|
45
75
|
- Cleanup виконує лише JS і тільки після inventory/PR-фази: видаляє точні refs,
|
|
@@ -55,4 +85,5 @@ LLM не видаляє refs, не створює worktree, не push-ить і
|
|
|
55
85
|
Оркестратор повертає для кожного джерела один verdict: `merged`,
|
|
56
86
|
`patch-equivalent`, `open-pr`, `protected`, `pr-created`, `kept`,
|
|
57
87
|
`drop-recommended` або `failed`. Для `pr-created` додає URL, перенесені коміти,
|
|
58
|
-
конфлікти та виконані перевірки.
|
|
88
|
+
конфлікти та виконані перевірки. Для cleanup ref звіт також містить точний OID,
|
|
89
|
+
щоб видалення можна було аудіювати після завершення.
|
|
@@ -3,13 +3,45 @@ type: JS Module
|
|
|
3
3
|
title: orchestrate.mjs
|
|
4
4
|
resource: npm/skills/git-reconcile/js/orchestrate.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 09f8b69d
|
|
7
7
|
model: openai-codex/gpt-5.4-mini
|
|
8
8
|
tier: cloud-min
|
|
9
|
-
score:
|
|
10
|
-
issues:
|
|
9
|
+
score: 100
|
|
10
|
+
issues: judge-refine:kept-original,judge:inaccurate:0.99
|
|
11
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
11
12
|
---
|
|
12
13
|
|
|
14
|
+
## Огляд
|
|
15
|
+
|
|
16
|
+
Модуль узгоджує Git branches, worktree і stash зі свіжим `origin/main`.
|
|
17
|
+
JS виконує inventory, validation, materialization, gates, PR і cleanup, а LLM
|
|
18
|
+
отримує лише bounded semantic triage, conflict resolution та behavioral edits.
|
|
19
|
+
|
|
20
|
+
## Поведінка
|
|
21
|
+
|
|
22
|
+
- Збирає refs, worktree, open PR, patch-equivalent commits і stash. Detached
|
|
23
|
+
worktree захищає за checkout HEAD OID.
|
|
24
|
+
- Ізолює вкладені `npx` від `npm_config_package` зовнішнього `npm exec`.
|
|
25
|
+
- Показує inventory elapsed time та окремі progress bars для triage, PR і
|
|
26
|
+
cleanup; у non-TTY виводить append-only progress.
|
|
27
|
+
- Перевіряє повноту triage, groups та commit OID. Infrastructure failure
|
|
28
|
+
runner завершує крок одразу; `max` запускається лише після валідної
|
|
29
|
+
відповіді, що не пройшла validation.
|
|
30
|
+
- Створює worktree від `origin/main`, за потреби ставить frozen Bun
|
|
31
|
+
dependencies і фіксує test baseline до перенесення source.
|
|
32
|
+
- Red baseline допускається лише для розпізнаних Vitest failures, якщо
|
|
33
|
+
post-change набір не містить нових failures. Нерозпізнаний output
|
|
34
|
+
fail-closed.
|
|
35
|
+
- Зводить tracked+untracked code paths до унікальних директорій. Для кожної
|
|
36
|
+
запускає scoped `doc-files` fix та unified lint `--no-fix`, не скануючи
|
|
37
|
+
repository-wide baseline.
|
|
38
|
+
- Empty cherry-pick пропускається лише за активного `CHERRY_PICK_HEAD`,
|
|
39
|
+
відсутніх conflicts і порожнього staged diff.
|
|
40
|
+
- Після LLM edits JS сам виконує Git checks, repository tests і changelog
|
|
41
|
+
gate. LLM prompt дозволяє лише narrow tests.
|
|
42
|
+
- Створює PR і лише після успіху точково прибирає перенесені або доведено
|
|
43
|
+
неактуальні refs/stash; cleanup refs у звіті мають точний OID.
|
|
44
|
+
|
|
13
45
|
## Публічний API
|
|
14
46
|
|
|
15
47
|
- parseWorktrees — Парсить `git worktree list --porcelain` у branch→path.
|
|
@@ -22,12 +54,32 @@ checkout, крім оновлення remote refs через fetch --prune.
|
|
|
22
54
|
не виконує shell-команди й повертає лише JSON-рішення.
|
|
23
55
|
- parseDecisionEnvelope — Витягає JSON object із чистої або fenced відповіді.
|
|
24
56
|
- callRunner — Викликає вибраний LLM runner для одного bounded-завдання.
|
|
57
|
+
- callWithValidatedFallback — Виконує bounded LLM-крок через min, валідовує результат JS-функцією і
|
|
58
|
+
викликає max лише після конкретного провалу.
|
|
59
|
+
- validateTriageOutcome — Структурно перевіряє triage-рішення: рівно один verdict на candidate,
|
|
60
|
+
валідні actions/groups і лише відомі commit OID.
|
|
25
61
|
- branchSlug — Перетворює довільний title/ref на branch slug.
|
|
62
|
+
- skipEmptyCherryPick — Пропускає лише підтверджений empty cherry-pick: sequencer активний,
|
|
63
|
+
конфліктів немає, staged diff порожній.
|
|
64
|
+
- testFailureSignatures — Витягає стабільні Vitest failure identifiers без summary/timing.
|
|
65
|
+
- acceptsTestOutcome — Дозволяє red baseline лише якщо після перенесення не з'явилось нових
|
|
66
|
+
Vitest failures. Нерозпізнаний red output завжди fail-closed.
|
|
67
|
+
- sourceDirectories — Зводить змінені code paths до найвужчих директорій для scoped gates.
|
|
68
|
+
- captureBehaviorBaseline — Фіксує test baseline на чистому origin/main до перенесення source.
|
|
69
|
+
- validateBehaviorState — Додає до Git-state validation test script із репозиторію і changelog gate.
|
|
70
|
+
Саме ці докази вирішують, чи приймати min-результат або ескалювати на max.
|
|
71
|
+
- cleanupSource — Видаляє точний source після Git-доказу неактуальності або успішного
|
|
72
|
+
перенесення. Protected/open-PR refs не потрапляють у цей крок.
|
|
26
73
|
- formatReport — Формує deterministic report.
|
|
27
74
|
- runGitReconcileOrchestrator — JS-оркестратор: inventory → bounded LLM triage → deterministic PR pipeline.
|
|
28
|
-
Нічого не видаляє; `drop` є лише рекомендацією у звіті.
|
|
29
75
|
|
|
30
76
|
## Гарантії поведінки
|
|
31
77
|
|
|
32
|
-
-
|
|
33
|
-
|
|
78
|
+
- Shell interpolation не використовується: executable та arguments
|
|
79
|
+
передаються окремо.
|
|
80
|
+
- Live worktree, open PR, `kept`, incomplete triage та failed source не
|
|
81
|
+
видаляються.
|
|
82
|
+
- Stash видаляється точково за стабільним commit ID; `git stash clear` не
|
|
83
|
+
використовується.
|
|
84
|
+
- Worktree із проваленим перенесенням зберігається для діагностики.
|
|
85
|
+
- Progress не змішує фази з різною вартістю в удаваний global percentage.
|