@nitra/cursor 1.11.14 → 1.11.15

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.
@@ -145,7 +145,33 @@ if ! printf '%s' "$RESPONSE_TRIMMED" | grep -q '^## '; then
145
145
  fi
146
146
 
147
147
  TS=$(date +%Y%m%d-%H%M%S)
148
- OUT="$ADR_DIR/$TS-${SESSION_ID:0:8}.md"
148
+
149
+ # Slug із першого `## [ADR|Runbook|Knowledge] <heading>`-рядка відповіді.
150
+ # Логіка локальна (без додаткового LLM-виклику): використовуємо вже згенерований heading.
151
+ # Конвенція кебаб-slug-у — як у normalize-decisions.sh:171: малі літери, дозволено цифри, дефіс,
152
+ # кирилиця; англомовні технічні терміни лишаються англійською без транслітерації.
153
+ HEADING=$(printf '%s' "$RESPONSE_TRIMMED" \
154
+ | awk '/^## (\[?(ADR|Runbook|Knowledge)\]?)/{ sub(/^## /,""); sub(/^\[?(ADR|Runbook|Knowledge)\]?[[:space:]]*:?[[:space:]]*/,""); print; exit }')
155
+ SLUG=$(printf '%s' "$HEADING" \
156
+ | tr '[:upper:]' '[:lower:]' \
157
+ | sed -E 's/[`«»"]//g; s/[ /,.:;()—–]+/-/g; s/[^a-zа-яёіїєґ0-9-]//g; s/-+/-/g; s/^-//; s/-$//' \
158
+ | cut -c1-60 \
159
+ | sed -E 's/-$//')
160
+
161
+ if [[ -z "$SLUG" ]]; then
162
+ # Fallback на старий формат, якщо heading не спарсився
163
+ OUT="$ADR_DIR/$TS-${SESSION_ID:0:8}.md"
164
+ else
165
+ # Колізії: <timestamp>-<slug>-<n>.md (n=2,3,...), як у normalize-decisions.sh:244-257
166
+ BASE="$ADR_DIR/$TS-$SLUG.md"
167
+ OUT="$BASE"
168
+ n=2
169
+ while [[ -e "$OUT" ]]; do
170
+ OUT="$ADR_DIR/$TS-$SLUG-$n.md"
171
+ n=$((n+1))
172
+ done
173
+ fi
174
+
149
175
  {
150
176
  printf -- '---\nsession: %s\ncaptured: %s\ntranscript: %s\n---\n\n' \
151
177
  "$SESSION_ID" "$(date -Iseconds)" "$TRANSCRIPT_PATH"
package/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@
4
4
 
5
5
  Формат — [Keep a Changelog](https://keepachangelog.com/uk/1.1.0/), нумерація — [SemVer](https://semver.org/lang/uk/).
6
6
 
7
+ ## [1.11.15] - 2026-05-16
8
+
9
+ ### Changed
10
+
11
+ - **`npm/.claude-template/hooks/capture-decisions.sh`** (+`.claude/hooks/capture-decisions.sh` синк) — Stop-hook тепер генерує **slug-name** для чернетки замість session-hash суфікса. Раніше: `<timestamp>-<session-id[0:8]>.md` (наприклад `20260516-090349-e513a1f0.md`). Тепер: `<timestamp>-<slug>.md` (наприклад `20260516-090349-структура-директорій-правила-fix-lint-policy.md`). **Slug береться з вже згенерованого LLM-заголовка** першого `## [ADR|Runbook|Knowledge] <heading>` блоку — без додаткового LLM-виклику, та сама вартість Stop-hook. Конвенція slug-у синхронізована з `normalize-decisions.sh:171`: малі літери, цифри, дефіс, кирилиця; англомовні технічні терміни лишаються англійською (`fix`, `lint`, `policy` — не транслітеруються). Колізії в межах однієї секунди — суфікс `-2`, `-3`, …, як у `normalize-decisions.sh:244-257`. Fallback на старий `<timestamp>-<session-id[0:8]>.md` якщо heading не спарсився (response без `## ADR|Runbook|Knowledge` префікса).
12
+ - **Мотивація:** після прогону `normalize-decisions.sh` нові чернетки створювалися з абстрактними session-hash іменами і знову вимагали LLM-`rewrite`-операцію щоб отримати читабельний slug. Тепер capture одразу пише читабельний slug → наступна нормалізація обмежується лише `delete`/`merge-into` для дублікатів (rename-операції стають рідкісними).
13
+
7
14
  ## [1.11.14] - 2026-05-16
8
15
 
9
16
  ### Removed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.11.14",
3
+ "version": "1.11.15",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",