deuk-agent-rule 2.4.2 → 2.4.4

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.ko.md CHANGED
@@ -6,6 +6,19 @@
6
6
 
7
7
  형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 기반으로 하며, 이 프로젝트는 [유의적 버전(Semantic Versioning)](https://semver.org/spec/v2.0.0.html)을 준수합니다.
8
8
 
9
+ ## [2.4.4] - 2026-04-19
10
+
11
+ ### 변경됨 (Changed)
12
+
13
+ - **rules:** 서브모듈 전용 규칙(DeukPack, C++, Unity)을 해당 워크스페이스의 `MODULE_RULE.md`로 이동하여 `AGENTS.md`를 일반화된 규약 중심으로 개편
14
+ - **templates:** `publish/` 소스에 맞춰 `bundle/` 내의 레거시 템플릿 정리
15
+
16
+ ## [2.4.3] - 2026-04-18
17
+
18
+ ### 변경됨 (Changed)
19
+ - **ticket:** 티켓 ID 포맷을 `NNN-topic-hostname` (예: `001-add-feature-joy-nucb`)으로 변경. 레거시 `ticket_NNN_hostname_topic` 형식 대체
20
+ - **ticket:** INDEX.json 파싱 시 기존 포맷과 신규 포맷 모두 역호환 지원
21
+
9
22
  ## [2.4.2] - 2026-04-18
10
23
 
11
24
  ### 수정됨 (Fixed)
package/CHANGELOG.md CHANGED
@@ -4,67 +4,81 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [2.4.2] - 2026-04-18
8
-
9
-
10
- ### Added
11
-
12
- - **cli:** add update notifier for checking latest npm version
13
-
14
-
15
- ### Fixed
16
-
17
- - **ticket:** resolve discrepancy between filename and ticket ID generation
18
- - **ticket:** strictly enforce 8-character limit on hostname slug
19
-
20
-
21
- ### Changed
22
-
23
- - add reasons for global installation
24
- - **changelog:** sync korean changelog with v2.4.0
25
-
26
- ## [2.4.1] - 2026-04-18
27
-
28
-
29
- ### Added
30
-
31
- - **cli:** add update notifier for checking latest npm version
32
-
33
-
34
- ### Fixed
35
-
36
- - **ticket:** strictly enforce 8-character limit on hostname slug
37
-
38
-
39
- ### Changed
40
-
41
- - add reasons for global installation
42
- - **changelog:** sync korean changelog with v2.4.0
43
-
44
- ## [2.4.0] - 2026-04-18
45
-
46
-
47
- ### Added
48
-
49
- - **init:** add obsolete template cleanup for cleaner migration
50
- - **rules:** add TICKET VERIFICATION RULE to original agents.md
51
- - **ticket:** add priority property to tickets
52
- - **ticket:** add sequential hostname-aware ticket naming (NNN-hostname-topic)
53
- - **ticket:** auto-sequence numbering and hostname-based naming (limit 8 chars)
54
-
55
-
56
- ### Fixed
57
-
58
- - **rules:** force use of local latest deuk-agent-rule to avoid npx cache issues
59
- - **scripts:** correct log output for OSS repository url example
60
-
61
-
62
- ### Changed
63
-
64
- - add Step 4 (Ticket Verification) to README files
65
- - clarify global installation and OS-specific permissions
66
- - enforce ticket reference in implementation artifacts
67
-
7
+ ## [2.4.4] - 2026-04-19
8
+
9
+ ### Changed
10
+
11
+ - **rules:** generalize `AGENTS.md` by moving submodule-specific rules (DeukPack, C++, Unity) to their respective workspace `MODULE_RULE.md` files
12
+ - **templates:** cleanup legacy templates in `bundle/` to match `publish/` source
13
+
14
+ ## [2.4.3] - 2026-04-18
15
+
16
+ ### Changed
17
+
18
+ - **ticket:** new ID format `NNN-topic-hostname` (e.g. `001-add-feature-joy-nucb`) replacing legacy `ticket_NNN_hostname_topic` format
19
+ - **ticket:** backward-compatible parsing supports both old and new formats in INDEX.json
20
+
21
+ ## [2.4.2] - 2026-04-18
22
+
23
+
24
+ ### Added
25
+
26
+ - **cli:** add update notifier for checking latest npm version
27
+
28
+
29
+ ### Fixed
30
+
31
+ - **ticket:** resolve discrepancy between filename and ticket ID generation
32
+ - **ticket:** strictly enforce 8-character limit on hostname slug
33
+
34
+
35
+ ### Changed
36
+
37
+ - add reasons for global installation
38
+ - **changelog:** sync korean changelog with v2.4.0
39
+
40
+ ## [2.4.1] - 2026-04-18
41
+
42
+
43
+ ### Added
44
+
45
+ - **cli:** add update notifier for checking latest npm version
46
+
47
+
48
+ ### Fixed
49
+
50
+ - **ticket:** strictly enforce 8-character limit on hostname slug
51
+
52
+
53
+ ### Changed
54
+
55
+ - add reasons for global installation
56
+ - **changelog:** sync korean changelog with v2.4.0
57
+
58
+ ## [2.4.0] - 2026-04-18
59
+
60
+
61
+ ### Added
62
+
63
+ - **init:** add obsolete template cleanup for cleaner migration
64
+ - **rules:** add TICKET VERIFICATION RULE to original agents.md
65
+ - **ticket:** add priority property to tickets
66
+ - **ticket:** add sequential hostname-aware ticket naming (NNN-hostname-topic)
67
+ - **ticket:** auto-sequence numbering and hostname-based naming (limit 8 chars)
68
+
69
+
70
+ ### Fixed
71
+
72
+ - **rules:** force use of local latest deuk-agent-rule to avoid npx cache issues
73
+ - **scripts:** correct log output for OSS repository url example
74
+
75
+
76
+ ### Changed
77
+
78
+ - add Step 4 (Ticket Verification) to README files
79
+ - clarify global installation and OS-specific permissions
80
+ - enforce ticket reference in implementation artifacts
81
+
68
82
  ## [2.3.2] - 2026-04-17
69
83
 
70
84
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deuk-agent-rule",
3
- "version": "2.4.2",
3
+ "version": "2.4.4",
4
4
  "description": "DeukAgentRules: generic AGENTS.md + .cursor rule templates with init/merge CLI (npm name: deuk-agent-rule).",
5
5
  "keywords": [
6
6
  "agents-md",
@@ -190,7 +190,7 @@ export function performUpgradeMigration(cwd, opts = {}) {
190
190
  const project = meta.project || detectProjectFromBody(content);
191
191
 
192
192
  const newMeta = {
193
- id: meta.id || `ticket_${statSync(abs).mtimeMs}`,
193
+ id: meta.id || `000-legacy-${statSync(abs).mtimeMs}`,
194
194
  title,
195
195
  status,
196
196
  submodule: meta.submodule || (content.includes("DeukPack") ? "DeukPack" : ""),
@@ -486,20 +486,23 @@ export function getHostnameSlug() {
486
486
 
487
487
  /**
488
488
  * Computes next sequential 3-digit ticket number by scanning all entries
489
- * in the current INDEX.json for IDs matching `ticket_NNN_*`.
490
- * Safe to call cross-device: each hostname produces an independent sequence,
491
- * but the number is always calculated from the current local INDEX state.
489
+ * in the current INDEX.json. Parses both legacy (`ticket_NNN_*`) and
490
+ * new (`NNN-topic-hostname`) formats for backward compatibility.
492
491
  *
493
492
  * @param {object[]} existingEntries - entries array from INDEX.json
494
493
  * @returns {{ num: number, hostname: string }}
495
494
  */
496
495
  export function computeNextTicketNumber(existingEntries) {
497
496
  const hostname = getHostnameSlug();
498
- // Match both old format `ticket_NNN_hostname_*` and new `ticket_NNN_*`
499
- const numRe = /^ticket_(\d{3,})_/;
497
+ // Legacy: ticket_NNN_* | New: NNN-*
498
+ const legacyRe = /^ticket_(\d{3,})_/;
499
+ const newRe = /^(\d{3,})-/;
500
500
  let max = 0;
501
501
  for (const e of (existingEntries || [])) {
502
- const m = String(e.id || '').match(numRe);
502
+ const id = String(e.id || '');
503
+ const mLegacy = id.match(legacyRe);
504
+ const mNew = id.match(newRe);
505
+ const m = mLegacy || mNew;
503
506
  if (m) {
504
507
  const n = parseInt(m[1], 10);
505
508
  if (n > max) max = n;
@@ -510,7 +513,8 @@ export function computeNextTicketNumber(existingEntries) {
510
513
 
511
514
  /**
512
515
  * Sequential hostname-aware ticket ID.
513
- * Format: ticket_NNN_<hostname>_<topic-slug>
516
+ * Format: NNN-<topic-slug>-<hostname>
517
+ * Example: 001-add-feature-joy-nucb
514
518
  * NNN starts at 001 and increments per local INDEX.json state.
515
519
  *
516
520
  * @param {string} topicSlug
@@ -520,7 +524,7 @@ export function generateTicketId(topicSlug, existingEntries) {
520
524
  const { num, hostname } = computeNextTicketNumber(existingEntries);
521
525
  const numStr = String(num).padStart(3, '0');
522
526
  const slug = toSlug(topicSlug || 'ticket').slice(0, 32);
523
- return `ticket_${numStr}_${hostname}_${slug}`;
527
+ return `${numStr}-${slug}-${hostname}`;
524
528
  }
525
529
 
526
530
  /**
@@ -73,7 +73,7 @@ export function formatTimestampForFile(d = new Date()) {
73
73
  }
74
74
 
75
75
  export function makeEntryId() {
76
- return `ticket_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
76
+ return `000-fallback-${Date.now().toString(36)}`;
77
77
  }
78
78
 
79
79
  export function detectProjectFromBody(body) {