@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.
Files changed (114) hide show
  1. package/README.md +53 -26
  2. package/dist/cli/formatters/markdown.d.ts.map +1 -1
  3. package/dist/cli/formatters/markdown.js +0 -4
  4. package/dist/cli/formatters/markdown.js.map +1 -1
  5. package/dist/cli/formatters/quiet.d.ts.map +1 -1
  6. package/dist/cli/formatters/quiet.js +0 -2
  7. package/dist/cli/formatters/quiet.js.map +1 -1
  8. package/dist/cli/formatters/table.d.ts.map +1 -1
  9. package/dist/cli/formatters/table.js +0 -5
  10. package/dist/cli/formatters/table.js.map +1 -1
  11. package/dist/cli/project-resolver.js +1 -1
  12. package/dist/cli/project-resolver.js.map +1 -1
  13. package/dist/cli/project.d.ts +0 -1
  14. package/dist/cli/project.d.ts.map +1 -1
  15. package/dist/cli/project.js +2 -35
  16. package/dist/cli/project.js.map +1 -1
  17. package/dist/cli/task.d.ts.map +1 -1
  18. package/dist/cli/task.js +22 -7
  19. package/dist/cli/task.js.map +1 -1
  20. package/dist/config/config.d.ts +8 -2
  21. package/dist/config/config.d.ts.map +1 -1
  22. package/dist/config/config.js +25 -9
  23. package/dist/config/config.js.map +1 -1
  24. package/dist/config/paths.d.ts +13 -0
  25. package/dist/config/paths.d.ts.map +1 -0
  26. package/dist/config/paths.js +76 -0
  27. package/dist/config/paths.js.map +1 -0
  28. package/dist/config/registry.d.ts +10 -12
  29. package/dist/config/registry.d.ts.map +1 -1
  30. package/dist/config/registry.js +50 -44
  31. package/dist/config/registry.js.map +1 -1
  32. package/dist/config/resolver.d.ts +5 -9
  33. package/dist/config/resolver.d.ts.map +1 -1
  34. package/dist/config/resolver.js +12 -46
  35. package/dist/config/resolver.js.map +1 -1
  36. package/dist/db/schema.d.ts +1 -1
  37. package/dist/db/schema.d.ts.map +1 -1
  38. package/dist/db/schema.js +70 -4
  39. package/dist/db/schema.js.map +1 -1
  40. package/dist/models/common.d.ts +2 -2
  41. package/dist/models/common.d.ts.map +1 -1
  42. package/dist/models/project.d.ts +4 -6
  43. package/dist/models/project.d.ts.map +1 -1
  44. package/dist/models/project.js +0 -1
  45. package/dist/models/project.js.map +1 -1
  46. package/dist/services/project.d.ts +0 -10
  47. package/dist/services/project.d.ts.map +1 -1
  48. package/dist/services/project.js +6 -30
  49. package/dist/services/project.js.map +1 -1
  50. package/dist/services/stage-validator.d.ts +19 -18
  51. package/dist/services/stage-validator.d.ts.map +1 -1
  52. package/dist/services/stage-validator.js +41 -42
  53. package/dist/services/stage-validator.js.map +1 -1
  54. package/dist/services/task.d.ts +18 -21
  55. package/dist/services/task.d.ts.map +1 -1
  56. package/dist/services/task.js +96 -86
  57. package/dist/services/task.js.map +1 -1
  58. package/dist/state-machines/task-state.d.ts +8 -8
  59. package/dist/state-machines/task-state.d.ts.map +1 -1
  60. package/dist/state-machines/task-state.js +33 -31
  61. package/dist/state-machines/task-state.js.map +1 -1
  62. package/dist/utils/errors.d.ts +26 -55
  63. package/dist/utils/errors.d.ts.map +1 -1
  64. package/dist/utils/errors.js +73 -124
  65. package/dist/utils/errors.js.map +1 -1
  66. package/dist/utils/format.d.ts +0 -11
  67. package/dist/utils/format.d.ts.map +1 -1
  68. package/dist/utils/format.js +1 -10
  69. package/dist/utils/format.js.map +1 -1
  70. package/dist/utils/levenshtein.d.ts +10 -0
  71. package/dist/utils/levenshtein.d.ts.map +1 -0
  72. package/dist/utils/levenshtein.js +42 -0
  73. package/dist/utils/levenshtein.js.map +1 -0
  74. package/dist/validators/owner-validator.d.ts +20 -16
  75. package/dist/validators/owner-validator.d.ts.map +1 -1
  76. package/dist/validators/owner-validator.js +37 -38
  77. package/dist/validators/owner-validator.js.map +1 -1
  78. package/package.json +9 -2
  79. package/dist/cli/entity.d.ts +0 -3
  80. package/dist/cli/entity.d.ts.map +0 -1
  81. package/dist/cli/entity.js +0 -135
  82. package/dist/cli/entity.js.map +0 -1
  83. package/dist/cli/schema.d.ts +0 -3
  84. package/dist/cli/schema.d.ts.map +0 -1
  85. package/dist/cli/schema.js +0 -94
  86. package/dist/cli/schema.js.map +0 -1
  87. package/dist/db/builtin-schema-constants.d.ts +0 -109
  88. package/dist/db/builtin-schema-constants.d.ts.map +0 -1
  89. package/dist/db/builtin-schema-constants.js +0 -32
  90. package/dist/db/builtin-schema-constants.js.map +0 -1
  91. package/dist/models/entity-model.d.ts +0 -30
  92. package/dist/models/entity-model.d.ts.map +0 -1
  93. package/dist/models/entity-model.js +0 -99
  94. package/dist/models/entity-model.js.map +0 -1
  95. package/dist/services/audit-checks/mapping-check.d.ts +0 -4
  96. package/dist/services/audit-checks/mapping-check.d.ts.map +0 -1
  97. package/dist/services/audit-checks/mapping-check.js +0 -74
  98. package/dist/services/audit-checks/mapping-check.js.map +0 -1
  99. package/dist/services/audit-checks/orphan-entities-check.d.ts +0 -4
  100. package/dist/services/audit-checks/orphan-entities-check.d.ts.map +0 -1
  101. package/dist/services/audit-checks/orphan-entities-check.js +0 -39
  102. package/dist/services/audit-checks/orphan-entities-check.js.map +0 -1
  103. package/dist/services/audit-checks/sprint-consistency-check.d.ts +0 -4
  104. package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +0 -1
  105. package/dist/services/audit-checks/sprint-consistency-check.js +0 -80
  106. package/dist/services/audit-checks/sprint-consistency-check.js.map +0 -1
  107. package/dist/services/audit-checks/type-mismatch-check.d.ts +0 -4
  108. package/dist/services/audit-checks/type-mismatch-check.d.ts.map +0 -1
  109. package/dist/services/audit-checks/type-mismatch-check.js +0 -55
  110. package/dist/services/audit-checks/type-mismatch-check.js.map +0 -1
  111. package/dist/services/doc-entity-mapping.d.ts +0 -19
  112. package/dist/services/doc-entity-mapping.d.ts.map +0 -1
  113. package/dist/services/doc-entity-mapping.js +0 -35
  114. package/dist/services/doc-entity-mapping.js.map +0 -1
@@ -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. CORTEX_CLI_PROJECT environment variable
19
- * 3. Default project from registry
20
- * 4. Current working directory matches a registered project folder
21
- * 5. Error: ProjectResolutionError (ERR-PROJ-011)
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: `${entry.folder}/pmp/project.db`,
34
+ dbPath: (0, path_1.join)(entry.folder, 'pmp', 'project.db'),
38
35
  resolutionMethod: 'flag',
39
36
  };
40
37
  }
41
- // 2. Check environment variable
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: `${match.entry.folder}/pmp/project.db`,
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
- // 5. No project found — list attempted methods (FS-SS-002-0008 VR-001)
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":"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"}
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"}
@@ -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','Specification','Design','Test Plan','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";
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.
@@ -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,u0QAuN9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,EA+jBjC,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"}
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','Specification','Design','Test Plan','Implementation','Testing','Release')),
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','Specification','Design','Test Plan','Implementation','Testing','Release'));
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','Specification','Design','Test Plan','Implementation','Testing','Release')),
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','Specification','Design','Test Plan','Implementation','Testing','Release')),
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;
@@ -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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"}
@@ -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) — one-way forward progression */
10
- export type TaskStage = 'Planning' | 'Requirement' | 'Specification' | 'Design' | 'Test Plan' | 'Implementation' | 'Testing' | 'Release';
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,wEAAwE;AACxE,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,aAAa,GACb,eAAe,GACf,QAAQ,GACR,WAAW,GACX,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"}
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"}
@@ -1,7 +1,6 @@
1
- /** Global projects registry structure (~/.config/cortex-cli/registry.json) */
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 (~/.config/cortex-cli/config.json) */
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' | 'env' | 'default' | 'cwd';
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,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,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,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,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;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,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,GAAG,SAAS,GAAG,KAAK,CAAC;CACtD;AAED,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,gBAI5B,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,YAAY,EAAE,YAK1B,CAAC"}
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"}
@@ -5,7 +5,6 @@ exports.EMPTY_CONFIG = exports.EMPTY_REGISTRY = void 0;
5
5
  /** Empty registry template */
6
6
  exports.EMPTY_REGISTRY = {
7
7
  version: 1,
8
- default: null,
9
8
  projects: {},
10
9
  };
11
10
  /** Empty config template */
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":";AAAA,mCAAmC;;;AAoDnC,8BAA8B;AACjB,QAAA,cAAc,GAAqB;IAC9C,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,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"}
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;AAWtF,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,CA2DvG;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,aAAa,CA2CzG;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,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAElF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAGjF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,WAAW,CAmCtF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAKxG"}
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"}
@@ -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 = `${absoluteFolder}/pmp/project.db`;
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
- const registry = (0, registry_1.addProject)(name, absoluteFolder, opts?.registryPath);
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 = `${absoluteFolder}/pmp/project.db`;
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
- const registry = (0, registry_1.addProject)(name, absoluteFolder, opts?.registryPath);
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: `${entry.folder}/pmp/project.db`,
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 registry = (0, registry_1.loadRegistry)(opts?.registryPath);
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":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,wEAAwE;AACxE,uDAAuD;;AA4CvD,kDA4BC;AAYD,sCAyDC;AAYD,0CAyCC;AAQD,sCASC;AAKD,0CAEC;AAOD,wCAgCC;AAMD,4DAKC;AA1QD,2BAAsD;AACtD,+BAAoD;AAEpD,iDAAkD;AAClD,+CAAmD;AACnD,iDAK4B;AAC5B,iDAAoD;AACpD,4CASyB;AAUzB;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,8BAAqB,EAAE,CAAC;IACpC,CAAC;IAED,wDAAwD;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,gCAAuB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,+DAA+D;IAC/D,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,gCAAuB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,gCAAuB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,4BAA4B;IAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,gCAAuB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,MAAc,EAAE,IAA4B;IACtF,sDAAsD;IACtD,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,8BAAqB,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6DAA6D;QAC7D,IAAI,CAAC,CAAC,GAAG,YAAY,6BAAoB,CAAC;YAAE,MAAM,GAAG,CAAC;IACxD,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,cAAW,EAAC,MAAM,CAAC,CAAC;IAE3C,uDAAuD;IACvD,IAAI,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAA,cAAS,EAAC,cAAc,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,+BAAsB,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,qCAA4B,CAAC,cAAc,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC;QACH,IAAA,cAAS,EAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iCAAwB,CAChC,cAAc,EACd,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAA,eAAU,EAAC,MAAM,CAAC,CAAC;IAErC,0BAA0B;IAC1B,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAED,8BAA8B;IAC9B,IAAA,qBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAErD,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,cAAc;QACtB,MAAM;QACN,KAAK,EAAE,CAAC,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,MAAc,EAAE,IAA4B;IACxF,+CAA+C;IAC/C,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,8BAAqB,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,6BAAoB,CAAC;YAAE,MAAM,GAAG,CAAC;IACxD,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,cAAW,EAAC,MAAM,CAAC,CAAC;IAE3C,+CAA+C;IAC/C,IAAI,CAAC,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,mCAA0B,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAA,eAAU,EAAC,MAAM,CAAC,CAAC;IAErC,0BAA0B;IAC1B,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,IAAA,4BAAgB,EAAC,EAAE,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAED,8BAA8B;IAC9B,IAAA,qBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAErD,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,cAAc;QACtB,MAAM;QACN,KAAK,EAAE,CAAC,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,IAA4B;IACtE,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACnD,IAAA,wBAAyB,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,IAAA,WAAI,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC;KAChD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,IAA4B;IAC1D,OAAO,IAAA,uBAAY,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,IAA4B;IACvE,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAEvD,wCAAwC;IACxC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,IAAI,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,WAAW,GAAI,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACzF,iBAAiB,GAAI,EAAE,CAAC,OAAO,CAAC,yFAAyF,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACrJ,QAAQ,GAAI,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;YACxF,SAAS,GAAI,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;QACvF,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM;QACN,WAAW;QACX,iBAAiB;QACjB,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,IAA4B;IACnE,OAAO,IAAA,yBAAc,EAAC;QACpB,YAAY,EAAE,IAAI,EAAE,YAAY;QAChC,GAAG,EAAE,IAAI,EAAE,GAAG;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -1,36 +1,37 @@
1
1
  import type { TaskStage } from '../models/common';
2
- /** Canonical stage sequence in forward order */
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
- * Check if target stage is strictly forward of current stage in the canonical sequence.
14
- * Returns true if target position > current position (allows skipping).
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 isForward(current: TaskStage, target: TaskStage): boolean;
24
+ export declare function validateStage(stage: string): TaskStage;
17
25
  /**
18
26
  * Validate that a stage progression is valid.
19
27
  *
20
- * Rules (FS-SS-030-0001):
21
- * - SR-001: Only forward progression (never backward)
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 (to check Dropped lock)
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(currentStage: TaskStage, targetStage: TaskStage, taskStatus: string): void;
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;AAOlD,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EASvC,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAE5C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAIxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,SAAS,EACtB,UAAU,EAAE,MAAM,GACjB,IAAI,CAeN"}
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"}