@lwelliott/cortex-cli 1.0.6 → 1.0.8
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/README.md +53 -26
- package/dist/cli/formatters/markdown.d.ts.map +1 -1
- package/dist/cli/formatters/markdown.js +0 -4
- package/dist/cli/formatters/markdown.js.map +1 -1
- package/dist/cli/formatters/quiet.d.ts.map +1 -1
- package/dist/cli/formatters/quiet.js +0 -2
- package/dist/cli/formatters/quiet.js.map +1 -1
- package/dist/cli/formatters/table.d.ts.map +1 -1
- package/dist/cli/formatters/table.js +0 -5
- package/dist/cli/formatters/table.js.map +1 -1
- package/dist/cli/project-resolver.js +1 -1
- package/dist/cli/project-resolver.js.map +1 -1
- package/dist/cli/project.d.ts +0 -1
- package/dist/cli/project.d.ts.map +1 -1
- package/dist/cli/project.js +2 -35
- package/dist/cli/project.js.map +1 -1
- package/dist/cli/task.d.ts.map +1 -1
- package/dist/cli/task.js +22 -7
- package/dist/cli/task.js.map +1 -1
- package/dist/config/config.d.ts +8 -2
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +25 -9
- package/dist/config/config.js.map +1 -1
- package/dist/config/paths.d.ts +13 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +76 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/registry.d.ts +10 -12
- package/dist/config/registry.d.ts.map +1 -1
- package/dist/config/registry.js +50 -44
- package/dist/config/registry.js.map +1 -1
- package/dist/config/resolver.d.ts +5 -9
- package/dist/config/resolver.d.ts.map +1 -1
- package/dist/config/resolver.js +12 -46
- package/dist/config/resolver.js.map +1 -1
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +70 -4
- package/dist/db/schema.js.map +1 -1
- package/dist/models/common.d.ts +2 -2
- package/dist/models/common.d.ts.map +1 -1
- package/dist/models/project.d.ts +4 -6
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +0 -1
- package/dist/models/project.js.map +1 -1
- package/dist/services/project.d.ts +0 -10
- package/dist/services/project.d.ts.map +1 -1
- package/dist/services/project.js +6 -30
- package/dist/services/project.js.map +1 -1
- package/dist/services/stage-validator.d.ts +19 -18
- package/dist/services/stage-validator.d.ts.map +1 -1
- package/dist/services/stage-validator.js +41 -42
- package/dist/services/stage-validator.js.map +1 -1
- package/dist/services/task.d.ts +18 -21
- package/dist/services/task.d.ts.map +1 -1
- package/dist/services/task.js +96 -86
- package/dist/services/task.js.map +1 -1
- package/dist/state-machines/task-state.d.ts +8 -8
- package/dist/state-machines/task-state.d.ts.map +1 -1
- package/dist/state-machines/task-state.js +33 -31
- package/dist/state-machines/task-state.js.map +1 -1
- package/dist/utils/errors.d.ts +26 -55
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +73 -124
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/format.d.ts +0 -11
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +1 -10
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/levenshtein.d.ts +10 -0
- package/dist/utils/levenshtein.d.ts.map +1 -0
- package/dist/utils/levenshtein.js +42 -0
- package/dist/utils/levenshtein.js.map +1 -0
- package/dist/validators/owner-validator.d.ts +20 -16
- package/dist/validators/owner-validator.d.ts.map +1 -1
- package/dist/validators/owner-validator.js +37 -38
- package/dist/validators/owner-validator.js.map +1 -1
- package/package.json +9 -2
- package/dist/cli/entity.d.ts +0 -3
- package/dist/cli/entity.d.ts.map +0 -1
- package/dist/cli/entity.js +0 -135
- package/dist/cli/entity.js.map +0 -1
- package/dist/cli/schema.d.ts +0 -3
- package/dist/cli/schema.d.ts.map +0 -1
- package/dist/cli/schema.js +0 -94
- package/dist/cli/schema.js.map +0 -1
- package/dist/db/builtin-schema-constants.d.ts +0 -109
- package/dist/db/builtin-schema-constants.d.ts.map +0 -1
- package/dist/db/builtin-schema-constants.js +0 -32
- package/dist/db/builtin-schema-constants.js.map +0 -1
- package/dist/models/entity-model.d.ts +0 -30
- package/dist/models/entity-model.d.ts.map +0 -1
- package/dist/models/entity-model.js +0 -99
- package/dist/models/entity-model.js.map +0 -1
- package/dist/services/audit-checks/mapping-check.d.ts +0 -4
- package/dist/services/audit-checks/mapping-check.d.ts.map +0 -1
- package/dist/services/audit-checks/mapping-check.js +0 -74
- package/dist/services/audit-checks/mapping-check.js.map +0 -1
- package/dist/services/audit-checks/orphan-entities-check.d.ts +0 -4
- package/dist/services/audit-checks/orphan-entities-check.d.ts.map +0 -1
- package/dist/services/audit-checks/orphan-entities-check.js +0 -39
- package/dist/services/audit-checks/orphan-entities-check.js.map +0 -1
- package/dist/services/audit-checks/sprint-consistency-check.d.ts +0 -4
- package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +0 -1
- package/dist/services/audit-checks/sprint-consistency-check.js +0 -80
- package/dist/services/audit-checks/sprint-consistency-check.js.map +0 -1
- package/dist/services/audit-checks/type-mismatch-check.d.ts +0 -4
- package/dist/services/audit-checks/type-mismatch-check.d.ts.map +0 -1
- package/dist/services/audit-checks/type-mismatch-check.js +0 -55
- package/dist/services/audit-checks/type-mismatch-check.js.map +0 -1
- package/dist/services/doc-entity-mapping.d.ts +0 -19
- package/dist/services/doc-entity-mapping.d.ts.map +0 -1
- package/dist/services/doc-entity-mapping.js +0 -35
- package/dist/services/doc-entity-mapping.js.map +0 -1
package/dist/config/resolver.js
CHANGED
|
@@ -1,31 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Project resolution logic
|
|
3
|
-
// Implements AD-0005: Project Resolution Cascade
|
|
4
|
-
// Resolution order: --project flag → env var → default → CWD → error
|
|
3
|
+
// Implements AD-0005: Project Resolution Cascade (2-step: --project flag → CWD → error)
|
|
5
4
|
// + FS-SS-002-0007 (error codes), FS-SS-002-0008 (resolution error)
|
|
6
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ENV_PROJECT_VAR = void 0;
|
|
8
6
|
exports.resolveProject = resolveProject;
|
|
7
|
+
const path_1 = require("path");
|
|
9
8
|
const errors_1 = require("../utils/errors");
|
|
10
9
|
const registry_1 = require("./registry");
|
|
11
|
-
/** Environment variable name for project override */
|
|
12
|
-
exports.ENV_PROJECT_VAR = 'CORTEX_CLI_PROJECT';
|
|
13
10
|
/**
|
|
14
11
|
* Resolve which project to use.
|
|
15
12
|
*
|
|
16
13
|
* Priority cascade (AD-0005):
|
|
17
|
-
* 1. --project flag (explicit)
|
|
18
|
-
* 2.
|
|
19
|
-
* 3.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
14
|
+
* 1. --project flag (explicit) — fails immediately on unknown name (ERR-PROJ-009)
|
|
15
|
+
* 2. Current working directory matches a registered project folder
|
|
16
|
+
* 3. Error: ProjectResolutionError (ERR-PROJ-011)
|
|
17
|
+
*
|
|
18
|
+
* There is no default project and no environment variable step.
|
|
22
19
|
*/
|
|
23
20
|
function resolveProject(opts) {
|
|
24
21
|
const options = opts ?? {};
|
|
25
22
|
const registry = (0, registry_1.loadRegistry)(options.registryPath);
|
|
26
23
|
// Track attempted methods for error reporting (FS-SS-002-0008 VR-001)
|
|
27
24
|
const attemptedMethods = [];
|
|
28
|
-
// 1. Check --project flag
|
|
25
|
+
// 1. Check --project flag (short-circuits on miss — no CWD fallthrough)
|
|
29
26
|
if (options.flag) {
|
|
30
27
|
const entry = registry.projects[options.flag];
|
|
31
28
|
if (!entry) {
|
|
@@ -34,54 +31,23 @@ function resolveProject(opts) {
|
|
|
34
31
|
return {
|
|
35
32
|
name: options.flag,
|
|
36
33
|
folder: entry.folder,
|
|
37
|
-
dbPath:
|
|
34
|
+
dbPath: (0, path_1.join)(entry.folder, 'pmp', 'project.db'),
|
|
38
35
|
resolutionMethod: 'flag',
|
|
39
36
|
};
|
|
40
37
|
}
|
|
41
|
-
// 2. Check
|
|
42
|
-
const envProject = options.envVar ?? process.env[exports.ENV_PROJECT_VAR];
|
|
43
|
-
if (envProject) {
|
|
44
|
-
const entry = registry.projects[envProject];
|
|
45
|
-
if (!entry) {
|
|
46
|
-
throw new errors_1.ProjectEnvNotFoundError(envProject);
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
name: envProject,
|
|
50
|
-
folder: entry.folder,
|
|
51
|
-
dbPath: `${entry.folder}/pmp/project.db`,
|
|
52
|
-
resolutionMethod: 'env',
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
attemptedMethods.push('CORTEX_CLI_PROJECT not set');
|
|
56
|
-
// 3. Check default project
|
|
57
|
-
if (registry.default) {
|
|
58
|
-
const entry = registry.projects[registry.default];
|
|
59
|
-
if (entry) {
|
|
60
|
-
return {
|
|
61
|
-
name: registry.default,
|
|
62
|
-
folder: entry.folder,
|
|
63
|
-
dbPath: `${entry.folder}/pmp/project.db`,
|
|
64
|
-
resolutionMethod: 'default',
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
attemptedMethods.push(`default '${registry.default}' not in registry`);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
attemptedMethods.push('no default project configured');
|
|
71
|
-
}
|
|
72
|
-
// 4. Check CWD match
|
|
38
|
+
// 2. Check CWD match
|
|
73
39
|
const cwd = options.cwd ?? process.cwd();
|
|
74
40
|
const match = (0, registry_1.findProjectByFolder)(cwd, options.registryPath);
|
|
75
41
|
if (match) {
|
|
76
42
|
return {
|
|
77
43
|
name: match.name,
|
|
78
44
|
folder: match.entry.folder,
|
|
79
|
-
dbPath:
|
|
45
|
+
dbPath: (0, path_1.join)(match.entry.folder, 'pmp', 'project.db'),
|
|
80
46
|
resolutionMethod: 'cwd',
|
|
81
47
|
};
|
|
82
48
|
}
|
|
83
49
|
attemptedMethods.push(`CWD '${cwd}' not inside any registered project`);
|
|
84
|
-
//
|
|
50
|
+
// 3. No project found — list attempted methods (FS-SS-002-0008 VR-001)
|
|
85
51
|
throw new errors_1.ProjectResolutionError(attemptedMethods);
|
|
86
52
|
}
|
|
87
53
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,wFAAwF;AACxF,oEAAoE;;AA8BpE,wCAoCC;AAhED,+BAA4B;AAE5B,4CAGyB;AACzB,yCAA+D;AAY/D;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAAC,IAAqB;IAClD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEpD,sEAAsE;IACtE,MAAM,gBAAgB,GAAa,EAAE,CAAC;IAEtC,wEAAwE;IACxE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,iCAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,IAAA,WAAI,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC;YAC/C,gBAAgB,EAAE,MAAM;SACzB,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,IAAA,8BAAmB,EAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YAC1B,MAAM,EAAE,IAAA,WAAI,EAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC;YACrD,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,GAAG,qCAAqC,CAAC,CAAC;IAExE,uEAAuE;IACvE,MAAM,IAAI,+BAAsB,CAAC,gBAAgB,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface Migration {
|
|
|
5
5
|
sql: string;
|
|
6
6
|
}
|
|
7
7
|
/** All DDL for the initial schema (migration version 1) */
|
|
8
|
-
export declare const INITIAL_SCHEMA_SQL = "\n-- \u2500\u2500\u2500 Sprints \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS sprints (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'PLANNING'\n CHECK (status IN ('PLANNING','IN EXECUTION','CLOSING','CLOSED')),\n goal TEXT,\n started_at TEXT,\n closed_at TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- \u2500\u2500\u2500 Tasks \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT NOT NULL,\n sprint_id TEXT NOT NULL REFERENCES sprints(id),\n parent_id TEXT,\n content TEXT,\n task_type TEXT NOT NULL DEFAULT 'Feature'\n CHECK (task_type IN ('Feature','Bug','Chore')),\n priority TEXT NOT NULL DEFAULT 'P2'\n CHECK (priority IN ('P0','P1','P2')),\n owner TEXT NOT NULL,\n points INTEGER DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'Backlog'\n CHECK (status IN ('Backlog','To Do','In Progress','In Review','Done','Dropped')),\n stage TEXT NOT NULL DEFAULT 'Planning'\n CHECK (stage IN ('Planning','Requirement
|
|
8
|
+
export declare const INITIAL_SCHEMA_SQL = "\n-- \u2500\u2500\u2500 Sprints \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS sprints (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'PLANNING'\n CHECK (status IN ('PLANNING','IN EXECUTION','CLOSING','CLOSED')),\n goal TEXT,\n started_at TEXT,\n closed_at TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- \u2500\u2500\u2500 Tasks \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT NOT NULL,\n sprint_id TEXT NOT NULL REFERENCES sprints(id),\n parent_id TEXT,\n content TEXT,\n task_type TEXT NOT NULL DEFAULT 'Feature'\n CHECK (task_type IN ('Feature','Bug','Chore')),\n priority TEXT NOT NULL DEFAULT 'P2'\n CHECK (priority IN ('P0','P1','P2')),\n owner TEXT NOT NULL,\n points INTEGER DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'Backlog'\n CHECK (status IN ('Backlog','To Do','In Progress','In Review','Done','Dropped')),\n stage TEXT NOT NULL DEFAULT 'Planning'\n CHECK (stage IN ('Planning','Requirement+Specification','Design','Implementation','Testing','Release')),\n session_key TEXT,\n started_at TEXT,\n completed_at TEXT,\n scope_in TEXT,\n scope_out TEXT,\n decisions TEXT,\n dependencies TEXT,\n acceptance TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (sprint_id, id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_tasks_sprint ON tasks(sprint_id);\nCREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_id);\nCREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(sprint_id, status);\nCREATE INDEX IF NOT EXISTS idx_tasks_owner ON tasks(sprint_id, owner);\n\n-- \u2500\u2500\u2500 Graph: Entity Types \u2500\u2500\u2500\n-- builtin:3.0 (Sprint 31): entity_types table DROPPED. Doc types are the sole source of truth.\n-- Do NOT recreate this table.\n\n-- \u2500\u2500\u2500 Graph: Entities \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS entities (\n id TEXT PRIMARY KEY,\n type_name TEXT NOT NULL,\n properties TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_entities_type ON entities(type_name);\n\n-- \u2500\u2500\u2500 Graph: Relation Types \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS relation_types (\n name TEXT PRIMARY KEY,\n from_types TEXT NOT NULL DEFAULT '[]',\n to_types TEXT NOT NULL DEFAULT '[]',\n cardinality TEXT DEFAULT 'many_to_many',\n inverse_of TEXT REFERENCES relation_types(name),\n description TEXT\n);\n\n-- \u2500\u2500\u2500 Graph: Relations \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS relations (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n from_id TEXT NOT NULL REFERENCES entities(id),\n rel_type TEXT NOT NULL REFERENCES relation_types(name),\n to_id TEXT NOT NULL REFERENCES entities(id),\n properties TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n UNIQUE(from_id, rel_type, to_id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_relations_from ON relations(from_id, rel_type);\nCREATE INDEX IF NOT EXISTS idx_relations_to ON relations(to_id, rel_type);\nCREATE INDEX IF NOT EXISTS idx_relations_type ON relations(rel_type);\n\n-- \u2500\u2500\u2500 Graph: Schema Version \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS graph_schema (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n\n-- \u2500\u2500\u2500 Reviews \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS reviews (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n review_num TEXT NOT NULL,\n sprint_id TEXT NOT NULL REFERENCES sprints(id),\n asset_name TEXT NOT NULL,\n review_type TEXT NOT NULL\n CHECK (review_type IN ('requirements','architecture','code','test','document')),\n verdict TEXT NOT NULL\n CHECK (verdict IN ('APPROVED','NEEDS_REWORK','OPEN_QUESTION')),\n critical_count INTEGER NOT NULL DEFAULT 0,\n major_count INTEGER NOT NULL DEFAULT 0,\n minor_count INTEGER NOT NULL DEFAULT 0,\n suggestion_count INTEGER NOT NULL DEFAULT 0,\n open_questions_count INTEGER NOT NULL DEFAULT 0,\n content TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_reviews_sprint ON reviews(sprint_id);\nCREATE INDEX IF NOT EXISTS idx_reviews_verdict ON reviews(verdict);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_reviews_sprint_num ON reviews(sprint_id, review_num);\n\n-- \u2500\u2500\u2500 Documents (canonical artifact registry) \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n title TEXT NOT NULL,\n path TEXT,\n status TEXT DEFAULT 'Draft',\n module_id TEXT,\n sprint_id TEXT REFERENCES sprints(id),\n content_hash TEXT,\n content_storage TEXT NOT NULL DEFAULT 'filesystem'\n CHECK (content_storage IN ('filesystem', 'db')),\n metadata TEXT DEFAULT '{}',\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_documents_type ON documents(type);\nCREATE INDEX IF NOT EXISTS idx_documents_module ON documents(module_id);\nCREATE INDEX IF NOT EXISTS idx_documents_sprint ON documents(sprint_id);\n\n-- \u2500\u2500\u2500 Document Contents (DB-stored content + FTS5) \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS document_contents (\n document_id TEXT PRIMARY KEY REFERENCES documents(id),\n content TEXT NOT NULL,\n content_hash TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE VIRTUAL TABLE IF NOT EXISTS document_contents_fts USING fts5(\n document_id,\n content,\n content='document_contents',\n content_rowid='rowid'\n);\n\n-- FTS sync triggers\nCREATE TRIGGER IF NOT EXISTS document_contents_ai AFTER INSERT ON document_contents BEGIN\n INSERT INTO document_contents_fts(rowid, document_id, content)\n VALUES (new.rowid, new.document_id, new.content);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS document_contents_ad AFTER DELETE ON document_contents BEGIN\n INSERT INTO document_contents_fts(document_contents_fts, rowid, document_id, content)\n VALUES ('delete', old.rowid, old.document_id, old.content);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS document_contents_au AFTER UPDATE ON document_contents BEGIN\n INSERT INTO document_contents_fts(document_contents_fts, rowid, document_id, content)\n VALUES ('delete', old.rowid, old.document_id, old.content);\n INSERT INTO document_contents_fts(rowid, document_id, content)\n VALUES (new.rowid, new.document_id, new.content);\nEND;\n\n-- \u2500\u2500\u2500 Test Execution Reports \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS test_reports (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n sprint_id TEXT NOT NULL REFERENCES sprints(id),\n task_id TEXT REFERENCES tasks(id),\n run_number INTEGER NOT NULL,\n total INTEGER NOT NULL,\n passed INTEGER NOT NULL,\n failed INTEGER NOT NULL,\n skipped INTEGER NOT NULL,\n blocked INTEGER NOT NULL DEFAULT 0,\n result TEXT NOT NULL CHECK (result IN ('PASS','FAIL','BLOCKED')),\n command TEXT,\n duration_s REAL,\n report_path TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- \u2500\u2500\u2500 Lessons \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS lessons (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n sprint_id TEXT REFERENCES sprints(id),\n category TEXT NOT NULL\n CHECK (category IN ('Process','Technical','Tool','Model')),\n title TEXT NOT NULL,\n description TEXT NOT NULL,\n severity TEXT DEFAULT 'minor' CHECK (severity IN ('critical','major','minor','suggestion')),\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- \u2500\u2500\u2500 Advisory Locks \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS locks (\n name TEXT PRIMARY KEY,\n owner TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n last_heartbeat TEXT\n);\n\n-- \u2500\u2500\u2500 Migrations \u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS _migrations (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now')),\n checksum TEXT NOT NULL DEFAULT ''\n);\n";
|
|
9
9
|
/**
|
|
10
10
|
* Sequential versioned migrations.
|
|
11
11
|
* Version 1 is the initial schema applied on fresh database creation.
|
package/dist/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAGA,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAGA,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,yzQAuN9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,EAioBjC,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,cAAc,QAA4C,CAAC;AAExE,qDAAqD;AACrD,eAAO,MAAM,eAAe,uMAgBlB,CAAC;AAEX,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,wZAkBnB,CAAC"}
|
package/dist/db/schema.js
CHANGED
|
@@ -33,7 +33,7 @@ CREATE TABLE IF NOT EXISTS tasks (
|
|
|
33
33
|
status TEXT NOT NULL DEFAULT 'Backlog'
|
|
34
34
|
CHECK (status IN ('Backlog','To Do','In Progress','In Review','Done','Dropped')),
|
|
35
35
|
stage TEXT NOT NULL DEFAULT 'Planning'
|
|
36
|
-
CHECK (stage IN ('Planning','Requirement
|
|
36
|
+
CHECK (stage IN ('Planning','Requirement+Specification','Design','Implementation','Testing','Release')),
|
|
37
37
|
session_key TEXT,
|
|
38
38
|
started_at TEXT,
|
|
39
39
|
completed_at TEXT,
|
|
@@ -564,7 +564,7 @@ exports.MIGRATIONS = [
|
|
|
564
564
|
|
|
565
565
|
-- Step 3: Add stage column with default 'Planning' and CHECK constraint
|
|
566
566
|
ALTER TABLE tasks ADD COLUMN stage TEXT NOT NULL DEFAULT 'Planning'
|
|
567
|
-
CHECK (stage IN ('Planning','Requirement
|
|
567
|
+
CHECK (stage IN ('Planning','Requirement+Specification','Design','Implementation','Testing','Release'));
|
|
568
568
|
|
|
569
569
|
-- Step 4: Recreate status CHECK constraint without Blocked
|
|
570
570
|
-- SQLite doesn't support ALTER COLUMN, so recreate the table
|
|
@@ -582,7 +582,7 @@ exports.MIGRATIONS = [
|
|
|
582
582
|
status TEXT NOT NULL DEFAULT 'Backlog'
|
|
583
583
|
CHECK (status IN ('Backlog','To Do','In Progress','In Review','Done','Dropped')),
|
|
584
584
|
stage TEXT NOT NULL DEFAULT 'Planning'
|
|
585
|
-
CHECK (stage IN ('Planning','Requirement
|
|
585
|
+
CHECK (stage IN ('Planning','Requirement+Specification','Design','Implementation','Testing','Release')),
|
|
586
586
|
session_key TEXT,
|
|
587
587
|
started_at TEXT,
|
|
588
588
|
reviewer TEXT,
|
|
@@ -745,7 +745,7 @@ exports.MIGRATIONS = [
|
|
|
745
745
|
status TEXT NOT NULL DEFAULT 'Backlog'
|
|
746
746
|
CHECK (status IN ('Backlog','To Do','In Progress','In Review','Done','Dropped')),
|
|
747
747
|
stage TEXT NOT NULL DEFAULT 'Planning'
|
|
748
|
-
CHECK (stage IN ('Planning','Requirement
|
|
748
|
+
CHECK (stage IN ('Planning','Requirement+Specification','Design','Implementation','Testing','Release')),
|
|
749
749
|
session_key TEXT,
|
|
750
750
|
started_at TEXT,
|
|
751
751
|
completed_at TEXT,
|
|
@@ -800,6 +800,72 @@ exports.MIGRATIONS = [
|
|
|
800
800
|
ALTER TABLE tasks DROP COLUMN description;
|
|
801
801
|
`,
|
|
802
802
|
},
|
|
803
|
+
{
|
|
804
|
+
version: 15,
|
|
805
|
+
description: 'AD-0031 v2: Consolidate stages 8→6 (free transitions, case-insensitive, non-terminal Dropped)',
|
|
806
|
+
sql: `
|
|
807
|
+
-- Build new 6-stage table first (empty, with new CHECK constraint)
|
|
808
|
+
CREATE TABLE IF NOT EXISTS tasks_v15 (
|
|
809
|
+
id TEXT NOT NULL,
|
|
810
|
+
sprint_id TEXT NOT NULL REFERENCES sprints(id),
|
|
811
|
+
parent_id TEXT,
|
|
812
|
+
content TEXT,
|
|
813
|
+
task_type TEXT NOT NULL DEFAULT 'Feature'
|
|
814
|
+
CHECK (task_type IN ('Feature','Bug','Chore')),
|
|
815
|
+
priority TEXT NOT NULL DEFAULT 'P2'
|
|
816
|
+
CHECK (priority IN ('P0','P1','P2')),
|
|
817
|
+
owner TEXT NOT NULL,
|
|
818
|
+
points INTEGER DEFAULT 0,
|
|
819
|
+
status TEXT NOT NULL DEFAULT 'Backlog'
|
|
820
|
+
CHECK (status IN ('Backlog','To Do','In Progress','In Review','Done','Dropped')),
|
|
821
|
+
stage TEXT NOT NULL DEFAULT 'Planning'
|
|
822
|
+
CHECK (stage IN ('Planning','Requirement+Specification','Design','Implementation','Testing','Release')),
|
|
823
|
+
session_key TEXT,
|
|
824
|
+
started_at TEXT,
|
|
825
|
+
completed_at TEXT,
|
|
826
|
+
scope_in TEXT,
|
|
827
|
+
scope_out TEXT,
|
|
828
|
+
decisions TEXT,
|
|
829
|
+
dependencies TEXT,
|
|
830
|
+
acceptance TEXT,
|
|
831
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
832
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
833
|
+
removed_at TEXT,
|
|
834
|
+
PRIMARY KEY (sprint_id, id)
|
|
835
|
+
);
|
|
836
|
+
|
|
837
|
+
-- Copy data with stage mapping in the SELECT (avoids violating old CHECK constraint)
|
|
838
|
+
INSERT INTO tasks_v15 (
|
|
839
|
+
id, sprint_id, parent_id, content, task_type, priority,
|
|
840
|
+
owner, points, status, stage, session_key, started_at,
|
|
841
|
+
completed_at, scope_in, scope_out, decisions, dependencies,
|
|
842
|
+
acceptance, created_at, updated_at, removed_at
|
|
843
|
+
)
|
|
844
|
+
SELECT
|
|
845
|
+
id, sprint_id, parent_id, content, task_type, priority,
|
|
846
|
+
owner, points, status,
|
|
847
|
+
CASE
|
|
848
|
+
WHEN stage IN ('Requirement', 'Specification') THEN 'Requirement+Specification'
|
|
849
|
+
WHEN stage = 'Test Plan' THEN 'Testing'
|
|
850
|
+
ELSE stage
|
|
851
|
+
END,
|
|
852
|
+
session_key, started_at,
|
|
853
|
+
completed_at, scope_in, scope_out, decisions, dependencies,
|
|
854
|
+
acceptance, created_at, updated_at, removed_at
|
|
855
|
+
FROM tasks;
|
|
856
|
+
|
|
857
|
+
-- Swap tables
|
|
858
|
+
DROP TABLE IF EXISTS tasks;
|
|
859
|
+
ALTER TABLE tasks_v15 RENAME TO tasks;
|
|
860
|
+
|
|
861
|
+
-- Recreate indexes
|
|
862
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_sprint ON tasks(sprint_id);
|
|
863
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_id);
|
|
864
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(sprint_id, status);
|
|
865
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_owner ON tasks(sprint_id, owner);
|
|
866
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_sprint_id_id ON tasks(sprint_id, id);
|
|
867
|
+
`,
|
|
868
|
+
},
|
|
803
869
|
];
|
|
804
870
|
/** Current latest migration version */
|
|
805
871
|
exports.LATEST_VERSION = exports.MIGRATIONS[exports.MIGRATIONS.length - 1].version;
|
package/dist/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/models/common.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export type TaskType = 'Feature' | 'Bug' | 'Chore';
|
|
|
6
6
|
export type TaskPriority = 'P0' | 'P1' | 'P2';
|
|
7
7
|
/** Task status values (kanban columns) — Blocked removed per FS-SS-030-0004 */
|
|
8
8
|
export type TaskStatus = 'Backlog' | 'To Do' | 'In Progress' | 'In Review' | 'Done' | 'Dropped';
|
|
9
|
-
/** Task stage values (workflow phases) —
|
|
10
|
-
export type TaskStage = 'Planning' | 'Requirement
|
|
9
|
+
/** Task stage values (workflow phases) — 6 consolidated stages, freely reversible */
|
|
10
|
+
export type TaskStage = 'Planning' | 'Requirement+Specification' | 'Design' | 'Implementation' | 'Testing' | 'Release';
|
|
11
11
|
/** Review type values */
|
|
12
12
|
export type ReviewType = 'requirements' | 'architecture' | 'code' | 'test' | 'document';
|
|
13
13
|
/** Review verdict values */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/models/common.ts"],"names":[],"mappings":"AAEA,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9E,uBAAuB;AACvB,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnD,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,OAAO,GACP,aAAa,GACb,WAAW,GACX,MAAM,GACN,SAAS,CAAC;AAEd,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/models/common.ts"],"names":[],"mappings":"AAEA,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9E,uBAAuB;AACvB,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnD,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,OAAO,GACP,aAAa,GACb,WAAW,GACX,MAAM,GACN,SAAS,CAAC;AAEd,qFAAqF;AACrF,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,2BAA2B,GAC3B,QAAQ,GACR,gBAAgB,GAChB,SAAS,GACT,SAAS,CAAC;AAEd,yBAAyB;AACzB,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAExF,4BAA4B;AAC5B,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC;AAE1E,gCAAgC;AAChC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAErD,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAExE,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;AAE3E,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,IAAI,CAAC;AAEjD,oCAAoC;AACpC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3F,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC"}
|
package/dist/models/project.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/** Global projects registry structure (~/.
|
|
1
|
+
/** Global projects registry structure (~/.cortex-cli/registry.json) */
|
|
2
2
|
export interface ProjectsRegistry {
|
|
3
3
|
version: number;
|
|
4
|
-
default: string | null;
|
|
5
4
|
projects: Record<string, ProjectEntry>;
|
|
6
5
|
}
|
|
7
6
|
/** Single project entry in the registry */
|
|
@@ -9,9 +8,10 @@ export interface ProjectEntry {
|
|
|
9
8
|
folder: string;
|
|
10
9
|
added_at: string;
|
|
11
10
|
}
|
|
12
|
-
/** Global config structure (~/.
|
|
11
|
+
/** Global config structure (~/.cortex-cli/config.json) */
|
|
13
12
|
export interface GlobalConfig {
|
|
14
13
|
version: number;
|
|
14
|
+
/** @deprecated v2: No longer read/written by the project resolution system. Retained for config.json backward compatibility. */
|
|
15
15
|
default_project: string | null;
|
|
16
16
|
editor: string | null;
|
|
17
17
|
settings: Record<string, unknown>;
|
|
@@ -22,14 +22,12 @@ export interface ProjectResult {
|
|
|
22
22
|
folder: string;
|
|
23
23
|
dbPath: string;
|
|
24
24
|
isNew: boolean;
|
|
25
|
-
isDefault: boolean;
|
|
26
25
|
}
|
|
27
26
|
/** Detailed project info (from `project info` command) */
|
|
28
27
|
export interface ProjectInfo {
|
|
29
28
|
name: string;
|
|
30
29
|
folder: string;
|
|
31
30
|
dbPath: string;
|
|
32
|
-
isDefault: boolean;
|
|
33
31
|
sprintCount: number;
|
|
34
32
|
activeSprintCount: number;
|
|
35
33
|
docCount: number;
|
|
@@ -40,7 +38,7 @@ export interface ResolvedProject {
|
|
|
40
38
|
name: string;
|
|
41
39
|
folder: string;
|
|
42
40
|
dbPath: string;
|
|
43
|
-
resolutionMethod: 'flag' | '
|
|
41
|
+
resolutionMethod: 'flag' | 'cwd';
|
|
44
42
|
}
|
|
45
43
|
/** Empty registry template */
|
|
46
44
|
export declare const EMPTY_REGISTRY: ProjectsRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AAED,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC;CAClC;AAED,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,gBAG5B,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,YAAY,EAAE,YAK1B,CAAC"}
|
package/dist/models/project.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":";AAAA,mCAAmC;;;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":";AAAA,mCAAmC;;;AAkDnC,8BAA8B;AACjB,QAAA,cAAc,GAAqB;IAC9C,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,4BAA4B;AACf,QAAA,YAAY,GAAiB;IACxC,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,EAAE;CACb,CAAC"}
|
|
@@ -56,16 +56,6 @@ export declare function removeProject(name: string, opts?: ProjectServiceOptions
|
|
|
56
56
|
* List all registered projects.
|
|
57
57
|
*/
|
|
58
58
|
export declare function listAllProjects(opts?: ProjectServiceOptions): ProjectsRegistry;
|
|
59
|
-
/**
|
|
60
|
-
* Set the default project.
|
|
61
|
-
*
|
|
62
|
-
* @throws ProjectNotFoundError (ERR-PROJ-007) if the project doesn't exist
|
|
63
|
-
*/
|
|
64
|
-
export declare function setProjectDefault(name: string, opts?: ProjectServiceOptions): void;
|
|
65
|
-
/**
|
|
66
|
-
* Get the current default project name.
|
|
67
|
-
*/
|
|
68
|
-
export declare function getDefaultProjectName(opts?: ProjectServiceOptions): string | null;
|
|
69
59
|
/**
|
|
70
60
|
* Show project details: folder, database path, sprint summary, entity counts.
|
|
71
61
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAStF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYpD,qCAAqC;AACrC,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA4BtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAyDvG;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,aAAa,CAyCzG;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAS1H;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,gBAAgB,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,WAAW,CAgCtF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAKxG"}
|
package/dist/services/project.js
CHANGED
|
@@ -8,8 +8,6 @@ exports.createProject = createProject;
|
|
|
8
8
|
exports.registerProject = registerProject;
|
|
9
9
|
exports.removeProject = removeProject;
|
|
10
10
|
exports.listAllProjects = listAllProjects;
|
|
11
|
-
exports.setProjectDefault = setProjectDefault;
|
|
12
|
-
exports.getDefaultProjectName = getDefaultProjectName;
|
|
13
11
|
exports.getProjectInfo = getProjectInfo;
|
|
14
12
|
exports.resolveProjectForCommand = resolveProjectForCommand;
|
|
15
13
|
const fs_1 = require("fs");
|
|
@@ -98,7 +96,7 @@ function createProject(name, folder, opts) {
|
|
|
98
96
|
catch (err) {
|
|
99
97
|
throw new errors_1.ProjectFolderCreateError(absoluteFolder, err instanceof Error ? err.message : String(err));
|
|
100
98
|
}
|
|
101
|
-
const dbPath =
|
|
99
|
+
const dbPath = (0, path_1.join)(absoluteFolder, 'pmp', 'project.db');
|
|
102
100
|
const dbExisted = (0, fs_1.existsSync)(dbPath);
|
|
103
101
|
// Initialize the database
|
|
104
102
|
const db = (0, connection_1.openConnection)(dbPath);
|
|
@@ -109,14 +107,12 @@ function createProject(name, folder, opts) {
|
|
|
109
107
|
db.close();
|
|
110
108
|
}
|
|
111
109
|
// Register in global registry
|
|
112
|
-
|
|
113
|
-
const isDefault = registry.default === name;
|
|
110
|
+
(0, registry_1.addProject)(name, absoluteFolder, opts?.registryPath);
|
|
114
111
|
return {
|
|
115
112
|
name,
|
|
116
113
|
folder: absoluteFolder,
|
|
117
114
|
dbPath,
|
|
118
115
|
isNew: !dbExisted,
|
|
119
|
-
isDefault,
|
|
120
116
|
};
|
|
121
117
|
}
|
|
122
118
|
/**
|
|
@@ -148,7 +144,7 @@ function registerProject(name, folder, opts) {
|
|
|
148
144
|
if (!(0, fs_1.existsSync)(absoluteFolder)) {
|
|
149
145
|
throw new errors_1.ProjectFolderNotFoundError(absoluteFolder);
|
|
150
146
|
}
|
|
151
|
-
const dbPath =
|
|
147
|
+
const dbPath = (0, path_1.join)(absoluteFolder, 'pmp', 'project.db');
|
|
152
148
|
const dbExisted = (0, fs_1.existsSync)(dbPath);
|
|
153
149
|
// Initialize the database
|
|
154
150
|
const db = (0, connection_1.openConnection)(dbPath);
|
|
@@ -159,14 +155,12 @@ function registerProject(name, folder, opts) {
|
|
|
159
155
|
db.close();
|
|
160
156
|
}
|
|
161
157
|
// Register in global registry
|
|
162
|
-
|
|
163
|
-
const isDefault = registry.default === name;
|
|
158
|
+
(0, registry_1.addProject)(name, absoluteFolder, opts?.registryPath);
|
|
164
159
|
return {
|
|
165
160
|
name,
|
|
166
161
|
folder: absoluteFolder,
|
|
167
162
|
dbPath,
|
|
168
163
|
isNew: !dbExisted,
|
|
169
|
-
isDefault,
|
|
170
164
|
};
|
|
171
165
|
}
|
|
172
166
|
/**
|
|
@@ -181,7 +175,7 @@ function removeProject(name, opts) {
|
|
|
181
175
|
return {
|
|
182
176
|
name,
|
|
183
177
|
folder: entry.folder,
|
|
184
|
-
dbPath:
|
|
178
|
+
dbPath: (0, path_1.join)(entry.folder, 'pmp', 'project.db'),
|
|
185
179
|
};
|
|
186
180
|
}
|
|
187
181
|
/**
|
|
@@ -190,21 +184,6 @@ function removeProject(name, opts) {
|
|
|
190
184
|
function listAllProjects(opts) {
|
|
191
185
|
return (0, registry_1.listProjects)(opts?.registryPath);
|
|
192
186
|
}
|
|
193
|
-
/**
|
|
194
|
-
* Set the default project.
|
|
195
|
-
*
|
|
196
|
-
* @throws ProjectNotFoundError (ERR-PROJ-007) if the project doesn't exist
|
|
197
|
-
*/
|
|
198
|
-
function setProjectDefault(name, opts) {
|
|
199
|
-
(0, registry_1.setDefaultProject)(name, opts?.registryPath);
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Get the current default project name.
|
|
203
|
-
*/
|
|
204
|
-
function getDefaultProjectName(opts) {
|
|
205
|
-
const registry = (0, registry_1.loadRegistry)(opts?.registryPath);
|
|
206
|
-
return registry.default;
|
|
207
|
-
}
|
|
208
187
|
/**
|
|
209
188
|
* Show project details: folder, database path, sprint summary, entity counts.
|
|
210
189
|
*
|
|
@@ -212,9 +191,7 @@ function getDefaultProjectName(opts) {
|
|
|
212
191
|
*/
|
|
213
192
|
function getProjectInfo(name, opts) {
|
|
214
193
|
const entry = (0, registry_1.getProject)(name, opts?.registryPath);
|
|
215
|
-
const
|
|
216
|
-
const dbPath = `${entry.folder}/pmp/project.db`;
|
|
217
|
-
const isDefault = registry.default === name;
|
|
194
|
+
const dbPath = (0, path_1.join)(entry.folder, 'pmp', 'project.db');
|
|
218
195
|
// Query the database for summary counts
|
|
219
196
|
let sprintCount = 0;
|
|
220
197
|
let activeSprintCount = 0;
|
|
@@ -236,7 +213,6 @@ function getProjectInfo(name, opts) {
|
|
|
236
213
|
name,
|
|
237
214
|
folder: entry.folder,
|
|
238
215
|
dbPath,
|
|
239
|
-
isDefault,
|
|
240
216
|
sprintCount,
|
|
241
217
|
activeSprintCount,
|
|
242
218
|
docCount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,wEAAwE;AACxE,uDAAuD;;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
import type { TaskStage } from '../models/common';
|
|
2
|
-
/** Canonical stage sequence
|
|
2
|
+
/** Canonical stage sequence — 6 consolidated stages */
|
|
3
3
|
export declare const CANONICAL_STAGES: TaskStage[];
|
|
4
4
|
/**
|
|
5
|
-
* Check if a given string is a valid stage value.
|
|
5
|
+
* Check if a given string is a valid stage value (case-insensitive).
|
|
6
6
|
*/
|
|
7
7
|
export declare function isValidStage(stage: string): stage is TaskStage;
|
|
8
|
+
/**
|
|
9
|
+
* Normalize a stage value to canonical case.
|
|
10
|
+
* Returns null if the value is not a valid stage.
|
|
11
|
+
*/
|
|
12
|
+
export declare function normalizeStage(stage: string): TaskStage | null;
|
|
8
13
|
/**
|
|
9
14
|
* Return the canonical stage sequence.
|
|
10
15
|
*/
|
|
11
16
|
export declare function getValidStages(): TaskStage[];
|
|
12
17
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
18
|
+
* Validate a stage value case-insensitively with closest-match suggestions.
|
|
19
|
+
*
|
|
20
|
+
* @param stage - The stage value to validate
|
|
21
|
+
* @returns The canonical stage value if valid
|
|
22
|
+
* @throws StageInvalidError with closest-match suggestions if invalid
|
|
15
23
|
*/
|
|
16
|
-
export declare function
|
|
24
|
+
export declare function validateStage(stage: string): TaskStage;
|
|
17
25
|
/**
|
|
18
26
|
* Validate that a stage progression is valid.
|
|
19
27
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* - SR-002: Intermediate stages may be skipped
|
|
23
|
-
* - SR-003: Release is the final stage
|
|
24
|
-
* - SR-004: Dropped status locks the task — no stage changes
|
|
25
|
-
* - SR-005: Same-stage transitions are rejected
|
|
28
|
+
* v2: Free stage transitions. Forward, backward, and same-stage all allowed.
|
|
29
|
+
* No forward-only enforcement. No Dropped lock. No owner-for-stage check.
|
|
26
30
|
*
|
|
27
|
-
* @param currentStage - The task's current stage
|
|
31
|
+
* @param currentStage - The task's current stage (unused in v2, kept for API compatibility)
|
|
28
32
|
* @param targetStage - The desired target stage
|
|
29
|
-
* @param taskStatus - The task's current status (
|
|
30
|
-
* @throws StageInvalidError if target is not a valid stage
|
|
31
|
-
* @throws StageLockedError if task is Dropped
|
|
32
|
-
* @throws StageNoProgressError if target is same as current
|
|
33
|
-
* @throws StageBackwardError if target is backward of current
|
|
33
|
+
* @param taskStatus - The task's current status (unused in v2, kept for API compatibility)
|
|
34
34
|
*/
|
|
35
|
-
export declare function validateProgression(
|
|
35
|
+
export declare function validateProgression(_currentStage: TaskStage, _targetStage: TaskStage, _taskStatus: string): void;
|
|
36
|
+
export { validateStage as validateStageValue };
|
|
36
37
|
//# sourceMappingURL=stage-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-validator.d.ts","sourceRoot":"","sources":["../../src/services/stage-validator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"stage-validator.d.ts","sourceRoot":"","sources":["../../src/services/stage-validator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIlD,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAOvC,CAAC;AAOF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAQtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,MAAM,GAClB,IAAI,CAIN;AAGD,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,CAAC"}
|