@7n/test 0.8.0 → 0.10.0
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 +28 -0
- package/package.json +4 -2
- package/src/assess-need.mjs +4 -1
- package/src/classify-exports.mjs +108 -0
- package/src/coverage-classify/docs/apply.md +28 -0
- package/src/coverage-classify/docs/cache.md +34 -0
- package/src/coverage-classify/docs/index.md +40 -0
- package/src/coverage-classify/docs/prompt.md +30 -0
- package/src/coverage-classify/docs/verdict-schema.md +29 -0
- package/src/coverage-fix-extract.mjs +10 -10
- package/src/coverage-per-file.mjs +68 -43
- package/src/docs/assess-need.md +31 -0
- package/src/docs/classify-exports.md +30 -0
- package/src/docs/coverage-fix-extract.md +35 -0
- package/src/docs/coverage-fix.md +31 -0
- package/src/docs/coverage-per-file.md +34 -0
- package/src/docs/fix-tests.md +32 -0
- package/src/docs/gen-tests.md +38 -0
- package/src/docs/index.md +34 -0
- package/src/docs/run.md +33 -0
- package/src/fix-tests.mjs +233 -87
- package/src/gen-tests.mjs +1102 -49
- package/src/lib/ast-analyze.mjs +287 -0
- package/src/lib/docs/ast-analyze.md +45 -0
- package/src/lib/docs/index.md +14 -0
- package/src/lib/docs/pi-client.md +29 -0
- package/src/lib/docs/runtime-probe.md +36 -0
- package/src/lib/docs/vitest-shim.md +31 -0
- package/src/lib/pi-client.mjs +18 -3
- package/src/lib/runtime-probe.mjs +390 -0
- package/src/lib/vitest-shim.mjs +73 -0
- package/src/run.mjs +30 -26
- package/src/scripts/lib/changed-files.mjs +5 -5
- package/src/scripts/lib/docs/changed-files.md +32 -0
- package/src/scripts/lib/docs/read-n-cursor-config-lite.md +39 -0
- package/src/scripts/utils/docs/index.md +13 -0
- package/src/scripts/utils/docs/lock-cache-dir.md +32 -0
- package/src/scripts/utils/docs/with-lock.md +38 -0
- package/src/scripts/utils/docs/worktree-fingerprint.md +34 -0
- package/src/scripts/utils/lock-cache-dir.mjs +1 -1
- package/src/scripts/utils/with-lock.mjs +2 -3
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Directory Index
|
|
3
|
+
title: npm/src/scripts/utils
|
|
4
|
+
resource: npm/src/scripts/utils/
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# npm/src/scripts/utils
|
|
8
|
+
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| --------------------------------------------------- | --------- |
|
|
11
|
+
| [lock-cache-dir.mjs](lock-cache-dir.md) | JS Module |
|
|
12
|
+
| [with-lock.mjs](with-lock.md) | JS Module |
|
|
13
|
+
| [worktree-fingerprint.mjs](worktree-fingerprint.md) | JS Module |
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: lock-cache-dir.mjs
|
|
4
|
+
resource: npm/src/scripts/utils/lock-cache-dir.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 76c84505
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
issues: judge:inaccurate:0.97
|
|
10
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Огляд
|
|
14
|
+
|
|
15
|
+
Цей модуль визначає уніфікований, спільний шлях для кешування лок-станів (`owner.json`, `result.json`) у всіх git-worktree. При наявності git-репозиторію, лок-стан розміщується у спільному каталозі `<git-common-dir>/n-cursor/<key>` (всередині `.git`), що забезпечує, щоб ресурсомісткі команди, запущені в різних worktree (наприклад, eslint), серіалізувалися та уникнули паралельного перевантаження CPU/диск на macOS. У разі відсутності git-репозиторію, використовується історичний fallback у per-checkout `node_modules/.cache/n-cursor/<key>`.
|
|
16
|
+
|
|
17
|
+
## Поведінка
|
|
18
|
+
|
|
19
|
+
Поведінка:
|
|
20
|
+
|
|
21
|
+
1. Викликається функція resolveLockCacheDir з ключем локу.
|
|
22
|
+
2. Функція з'ясовує робочу директорію.
|
|
23
|
+
3. Виконується команда `git rev-parse --git-common-dir` у робочій директорії для визначення спільної директорії git-репозиторію.
|
|
24
|
+
4. Якщо команда Git не спрацювала або не повернула шлях, функція повертає шлях до локального кешу (`node_modules/.cache/n-cursor/<key>`) у поточній робочій директорії.
|
|
25
|
+
5. Якщо спірна директорія була знайдена, функція обчислює та повертає абсолютний шлях до кешу (`<git-common-dir>/n-cursor/<key>`) у корені репозиторію.
|
|
26
|
+
6. Функція не модифікує файлову систему; вона лише обчислює шлях для кешування лок-станів (таких як `owner.json` та `result.json`) для забезпечення серіалізації важких команд між різними git-worktree.
|
|
27
|
+
|
|
28
|
+
## Гарантії поведінки
|
|
29
|
+
|
|
30
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
31
|
+
- Кешує результати в межах одного прогону.
|
|
32
|
+
- Свідомо пропускає шляхи: `.git`, `node_modules`.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: with-lock.mjs
|
|
4
|
+
resource: npm/src/scripts/utils/with-lock.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: f6c6a780
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
issues: judge:inaccurate:0.99
|
|
10
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Огляд
|
|
14
|
+
|
|
15
|
+
Файл реалізує механізм гарантування атомарності та уникнення повторного виконання (dedup) для ресурсомістких операцій. Він забезпечує, щоб важкі команди виконувалися лише один раз протягом встановленого терміну дії, якщо їхній результат збережений. Система спирається на конфігурації `owner.json` та `result.json` для керування станом блокування та кешу.
|
|
16
|
+
|
|
17
|
+
Цей файл забезпечує атомарне виконання складних команд. Це досягається за допомогою механізму блокування, що базується на створенні директорії (`mkdirSync-based lock`), та валідації живості PID. Для уникнення повторних викликів використовується deduplication на основі хешу SHA256 з обмеженим часом життя (TTL), що дозволяє використовувати кешований результат.
|
|
18
|
+
|
|
19
|
+
## Поведінка
|
|
20
|
+
|
|
21
|
+
shouldDedup перевіряє, чи можна повторно використати збережений результат, порівнюючи його з поточним відбитком робочого дерева та перевіряючи термін дії кешу.
|
|
22
|
+
|
|
23
|
+
withLock виконує важку команду, гарантуючи її атомарність за допомогою механізму блокування. Перед виконанням він перевіряє кеш, а після завершення зберігає результат для майбутньої дедуплікації.
|
|
24
|
+
|
|
25
|
+
## Публічний API
|
|
26
|
+
|
|
27
|
+
Зрозумів. Я буду діяти як технічний письменник, створюючи лаконічну поведінкову документацію на українській мові у чистому Markdown. Я дотримуватимуся всіх обмежень: лише "ЩО" і "НАВІЩО", без вступів/висновків, без ```-блоків, без сигнатур/типів/параметрів/stdlib-модулів/regex/приватних імен.
|
|
28
|
+
|
|
29
|
+
Я інтегрую прив'язку до конфігів `owner.json` та `result.json`.
|
|
30
|
+
|
|
31
|
+
Для наданого списку я перетворю його на стислі маркери у форматі «назва — що робить», використовуючи власні слова, без типів і сигнатур, та використовуючи надані назви:
|
|
32
|
+
|
|
33
|
+
- shouldDedup — Визначає, чи можна ігнорувати повторне виконання, якщо результат вже є у кешованому `result.json`.
|
|
34
|
+
- withLock — Гарантує послідовне виконання ресурсомісткої операції за допомогою атомарної блокировки, а також усуває дублікати за унікальним ідентифікатором (fingerprint).
|
|
35
|
+
|
|
36
|
+
## Гарантії поведінки
|
|
37
|
+
|
|
38
|
+
- Кешує результати в межах одного прогону.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: worktree-fingerprint.mjs
|
|
4
|
+
resource: npm/src/scripts/utils/worktree-fingerprint.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: df297382
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Огляд
|
|
13
|
+
|
|
14
|
+
Робота цього файлу полягає у генерації унікального цифрового відбитка поточного стану робочого дерева проєкту за допомогою функції `worktreeFingerprint`. Він збирає інформацію про стан коміту Git та контент файлів, що ще не додані до відстеження. Це дозволяє однозначно ідентифікувати консистенцію робочої копії репозиторію.
|
|
15
|
+
|
|
16
|
+
## Поведінка
|
|
17
|
+
|
|
18
|
+
1. Обчислення консистенції робочого дерева.
|
|
19
|
+
2. Зчитування хешу поточного коміту Git.
|
|
20
|
+
3. Зчитування тексту відмінностей між комітом і робочим деревом.
|
|
21
|
+
4. Зчитування списку невідстежуваних файлів Git.
|
|
22
|
+
5. Для кожного невідстежуваного файлу обчислюється його хеш.
|
|
23
|
+
6. Утворюється відсортований список пар, що містять назву файлу та його хеш.
|
|
24
|
+
7. Усі зібрані дані (хеш коміту, текст відмінностей, відсортовані пари невідстежуваних файлів) конкатенуються в один текстовий блок.
|
|
25
|
+
8. Від цього текстового блоку обчислюється SHA256 хеш.
|
|
26
|
+
9. Якщо будь-яка частина процесу не може бути виконана (наприклад, поточний каталог не є Git-репозиторієм), функція повертає null.
|
|
27
|
+
|
|
28
|
+
## Публічний API
|
|
29
|
+
|
|
30
|
+
worktreeFingerprint — визначає унікальний відбиток поточного стану git-робочого дерева.
|
|
31
|
+
|
|
32
|
+
## Гарантії поведінки
|
|
33
|
+
|
|
34
|
+
- (специфічних машинно-виведених гарантій немає)
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* `git rev-parse --git-common-dir` повертає той самий `.git` головного репо з
|
|
11
11
|
* будь-якого worktree, тож стан кладемо під `<git-common-dir>/n-cursor/<key>`
|
|
12
|
-
* (всередині `.git` — спільне, ніколи не
|
|
12
|
+
* (всередині `.git` — спільне, ніколи не відстежується, переживає `bun i`).
|
|
13
13
|
* Поза git-репо (git недоступний / каталог не репо) — fallback на per-checkout
|
|
14
14
|
* `node_modules/.cache/n-cursor/<key>`, як було історично.
|
|
15
15
|
*/
|
|
@@ -50,8 +50,7 @@ function makeRelease(lockDir) {
|
|
|
50
50
|
export function shouldDedup(result, fingerprint, ttl) {
|
|
51
51
|
if (result.exitCode !== 0) return false
|
|
52
52
|
if (fingerprint === null || result.fingerprint !== fingerprint) return false
|
|
53
|
-
|
|
54
|
-
return true
|
|
53
|
+
return Date.now() - result.finishedAt < ttl
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
/**
|
|
@@ -126,7 +125,7 @@ export async function withLock(key, runFn, opts = {}) {
|
|
|
126
125
|
/* result.json не існує або пошкоджений */
|
|
127
126
|
}
|
|
128
127
|
|
|
129
|
-
// Після release
|
|
128
|
+
// Після release блокування повторно надсилає той самий сигнал: `once` вже зняв обробник,
|
|
130
129
|
// тож процес завершується дефолтною дією з коректним кодом (130/143)
|
|
131
130
|
const onSignal = signal => {
|
|
132
131
|
release()
|