@schnick371/devsteps-shared 0.7.0-next.3 → 0.8.1-next.1
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/dist/core/add.d.ts +2 -3
- package/dist/core/add.d.ts.map +1 -1
- package/dist/core/add.js +58 -37
- package/dist/core/add.js.map +1 -1
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +35 -25
- package/dist/core/archive.js.map +1 -1
- package/dist/core/auto-migrate.d.ts +154 -0
- package/dist/core/auto-migrate.d.ts.map +1 -0
- package/dist/core/auto-migrate.js +383 -0
- package/dist/core/auto-migrate.js.map +1 -0
- package/dist/core/auto-migrate.test.d.ts +7 -0
- package/dist/core/auto-migrate.test.d.ts.map +1 -0
- package/dist/core/auto-migrate.test.js +364 -0
- package/dist/core/auto-migrate.test.js.map +1 -0
- package/dist/core/index-rebuild.d.ts +75 -0
- package/dist/core/index-rebuild.d.ts.map +1 -0
- package/dist/core/index-rebuild.js +260 -0
- package/dist/core/index-rebuild.js.map +1 -0
- package/dist/core/index-rebuild.test.d.ts +8 -0
- package/dist/core/index-rebuild.test.d.ts.map +1 -0
- package/dist/core/index-rebuild.test.js +582 -0
- package/dist/core/index-rebuild.test.js.map +1 -0
- package/dist/core/index-refs.d.ts +155 -0
- package/dist/core/index-refs.d.ts.map +1 -0
- package/dist/core/index-refs.js +442 -0
- package/dist/core/index-refs.js.map +1 -0
- package/dist/core/index-refs.test.d.ts +7 -0
- package/dist/core/index-refs.test.d.ts.map +1 -0
- package/dist/core/index-refs.test.js +367 -0
- package/dist/core/index-refs.test.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/list.d.ts +2 -3
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +67 -12
- package/dist/core/list.js.map +1 -1
- package/dist/core/update.d.ts +1 -2
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +30 -21
- package/dist/core/update.js.map +1 -1
- package/dist/migration/fix-missing-eisenhower.d.ts +8 -0
- package/dist/migration/fix-missing-eisenhower.d.ts.map +1 -0
- package/dist/migration/fix-missing-eisenhower.js +58 -0
- package/dist/migration/fix-missing-eisenhower.js.map +1 -0
- package/dist/migration/remove-priority-field.d.ts +15 -0
- package/dist/migration/remove-priority-field.d.ts.map +1 -0
- package/dist/migration/remove-priority-field.js +113 -0
- package/dist/migration/remove-priority-field.js.map +1 -0
- package/dist/schemas/index-refs.schema.d.ts +103 -0
- package/dist/schemas/index-refs.schema.d.ts.map +1 -0
- package/dist/schemas/index-refs.schema.js +88 -0
- package/dist/schemas/index-refs.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +7 -22
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +3 -7
- package/dist/schemas/index.js.map +1 -1
- package/dist/types/commands.d.ts +2 -5
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/index-refs.types.d.ts +123 -0
- package/dist/types/index-refs.types.d.ts.map +1 -0
- package/dist/types/index-refs.types.js +71 -0
- package/dist/types/index-refs.types.js.map +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +26 -8
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
package/dist/core/update.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { STATUS, RELATIONSHIP_TYPE } from '../constants/index.js';
|
|
4
4
|
import { TYPE_TO_DIRECTORY, getCurrentTimestamp, parseItemId } from '../utils/index.js';
|
|
5
|
+
import { hasRefsStyleIndex, updateItemInIndex } from './index-refs.js';
|
|
5
6
|
/**
|
|
6
7
|
* Core business logic for updating an item
|
|
7
8
|
*/
|
|
@@ -59,8 +60,6 @@ export async function updateItem(devstepsir, args) {
|
|
|
59
60
|
}
|
|
60
61
|
if (args.status)
|
|
61
62
|
metadata.status = args.status;
|
|
62
|
-
if (args.priority)
|
|
63
|
-
metadata.priority = args.priority;
|
|
64
63
|
if (args.eisenhower)
|
|
65
64
|
metadata.eisenhower = args.eisenhower;
|
|
66
65
|
if (args.superseded_by !== undefined)
|
|
@@ -90,27 +89,37 @@ export async function updateItem(devstepsir, args) {
|
|
|
90
89
|
: '';
|
|
91
90
|
writeFileSync(descriptionPath, existing + args.append_description);
|
|
92
91
|
}
|
|
93
|
-
// Update index
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
index.items[itemIndex].status = args.status;
|
|
100
|
-
if (args.priority)
|
|
101
|
-
index.items[itemIndex].priority = args.priority;
|
|
102
|
-
if (args.title)
|
|
103
|
-
index.items[itemIndex].title = args.title;
|
|
104
|
-
index.items[itemIndex].updated = metadata.updated;
|
|
105
|
-
// Update stats
|
|
106
|
-
if (args.status && oldStatus !== args.status) {
|
|
107
|
-
index.stats = index.stats || { total: 0, by_type: {}, by_status: {} };
|
|
108
|
-
index.stats.by_status[oldStatus] = (index.stats.by_status[oldStatus] || 1) - 1;
|
|
109
|
-
index.stats.by_status[args.status] = (index.stats.by_status[args.status] || 0) + 1;
|
|
92
|
+
// Update index - use refs-style if available, otherwise legacy
|
|
93
|
+
if (hasRefsStyleIndex(devstepsir)) {
|
|
94
|
+
// Only update if status or eisenhower changed (triggers re-indexing)
|
|
95
|
+
if (args.status || args.eisenhower) {
|
|
96
|
+
updateItemInIndex(devstepsir, args.id, oldStatus, args.status, undefined, // oldEisenhower - we don't track changes
|
|
97
|
+
args.eisenhower);
|
|
110
98
|
}
|
|
111
99
|
}
|
|
112
|
-
|
|
113
|
-
|
|
100
|
+
else {
|
|
101
|
+
// Legacy index.json update
|
|
102
|
+
const indexPath = join(devstepsir, 'index.json');
|
|
103
|
+
const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
|
|
104
|
+
const itemIndex = index.items.findIndex((i) => i.id === args.id);
|
|
105
|
+
if (itemIndex !== -1) {
|
|
106
|
+
if (args.status)
|
|
107
|
+
index.items[itemIndex].status = args.status;
|
|
108
|
+
if (args.eisenhower)
|
|
109
|
+
index.items[itemIndex].eisenhower = args.eisenhower;
|
|
110
|
+
if (args.title)
|
|
111
|
+
index.items[itemIndex].title = args.title;
|
|
112
|
+
index.items[itemIndex].updated = metadata.updated;
|
|
113
|
+
// Update stats
|
|
114
|
+
if (args.status && oldStatus !== args.status) {
|
|
115
|
+
index.stats = index.stats || { total: 0, by_type: {}, by_status: {} };
|
|
116
|
+
index.stats.by_status[oldStatus] = (index.stats.by_status[oldStatus] || 1) - 1;
|
|
117
|
+
index.stats.by_status[args.status] = (index.stats.by_status[args.status] || 0) + 1;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
index.last_updated = metadata.updated;
|
|
121
|
+
writeFileSync(indexPath, JSON.stringify(index, null, 2));
|
|
122
|
+
}
|
|
114
123
|
return {
|
|
115
124
|
metadata,
|
|
116
125
|
oldStatus,
|
package/dist/core/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/core/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-missing-eisenhower.d.ts","sourceRoot":"","sources":["../../src/migration/fix-missing-eisenhower.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Fix Script: Add missing eisenhower field to work items
|
|
4
|
+
*
|
|
5
|
+
* Adds default eisenhower: "not-urgent-important" (Q2) to items missing the field
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
8
|
+
const FILES_TO_FIX = [
|
|
9
|
+
'.devsteps/bugs/BUG-010.json',
|
|
10
|
+
'.devsteps/bugs/BUG-030.json',
|
|
11
|
+
'.devsteps/bugs/BUG-031.json',
|
|
12
|
+
'.devsteps/requirements/REQ-002.json',
|
|
13
|
+
'.devsteps/tasks/TASK-051.json',
|
|
14
|
+
'.devsteps/tasks/TASK-131.json',
|
|
15
|
+
'.devsteps/tasks/TASK-133.json',
|
|
16
|
+
'.devsteps/tasks/TASK-134.json',
|
|
17
|
+
'.devsteps/tasks/TASK-135.json',
|
|
18
|
+
'.devsteps/tasks/TASK-136.json',
|
|
19
|
+
'.devsteps/tasks/TASK-137.json',
|
|
20
|
+
'.devsteps/tasks/TASK-138.json',
|
|
21
|
+
'.devsteps/tasks/TASK-139.json',
|
|
22
|
+
'.devsteps/tasks/TASK-140.json',
|
|
23
|
+
'.devsteps/tasks/TASK-141.json',
|
|
24
|
+
'.devsteps/tasks/TASK-142.json',
|
|
25
|
+
'.devsteps/tasks/TASK-143.json',
|
|
26
|
+
'.devsteps/tasks/TASK-144.json',
|
|
27
|
+
'.devsteps/tasks/TASK-145.json',
|
|
28
|
+
'.devsteps/tasks/TASK-146.json',
|
|
29
|
+
'.devsteps/tasks/TASK-147.json',
|
|
30
|
+
'.devsteps/tasks/TASK-148.json',
|
|
31
|
+
'.devsteps/tasks/TASK-149.json',
|
|
32
|
+
'.devsteps/tasks/TASK-155.json',
|
|
33
|
+
'.devsteps/tasks/TASK-156.json',
|
|
34
|
+
'.devsteps/tasks/TASK-157.json',
|
|
35
|
+
'.devsteps/tasks/TASK-158.json',
|
|
36
|
+
'.devsteps/tasks/TASK-159.json',
|
|
37
|
+
'.devsteps/tasks/TASK-160.json',
|
|
38
|
+
'.devsteps/tasks/TASK-161.json',
|
|
39
|
+
'.devsteps/tasks/TASK-162.json',
|
|
40
|
+
'.devsteps/tasks/TASK-163.json',
|
|
41
|
+
];
|
|
42
|
+
console.log('🔄 Adding eisenhower field to 32 items...\n');
|
|
43
|
+
for (const file of FILES_TO_FIX) {
|
|
44
|
+
const content = readFileSync(file, 'utf-8');
|
|
45
|
+
const metadata = JSON.parse(content);
|
|
46
|
+
if (!metadata.eisenhower) {
|
|
47
|
+
// Insert eisenhower field after status
|
|
48
|
+
const lines = content.split('\n');
|
|
49
|
+
const statusIndex = lines.findIndex(line => line.includes('"status":'));
|
|
50
|
+
if (statusIndex !== -1) {
|
|
51
|
+
lines.splice(statusIndex + 1, 0, ' "eisenhower": "not-urgent-important",');
|
|
52
|
+
writeFileSync(file, lines.join('\n'));
|
|
53
|
+
console.log(`✅ Fixed ${metadata.id}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
console.log('\n🎉 All 32 items now have eisenhower field!');
|
|
58
|
+
//# sourceMappingURL=fix-missing-eisenhower.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-missing-eisenhower.js","sourceRoot":"","sources":["../../src/migration/fix-missing-eisenhower.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,YAAY,GAAG;IACnB,6BAA6B;IAC7B,6BAA6B;IAC7B,6BAA6B;IAC7B,qCAAqC;IACrC,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;CAChC,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAE3D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,uCAAuC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAExE,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,yCAAyC,CAAC,CAAC;YAC5E,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Migration Script: Remove priority field from all work items
|
|
4
|
+
*
|
|
5
|
+
* This script:
|
|
6
|
+
* 1. Reads all JSON files in .devsteps/ directories
|
|
7
|
+
* 2. Removes the priority field from metadata
|
|
8
|
+
* 3. Verifies eisenhower field exists
|
|
9
|
+
* 4. Updates index.json to remove priority field
|
|
10
|
+
* 5. Validates data integrity
|
|
11
|
+
*
|
|
12
|
+
* Run from project root: node packages/shared/src/migration/remove-priority-field.ts
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=remove-priority-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-priority-field.d.ts","sourceRoot":"","sources":["../../src/migration/remove-priority-field.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Migration Script: Remove priority field from all work items
|
|
4
|
+
*
|
|
5
|
+
* This script:
|
|
6
|
+
* 1. Reads all JSON files in .devsteps/ directories
|
|
7
|
+
* 2. Removes the priority field from metadata
|
|
8
|
+
* 3. Verifies eisenhower field exists
|
|
9
|
+
* 4. Updates index.json to remove priority field
|
|
10
|
+
* 5. Validates data integrity
|
|
11
|
+
*
|
|
12
|
+
* Run from project root: node packages/shared/src/migration/remove-priority-field.ts
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
function findDevStepsDir(startPath) {
|
|
17
|
+
let currentPath = startPath;
|
|
18
|
+
while (currentPath !== '/') {
|
|
19
|
+
const devstepsPath = join(currentPath, '.devsteps');
|
|
20
|
+
if (existsSync(devstepsPath) && statSync(devstepsPath).isDirectory()) {
|
|
21
|
+
return devstepsPath;
|
|
22
|
+
}
|
|
23
|
+
currentPath = join(currentPath, '..');
|
|
24
|
+
}
|
|
25
|
+
throw new Error('.devsteps directory not found');
|
|
26
|
+
}
|
|
27
|
+
function getAllJsonFiles(dir) {
|
|
28
|
+
const files = [];
|
|
29
|
+
const entries = readdirSync(dir);
|
|
30
|
+
for (const entry of entries) {
|
|
31
|
+
const fullPath = join(dir, entry);
|
|
32
|
+
const stat = statSync(fullPath);
|
|
33
|
+
if (stat.isDirectory() && entry !== 'archive') {
|
|
34
|
+
files.push(...getAllJsonFiles(fullPath));
|
|
35
|
+
}
|
|
36
|
+
else if (stat.isFile() && entry.endsWith('.json') && entry !== 'index.json' && entry !== 'config.json') {
|
|
37
|
+
files.push(fullPath);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return files;
|
|
41
|
+
}
|
|
42
|
+
function migrateWorkItem(filePath) {
|
|
43
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
44
|
+
const metadata = JSON.parse(content);
|
|
45
|
+
const hasPriority = 'priority' in metadata;
|
|
46
|
+
const hasEisenhower = 'eisenhower' in metadata && metadata.eisenhower !== undefined;
|
|
47
|
+
if (hasPriority) {
|
|
48
|
+
delete metadata.priority;
|
|
49
|
+
writeFileSync(filePath, JSON.stringify(metadata, null, 2) + '\n');
|
|
50
|
+
return { removed: true, hasPriority, hasEisenhower };
|
|
51
|
+
}
|
|
52
|
+
return { removed: false, hasPriority, hasEisenhower };
|
|
53
|
+
}
|
|
54
|
+
function migrateIndex(indexPath) {
|
|
55
|
+
const content = readFileSync(indexPath, 'utf-8');
|
|
56
|
+
const index = JSON.parse(content);
|
|
57
|
+
let updated = false;
|
|
58
|
+
for (const item of index.items) {
|
|
59
|
+
if ('priority' in item) {
|
|
60
|
+
delete item.priority;
|
|
61
|
+
updated = true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (updated) {
|
|
65
|
+
writeFileSync(indexPath, JSON.stringify(index, null, 2) + '\n');
|
|
66
|
+
}
|
|
67
|
+
return { updated, count: index.items.length };
|
|
68
|
+
}
|
|
69
|
+
async function main() {
|
|
70
|
+
console.log('🔄 Starting priority field removal migration...\n');
|
|
71
|
+
// Find .devsteps directory
|
|
72
|
+
const devstepsDir = findDevStepsDir(process.cwd());
|
|
73
|
+
console.log(`📁 Found .devsteps at: ${devstepsDir}\n`);
|
|
74
|
+
// Get all work item JSON files
|
|
75
|
+
const jsonFiles = getAllJsonFiles(devstepsDir);
|
|
76
|
+
console.log(`📋 Found ${jsonFiles.length} work item JSON files\n`);
|
|
77
|
+
// Migrate work items
|
|
78
|
+
let removedCount = 0;
|
|
79
|
+
let missingEisenhower = [];
|
|
80
|
+
for (const filePath of jsonFiles) {
|
|
81
|
+
const result = migrateWorkItem(filePath);
|
|
82
|
+
if (result.removed) {
|
|
83
|
+
removedCount++;
|
|
84
|
+
}
|
|
85
|
+
if (!result.hasEisenhower) {
|
|
86
|
+
missingEisenhower.push(filePath);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
console.log(`✅ Removed priority field from ${removedCount} work items`);
|
|
90
|
+
if (missingEisenhower.length > 0) {
|
|
91
|
+
console.log(`\n⚠️ WARNING: ${missingEisenhower.length} items missing eisenhower field:`);
|
|
92
|
+
for (const file of missingEisenhower) {
|
|
93
|
+
console.log(` - ${file}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.log('✅ All work items have eisenhower field');
|
|
98
|
+
}
|
|
99
|
+
// Migrate index
|
|
100
|
+
const indexPath = join(devstepsDir, 'index.json');
|
|
101
|
+
const indexResult = migrateIndex(indexPath);
|
|
102
|
+
console.log(`\n✅ Updated index.json (${indexResult.count} items)`);
|
|
103
|
+
console.log('\n🎉 Migration completed successfully!');
|
|
104
|
+
console.log('\nNext steps:');
|
|
105
|
+
console.log('1. Build project: npm run build');
|
|
106
|
+
console.log('2. Run tests to verify changes');
|
|
107
|
+
console.log('3. Commit changes to feature branch');
|
|
108
|
+
}
|
|
109
|
+
main().catch((error) => {
|
|
110
|
+
console.error('❌ Migration failed:', error);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=remove-priority-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-priority-field.js","sourceRoot":"","sources":["../../src/migration/remove-priority-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod Validation Schemas for Refs-Style Index
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation for the distributed index architecture.
|
|
5
|
+
* Ensures data integrity across all index files.
|
|
6
|
+
*
|
|
7
|
+
* @see EPIC-018 Index Architecture Refactoring
|
|
8
|
+
* @see STORY-069 Foundation: Refs-Style Index Schema
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
/**
|
|
12
|
+
* Category index schema - base structure for all index files
|
|
13
|
+
*/
|
|
14
|
+
export declare const CategoryIndexSchema: z.ZodObject<{
|
|
15
|
+
category: z.ZodString;
|
|
16
|
+
items: z.ZodArray<z.ZodString>;
|
|
17
|
+
updated: z.ZodString;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
/**
|
|
20
|
+
* Type index schema (by-type/*.json)
|
|
21
|
+
*/
|
|
22
|
+
export declare const TypeIndexSchema: z.ZodObject<{
|
|
23
|
+
items: z.ZodArray<z.ZodString>;
|
|
24
|
+
updated: z.ZodString;
|
|
25
|
+
category: z.ZodEnum<{
|
|
26
|
+
epic: "epic";
|
|
27
|
+
story: "story";
|
|
28
|
+
task: "task";
|
|
29
|
+
requirement: "requirement";
|
|
30
|
+
feature: "feature";
|
|
31
|
+
bug: "bug";
|
|
32
|
+
spike: "spike";
|
|
33
|
+
test: "test";
|
|
34
|
+
}>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
/**
|
|
37
|
+
* Status index schema (by-status/*.json)
|
|
38
|
+
*/
|
|
39
|
+
export declare const StatusIndexSchema: z.ZodObject<{
|
|
40
|
+
items: z.ZodArray<z.ZodString>;
|
|
41
|
+
updated: z.ZodString;
|
|
42
|
+
category: z.ZodEnum<{
|
|
43
|
+
draft: "draft";
|
|
44
|
+
planned: "planned";
|
|
45
|
+
"in-progress": "in-progress";
|
|
46
|
+
review: "review";
|
|
47
|
+
done: "done";
|
|
48
|
+
obsolete: "obsolete";
|
|
49
|
+
blocked: "blocked";
|
|
50
|
+
cancelled: "cancelled";
|
|
51
|
+
}>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
/**
|
|
54
|
+
* Priority index schema (by-priority/*.json)
|
|
55
|
+
*/
|
|
56
|
+
export declare const PriorityIndexSchema: z.ZodObject<{
|
|
57
|
+
items: z.ZodArray<z.ZodString>;
|
|
58
|
+
updated: z.ZodString;
|
|
59
|
+
category: z.ZodEnum<{
|
|
60
|
+
"urgent-important": "urgent-important";
|
|
61
|
+
"not-urgent-important": "not-urgent-important";
|
|
62
|
+
"urgent-not-important": "urgent-not-important";
|
|
63
|
+
"not-urgent-not-important": "not-urgent-not-important";
|
|
64
|
+
}>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
/**
|
|
67
|
+
* Counters schema (index/counters.json)
|
|
68
|
+
*
|
|
69
|
+
* Preserves ID generation counters from legacy index
|
|
70
|
+
*/
|
|
71
|
+
export declare const CountersSchema: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
72
|
+
/**
|
|
73
|
+
* Index paths validation
|
|
74
|
+
*/
|
|
75
|
+
export declare const IndexPathsSchema: z.ZodObject<{
|
|
76
|
+
root: z.ZodString;
|
|
77
|
+
byType: z.ZodString;
|
|
78
|
+
byStatus: z.ZodString;
|
|
79
|
+
byPriority: z.ZodString;
|
|
80
|
+
counters: z.ZodString;
|
|
81
|
+
legacy: z.ZodString;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
/**
|
|
84
|
+
* Validate category index file
|
|
85
|
+
*/
|
|
86
|
+
export declare function validateCategoryIndex(data: unknown): z.infer<typeof CategoryIndexSchema>;
|
|
87
|
+
/**
|
|
88
|
+
* Validate type index file
|
|
89
|
+
*/
|
|
90
|
+
export declare function validateTypeIndex(data: unknown): z.infer<typeof TypeIndexSchema>;
|
|
91
|
+
/**
|
|
92
|
+
* Validate status index file
|
|
93
|
+
*/
|
|
94
|
+
export declare function validateStatusIndex(data: unknown): z.infer<typeof StatusIndexSchema>;
|
|
95
|
+
/**
|
|
96
|
+
* Validate priority index file
|
|
97
|
+
*/
|
|
98
|
+
export declare function validatePriorityIndex(data: unknown): z.infer<typeof PriorityIndexSchema>;
|
|
99
|
+
/**
|
|
100
|
+
* Validate counters file
|
|
101
|
+
*/
|
|
102
|
+
export declare function validateCounters(data: unknown): z.infer<typeof CountersSchema>;
|
|
103
|
+
//# sourceMappingURL=index-refs.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-refs.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/index-refs.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;iBAS9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;iBAE1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;iBAE5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;iBAE9B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,uCAG1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;iBAO3B,CAAC;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAExF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAEhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAEpF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAExF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAE9E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod Validation Schemas for Refs-Style Index
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation for the distributed index architecture.
|
|
5
|
+
* Ensures data integrity across all index files.
|
|
6
|
+
*
|
|
7
|
+
* @see EPIC-018 Index Architecture Refactoring
|
|
8
|
+
* @see STORY-069 Foundation: Refs-Style Index Schema
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
/**
|
|
12
|
+
* Category index schema - base structure for all index files
|
|
13
|
+
*/
|
|
14
|
+
export const CategoryIndexSchema = z.object({
|
|
15
|
+
/** Category name */
|
|
16
|
+
category: z.string(),
|
|
17
|
+
/** Array of item IDs */
|
|
18
|
+
items: z.array(z.string().regex(/^(EPIC|STORY|TASK|REQ|FEAT|BUG|SPIKE|TEST)-\d{3,}$/)),
|
|
19
|
+
/** Last update timestamp (ISO 8601) */
|
|
20
|
+
updated: z.string().datetime(),
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Type index schema (by-type/*.json)
|
|
24
|
+
*/
|
|
25
|
+
export const TypeIndexSchema = CategoryIndexSchema.extend({
|
|
26
|
+
category: z.enum(['epic', 'story', 'task', 'requirement', 'feature', 'bug', 'spike', 'test']),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Status index schema (by-status/*.json)
|
|
30
|
+
*/
|
|
31
|
+
export const StatusIndexSchema = CategoryIndexSchema.extend({
|
|
32
|
+
category: z.enum(['draft', 'planned', 'in-progress', 'review', 'done', 'obsolete', 'blocked', 'cancelled']),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Priority index schema (by-priority/*.json)
|
|
36
|
+
*/
|
|
37
|
+
export const PriorityIndexSchema = CategoryIndexSchema.extend({
|
|
38
|
+
category: z.enum(['urgent-important', 'not-urgent-important', 'urgent-not-important', 'not-urgent-not-important']),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Counters schema (index/counters.json)
|
|
42
|
+
*
|
|
43
|
+
* Preserves ID generation counters from legacy index
|
|
44
|
+
*/
|
|
45
|
+
export const CountersSchema = z.record(z.string(), // item type key
|
|
46
|
+
z.number().int().nonnegative());
|
|
47
|
+
/**
|
|
48
|
+
* Index paths validation
|
|
49
|
+
*/
|
|
50
|
+
export const IndexPathsSchema = z.object({
|
|
51
|
+
root: z.string(),
|
|
52
|
+
byType: z.string(),
|
|
53
|
+
byStatus: z.string(),
|
|
54
|
+
byPriority: z.string(),
|
|
55
|
+
counters: z.string(),
|
|
56
|
+
legacy: z.string(),
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Validate category index file
|
|
60
|
+
*/
|
|
61
|
+
export function validateCategoryIndex(data) {
|
|
62
|
+
return CategoryIndexSchema.parse(data);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate type index file
|
|
66
|
+
*/
|
|
67
|
+
export function validateTypeIndex(data) {
|
|
68
|
+
return TypeIndexSchema.parse(data);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate status index file
|
|
72
|
+
*/
|
|
73
|
+
export function validateStatusIndex(data) {
|
|
74
|
+
return StatusIndexSchema.parse(data);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validate priority index file
|
|
78
|
+
*/
|
|
79
|
+
export function validatePriorityIndex(data) {
|
|
80
|
+
return PriorityIndexSchema.parse(data);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Validate counters file
|
|
84
|
+
*/
|
|
85
|
+
export function validateCounters(data) {
|
|
86
|
+
return CountersSchema.parse(data);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=index-refs.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-refs.schema.js","sourceRoot":"","sources":["../../src/schemas/index-refs.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,oBAAoB;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IAEpB,wBAAwB;IACxB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAEtF,uCAAuC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAAC;IACzD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;CAC7F,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAC3D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;CAC3G,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;CAClH,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CACrC,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB;AAC5B,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IAClD,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC9C,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAChD,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IAClD,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC7C,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export * from './project.js';
|
|
3
3
|
export * from './relationships.js';
|
|
4
|
+
export * from './index-refs.schema.js';
|
|
4
5
|
/**
|
|
5
6
|
* Methodology types
|
|
6
7
|
*/
|
|
@@ -41,16 +42,6 @@ export declare const ItemStatus: z.ZodEnum<{
|
|
|
41
42
|
cancelled: "cancelled";
|
|
42
43
|
}>;
|
|
43
44
|
export type ItemStatus = z.infer<typeof ItemStatus>;
|
|
44
|
-
/**
|
|
45
|
-
* Priority levels
|
|
46
|
-
*/
|
|
47
|
-
export declare const Priority: z.ZodEnum<{
|
|
48
|
-
critical: "critical";
|
|
49
|
-
high: "high";
|
|
50
|
-
medium: "medium";
|
|
51
|
-
low: "low";
|
|
52
|
-
}>;
|
|
53
|
-
export type Priority = z.infer<typeof Priority>;
|
|
54
45
|
/**
|
|
55
46
|
* Eisenhower Matrix quadrants for prioritization
|
|
56
47
|
* Q1: Urgent + Important = Do First
|
|
@@ -137,13 +128,7 @@ export declare const ItemMetadata: z.ZodObject<{
|
|
|
137
128
|
blocked: "blocked";
|
|
138
129
|
cancelled: "cancelled";
|
|
139
130
|
}>>;
|
|
140
|
-
|
|
141
|
-
critical: "critical";
|
|
142
|
-
high: "high";
|
|
143
|
-
medium: "medium";
|
|
144
|
-
low: "low";
|
|
145
|
-
}>>;
|
|
146
|
-
eisenhower: z.ZodOptional<z.ZodEnum<{
|
|
131
|
+
eisenhower: z.ZodDefault<z.ZodEnum<{
|
|
147
132
|
"urgent-important": "urgent-important";
|
|
148
133
|
"not-urgent-important": "not-urgent-important";
|
|
149
134
|
"urgent-not-important": "urgent-not-important";
|
|
@@ -240,11 +225,11 @@ export declare const DevStepsIndex: z.ZodObject<{
|
|
|
240
225
|
blocked: "blocked";
|
|
241
226
|
cancelled: "cancelled";
|
|
242
227
|
}>;
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
228
|
+
eisenhower: z.ZodEnum<{
|
|
229
|
+
"urgent-important": "urgent-important";
|
|
230
|
+
"not-urgent-important": "not-urgent-important";
|
|
231
|
+
"urgent-not-important": "urgent-not-important";
|
|
232
|
+
"not-urgent-not-important": "not-urgent-not-important";
|
|
248
233
|
}>;
|
|
249
234
|
updated: z.ZodString;
|
|
250
235
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,WAAW;;;;EAA2C,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;EASnB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;EASrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;EAK7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;EAYvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;kBA0BpB,CAAC;AACL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;iBAMpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgCxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
// Re-export project context schemas
|
|
3
3
|
export * from './project.js';
|
|
4
4
|
export * from './relationships.js';
|
|
5
|
+
export * from './index-refs.schema.js';
|
|
5
6
|
/**
|
|
6
7
|
* Methodology types
|
|
7
8
|
*/
|
|
@@ -35,10 +36,6 @@ export const ItemStatus = z.enum([
|
|
|
35
36
|
'blocked',
|
|
36
37
|
'cancelled',
|
|
37
38
|
]);
|
|
38
|
-
/**
|
|
39
|
-
* Priority levels
|
|
40
|
-
*/
|
|
41
|
-
export const Priority = z.enum(['critical', 'high', 'medium', 'low']);
|
|
42
39
|
/**
|
|
43
40
|
* Eisenhower Matrix quadrants for prioritization
|
|
44
41
|
* Q1: Urgent + Important = Do First
|
|
@@ -117,8 +114,7 @@ export const ItemMetadata = z.object({
|
|
|
117
114
|
category: z.string().default('general'),
|
|
118
115
|
title: z.string().min(1).max(200),
|
|
119
116
|
status: ItemStatus.default('draft'),
|
|
120
|
-
|
|
121
|
-
eisenhower: EisenhowerQuadrant.optional(),
|
|
117
|
+
eisenhower: EisenhowerQuadrant.default('not-urgent-important'),
|
|
122
118
|
superseded_by: z.string().optional(),
|
|
123
119
|
created: z.string().datetime(),
|
|
124
120
|
updated: z.string().datetime(),
|
|
@@ -174,7 +170,7 @@ export const DevStepsIndex = z.object({
|
|
|
174
170
|
type: ItemType,
|
|
175
171
|
title: z.string(),
|
|
176
172
|
status: ItemStatus,
|
|
177
|
-
|
|
173
|
+
eisenhower: EisenhowerQuadrant,
|
|
178
174
|
updated: z.string().datetime(),
|
|
179
175
|
})),
|
|
180
176
|
last_updated: z.string().datetime(),
|