@lwelliott/cortex-cli 1.0.7 → 1.0.9

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 (74) hide show
  1. package/README.md +9 -5
  2. package/dist/cli/project-resolver.js +1 -1
  3. package/dist/cli/project-resolver.js.map +1 -1
  4. package/dist/cli/review.d.ts.map +1 -1
  5. package/dist/cli/review.js +22 -0
  6. package/dist/cli/review.js.map +1 -1
  7. package/dist/cli/test-report.d.ts.map +1 -1
  8. package/dist/cli/test-report.js +22 -0
  9. package/dist/cli/test-report.js.map +1 -1
  10. package/dist/config/config.d.ts +8 -2
  11. package/dist/config/config.d.ts.map +1 -1
  12. package/dist/config/config.js +25 -9
  13. package/dist/config/config.js.map +1 -1
  14. package/dist/config/paths.d.ts +13 -0
  15. package/dist/config/paths.d.ts.map +1 -0
  16. package/dist/config/paths.js +76 -0
  17. package/dist/config/paths.js.map +1 -0
  18. package/dist/config/registry.d.ts +10 -3
  19. package/dist/config/registry.d.ts.map +1 -1
  20. package/dist/config/registry.js +49 -13
  21. package/dist/config/registry.js.map +1 -1
  22. package/dist/config/resolver.d.ts +6 -9
  23. package/dist/config/resolver.d.ts.map +1 -1
  24. package/dist/config/resolver.js +13 -30
  25. package/dist/config/resolver.js.map +1 -1
  26. package/dist/models/project.d.ts +3 -3
  27. package/dist/models/project.d.ts.map +1 -1
  28. package/dist/services/project.js +4 -4
  29. package/dist/services/project.js.map +1 -1
  30. package/dist/services/review-service.d.ts +20 -0
  31. package/dist/services/review-service.d.ts.map +1 -1
  32. package/dist/services/review-service.js +58 -0
  33. package/dist/services/review-service.js.map +1 -1
  34. package/dist/utils/errors.d.ts +5 -4
  35. package/dist/utils/errors.d.ts.map +1 -1
  36. package/dist/utils/errors.js +13 -13
  37. package/dist/utils/errors.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/cli/entity.d.ts +0 -3
  40. package/dist/cli/entity.d.ts.map +0 -1
  41. package/dist/cli/entity.js +0 -135
  42. package/dist/cli/entity.js.map +0 -1
  43. package/dist/cli/schema.d.ts +0 -3
  44. package/dist/cli/schema.d.ts.map +0 -1
  45. package/dist/cli/schema.js +0 -94
  46. package/dist/cli/schema.js.map +0 -1
  47. package/dist/db/builtin-schema-constants.d.ts +0 -109
  48. package/dist/db/builtin-schema-constants.d.ts.map +0 -1
  49. package/dist/db/builtin-schema-constants.js +0 -32
  50. package/dist/db/builtin-schema-constants.js.map +0 -1
  51. package/dist/models/entity-model.d.ts +0 -30
  52. package/dist/models/entity-model.d.ts.map +0 -1
  53. package/dist/models/entity-model.js +0 -99
  54. package/dist/models/entity-model.js.map +0 -1
  55. package/dist/services/audit-checks/mapping-check.d.ts +0 -4
  56. package/dist/services/audit-checks/mapping-check.d.ts.map +0 -1
  57. package/dist/services/audit-checks/mapping-check.js +0 -74
  58. package/dist/services/audit-checks/mapping-check.js.map +0 -1
  59. package/dist/services/audit-checks/orphan-entities-check.d.ts +0 -4
  60. package/dist/services/audit-checks/orphan-entities-check.d.ts.map +0 -1
  61. package/dist/services/audit-checks/orphan-entities-check.js +0 -39
  62. package/dist/services/audit-checks/orphan-entities-check.js.map +0 -1
  63. package/dist/services/audit-checks/sprint-consistency-check.d.ts +0 -4
  64. package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +0 -1
  65. package/dist/services/audit-checks/sprint-consistency-check.js +0 -80
  66. package/dist/services/audit-checks/sprint-consistency-check.js.map +0 -1
  67. package/dist/services/audit-checks/type-mismatch-check.d.ts +0 -4
  68. package/dist/services/audit-checks/type-mismatch-check.d.ts.map +0 -1
  69. package/dist/services/audit-checks/type-mismatch-check.js +0 -55
  70. package/dist/services/audit-checks/type-mismatch-check.js.map +0 -1
  71. package/dist/services/doc-entity-mapping.d.ts +0 -19
  72. package/dist/services/doc-entity-mapping.d.ts.map +0 -1
  73. package/dist/services/doc-entity-mapping.js +0 -35
  74. package/dist/services/doc-entity-mapping.js.map +0 -1
@@ -1,30 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { Entity, EntityType, EntityQueryOptions } from './entity';
3
- /**
4
- * Create a new entity.
5
- */
6
- export declare function createEntity(db: Database.Database, id: string, typeName: string, properties?: Record<string, unknown>): Entity;
7
- /**
8
- * Get an entity by ID.
9
- */
10
- export declare function getEntity(db: Database.Database, id: string): Entity;
11
- /**
12
- * Query entities with optional filters.
13
- */
14
- export declare function queryEntities(db: Database.Database, options: EntityQueryOptions): Entity[];
15
- /**
16
- * Update entity properties (merge with existing).
17
- */
18
- export declare function updateEntity(db: Database.Database, id: string, properties: Record<string, unknown>): Entity;
19
- /**
20
- * Delete an entity with cascade (AD-0016).
21
- * Deletes all relations where entity is source or target, then the entity.
22
- */
23
- export declare function deleteEntity(db: Database.Database, id: string): void;
24
- /**
25
- * List all entity types.
26
- * builtin:3.0 (Sprint 31): Derives entity types from documents.type.
27
- * No entity_types table read.
28
- */
29
- export declare function listEntityTypes(db: Database.Database): EntityType[];
30
- //# sourceMappingURL=entity-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-model.d.ts","sourceRoot":"","sources":["../../src/models/entity-model.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAOvE;;GAEG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CA0BR;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAInE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAY1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAYpE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,UAAU,EAAE,CAKnE"}
@@ -1,99 +0,0 @@
1
- "use strict";
2
- // Entity model: CRUD operations for graph entities
3
- // MOD-009: Entity CRUD with cascade delete (AD-0016)
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.createEntity = createEntity;
6
- exports.getEntity = getEntity;
7
- exports.queryEntities = queryEntities;
8
- exports.updateEntity = updateEntity;
9
- exports.deleteEntity = deleteEntity;
10
- exports.listEntityTypes = listEntityTypes;
11
- const retry_1 = require("../db/retry");
12
- const errors_1 = require("../utils/errors");
13
- /**
14
- * Create a new entity.
15
- */
16
- function createEntity(db, id, typeName, properties) {
17
- return (0, retry_1.withTransaction)(db, () => {
18
- // builtin:3.0 (Sprint 31): entity_types table dropped.
19
- // Entity type validation uses canonical document types.
20
- // Skip entity_types check; type_name is validated by doc type gates.
21
- // Check duplicate
22
- const existing = db.prepare('SELECT id FROM entities WHERE id = ?').get(id);
23
- if (existing)
24
- throw new errors_1.GraphEntityDuplicateError(id);
25
- const now = new Date().toISOString();
26
- const propsJson = JSON.stringify(properties ?? {});
27
- db.prepare(`
28
- INSERT INTO entities (id, type_name, properties, created_at, updated_at)
29
- VALUES (?, ?, ?, ?, ?)
30
- `).run(id, typeName, propsJson, now, now);
31
- return {
32
- id,
33
- type_name: typeName,
34
- properties: propsJson,
35
- created_at: now,
36
- updated_at: now,
37
- };
38
- });
39
- }
40
- /**
41
- * Get an entity by ID.
42
- */
43
- function getEntity(db, id) {
44
- const row = db.prepare('SELECT * FROM entities WHERE id = ?').get(id);
45
- if (!row)
46
- throw new errors_1.GraphEntityNotFoundError(id);
47
- return row;
48
- }
49
- /**
50
- * Query entities with optional filters.
51
- */
52
- function queryEntities(db, options) {
53
- const { typeName, limit = 100, offset = 0 } = options;
54
- if (typeName) {
55
- return db.prepare('SELECT * FROM entities WHERE type_name = ? ORDER BY created_at DESC LIMIT ? OFFSET ?').all(typeName, limit, offset);
56
- }
57
- return db.prepare('SELECT * FROM entities ORDER BY created_at DESC LIMIT ? OFFSET ?').all(limit, offset);
58
- }
59
- /**
60
- * Update entity properties (merge with existing).
61
- */
62
- function updateEntity(db, id, properties) {
63
- return (0, retry_1.withTransaction)(db, () => {
64
- const existing = getEntity(db, id);
65
- const existingProps = JSON.parse(existing.properties || '{}');
66
- const merged = { ...existingProps, ...properties };
67
- const now = new Date().toISOString();
68
- db.prepare(`
69
- UPDATE entities SET properties = ?, updated_at = ? WHERE id = ?
70
- `).run(JSON.stringify(merged), now, id);
71
- return { ...existing, properties: JSON.stringify(merged), updated_at: now };
72
- });
73
- }
74
- /**
75
- * Delete an entity with cascade (AD-0016).
76
- * Deletes all relations where entity is source or target, then the entity.
77
- */
78
- function deleteEntity(db, id) {
79
- (0, retry_1.withTransaction)(db, () => {
80
- // Verify entity exists
81
- const entity = db.prepare('SELECT id FROM entities WHERE id = ?').get(id);
82
- if (!entity)
83
- throw new errors_1.GraphEntityNotFoundError(id);
84
- // Cascade: delete all relations involving this entity
85
- db.prepare('DELETE FROM relations WHERE from_id = ? OR to_id = ?').run(id, id);
86
- // Delete the entity
87
- db.prepare('DELETE FROM entities WHERE id = ?').run(id);
88
- });
89
- }
90
- /**
91
- * List all entity types.
92
- * builtin:3.0 (Sprint 31): Derives entity types from documents.type.
93
- * No entity_types table read.
94
- */
95
- function listEntityTypes(db) {
96
- const types = db.prepare('SELECT DISTINCT type FROM documents ORDER BY type').all();
97
- return types.map(t => ({ name: t.type }));
98
- }
99
- //# sourceMappingURL=entity-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-model.js","sourceRoot":"","sources":["../../src/models/entity-model.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { CheckResult } from './types';
3
- export declare function mappingCheck(db: Database.Database, sprintId?: string): CheckResult;
4
- //# sourceMappingURL=mapping-check.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapping-check.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/mapping-check.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAKvD,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAwElF"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- // mapping audit check: doc→entity-type mapping validation
3
- // FS-SS-023-0001: Verify every document has a valid entity-type mapping
4
- // FS-SS-023-0012 v2: Sprint scoping via task/doc ID matching (URD-G001 removed documents.sprint_id)
5
- // MOD-023: CLI Audit Command
6
- // builtin:3.0 (Sprint 31): entity_types table dropped; doc types ARE entity type names
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.mappingCheck = mappingCheck;
9
- /** Canonical document types in builtin:3.0 (SAD-0033 §2) */
10
- const CANONICAL_DOC_TYPES = new Set(['AD', 'FR', 'FS', 'MDL', 'NFR', 'NFS', 'QA', 'SAD', 'SRC', 'TC', 'TR', 'TS', 'US']);
11
- function mappingCheck(db, sprintId) {
12
- let docs;
13
- if (sprintId) {
14
- // Sprint scoping via task ID matching (URD-G001 removed documents.sprint_id)
15
- // Documents whose ID matches a task ID in the given sprint
16
- const sprintDocIds = db.prepare(`
17
- SELECT DISTINCT d.id FROM documents d
18
- WHERE d.id IN (SELECT t.id FROM tasks t WHERE t.sprint_id = ?)
19
- `).all(sprintId);
20
- const sprintDocIdSet = new Set(sprintDocIds.map(r => r.id));
21
- const allDocs = db.prepare('SELECT id, type, title FROM documents').all();
22
- docs = allDocs.filter(d => sprintDocIdSet.has(d.id));
23
- }
24
- else {
25
- docs = db.prepare('SELECT id, type, title FROM documents').all();
26
- }
27
- const issues = [];
28
- for (const doc of docs) {
29
- // builtin:3.0: doc type IS entity type name (no mapping needed).
30
- const expectedEntityType = doc.type;
31
- if (!expectedEntityType) {
32
- issues.push({
33
- issueId: 'MISSING_MAPPING',
34
- docId: doc.id,
35
- docType: doc.type,
36
- detail: `Document "${doc.id}" (type: ${doc.type}) has no known entity-type mapping`,
37
- fixable: false,
38
- });
39
- continue;
40
- }
41
- // builtin:3.0: entity_types table dropped.
42
- // Validate against canonical doc types instead.
43
- if (!CANONICAL_DOC_TYPES.has(doc.type)) {
44
- issues.push({
45
- issueId: 'INVALID_ENTITY_TYPE',
46
- docId: doc.id,
47
- docType: doc.type,
48
- detail: `Document "${doc.id}" (type: ${doc.type}) is not a canonical document type`,
49
- fixable: false,
50
- });
51
- continue;
52
- }
53
- // Check if corresponding entity exists and has correct type_name
54
- const entity = db.prepare('SELECT type_name FROM entities WHERE id = ?').get(doc.id);
55
- if (entity !== undefined && entity.type_name !== expectedEntityType) {
56
- issues.push({
57
- issueId: 'TYPE_MISMATCH',
58
- docId: doc.id,
59
- docType: doc.type,
60
- entityId: doc.id,
61
- entityTypeFound: entity.type_name,
62
- entityTypeExpected: expectedEntityType,
63
- detail: `Document "${doc.id}" (type: ${doc.type}) has entity "${doc.id}" with type_name "${entity.type_name}" but expected "${expectedEntityType}"`,
64
- fixable: false,
65
- });
66
- }
67
- }
68
- const status = issues.length === 0 ? 'PASS' : 'FAIL';
69
- const summary = status === 'PASS'
70
- ? `All ${docs.length} documents have valid entity-type mappings`
71
- : `${issues.length} documents have mapping issues (${issues.filter(i => i.issueId === 'MISSING_MAPPING').length} missing, ${issues.filter(i => i.issueId === 'INVALID_ENTITY_TYPE').length} invalid, ${issues.filter(i => i.issueId === 'TYPE_MISMATCH').length} type mismatch)`;
72
- return { checkName: 'mapping', status, summary, issues };
73
- }
74
- //# sourceMappingURL=mapping-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapping-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/mapping-check.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { CheckResult } from './types';
3
- export declare function orphanEntitiesCheck(db: Database.Database, sprintId?: string): CheckResult;
4
- //# sourceMappingURL=orphan-entities-check.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orphan-entities-check.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/orphan-entities-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAEvD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAsCzF"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- // orphan-entities audit check: entities with no graph relations
3
- // FS-SS-023-0002: Detect entities with zero relations, classify fixability
4
- // MOD-023: CLI Audit Command
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.orphanEntitiesCheck = orphanEntitiesCheck;
7
- function orphanEntitiesCheck(db, sprintId) {
8
- // Find entities with no relations
9
- const orphans = db.prepare(`
10
- SELECT e.id, e.type_name,
11
- (SELECT COUNT(*) FROM documents d WHERE d.id = e.id) as doc_count
12
- FROM entities e
13
- WHERE (SELECT COUNT(*) FROM relations r WHERE r.from_id = e.id OR r.to_id = e.id) = 0
14
- `).all();
15
- let issues = [];
16
- for (const entity of orphans) {
17
- const hasDoc = entity.doc_count > 0;
18
- issues.push({
19
- issueId: hasDoc ? 'ORPHAN_ENTITY_WITH_DOC' : 'ORPHAN_ENTITY_NO_DOC',
20
- entityId: entity.id,
21
- detail: hasDoc
22
- ? `Entity "${entity.id}" (type: ${entity.type_name}) has no relations but has an associated document`
23
- : `Entity "${entity.id}" (type: ${entity.type_name}) has no relations and no associated document`,
24
- fixable: !hasDoc,
25
- });
26
- }
27
- // Sprint scoping via task ID matching (URD-G001 removed documents.sprint_id)
28
- if (sprintId) {
29
- const sprintDocIds = new Set(db.prepare('SELECT DISTINCT d.id FROM documents d WHERE d.id IN (SELECT t.id FROM tasks t WHERE t.sprint_id = ?)').all(sprintId).map(r => r.id));
30
- issues = issues.filter(i => i.entityId && sprintDocIds.has(i.entityId));
31
- }
32
- const status = issues.length === 0 ? 'PASS' : 'FAIL';
33
- const fixableCount = issues.filter(i => i.fixable).length;
34
- const summary = status === 'PASS'
35
- ? 'No orphan entities found'
36
- : `${issues.length} orphan entities found (${fixableCount} fixable)`;
37
- return { checkName: 'orphan-entities', status, summary, issues };
38
- }
39
- //# sourceMappingURL=orphan-entities-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orphan-entities-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/orphan-entities-check.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,2EAA2E;AAC3E,6BAA6B;;AAK7B,kDAsCC;AAtCD,SAAgB,mBAAmB,CAAC,EAAqB,EAAE,QAAiB;IAC1E,kCAAkC;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAK1B,CAAC,CAAC,GAAG,EAAiE,CAAC;IAExE,IAAI,MAAM,GAAiB,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,sBAAsB;YACnE,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC,WAAW,MAAM,CAAC,EAAE,YAAY,MAAM,CAAC,SAAS,mDAAmD;gBACrG,CAAC,CAAC,WAAW,MAAM,CAAC,EAAE,YAAY,MAAM,CAAC,SAAS,+CAA+C;YACnG,OAAO,EAAE,CAAC,MAAM;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,IAAI,GAAG,CACzB,EAAE,CAAC,OAAO,CAAC,sGAAsG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3K,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM;QAC/B,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,2BAA2B,YAAY,WAAW,CAAC;IAEvE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC"}
@@ -1,4 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { CheckResult } from './types';
3
- export declare function sprintConsistencyCheck(db: Database.Database, sprintId?: string): CheckResult;
4
- //# sourceMappingURL=sprint-consistency-check.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sprint-consistency-check.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/sprint-consistency-check.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAkBvD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CA2D5F"}
@@ -1,80 +0,0 @@
1
- "use strict";
2
- // sprint-consistency audit check: sprint-scoped doc types with missing sprint
3
- // FS-SS-023-0004: Verify REVIEW, TEST-REPORT, TASK documents have sprint_id
4
- // MOD-023: CLI Audit Command
5
- //
6
- // Note: TASK here refers to documents.type = 'TASK', not kanban tasks
7
- //
8
- // Backward compatibility: Documents created before MOD-022e enforcement date
9
- // receive a warning (severity: warning) rather than a MISSING_SPRINT error,
10
- // to avoid false positives for pre-enforcement legacy documents.
11
- // FS-SS-023-0004 backward-compatibility scope (per SAD-023 §3.5).
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.sprintConsistencyCheck = sprintConsistencyCheck;
14
- /** Document types that must be sprint-scoped */
15
- const SPRINT_SCOPED_TYPES = ['REVIEW', 'TEST-REPORT', 'TASK'];
16
- /**
17
- * MOD-022e deployment cutoff date.
18
- * Documents created before this date are exempt from MISSING_SPRINT errors
19
- * because sprint-scoping enforcement was not yet active.
20
- *
21
- * This date is derived from the MOD-022e migration deployment (sprint-2026051101).
22
- * It can be adjusted if the actual deployment timestamp differs.
23
- *
24
- * To disable backward-compatibility discrimination entirely, set to a date
25
- * far in the past (e.g., '1970-01-01T00:00:00Z').
26
- */
27
- const MOD_022E_CUTOFF_DATE = '2026-05-09T00:00:00Z';
28
- function sprintConsistencyCheck(db, sprintId) {
29
- let docs;
30
- if (sprintId) {
31
- docs = db.prepare(`SELECT id, type, sprint_id, created_at FROM documents WHERE sprint_id = ? AND type IN (${SPRINT_SCOPED_TYPES.map(() => '?').join(',')})`).all(sprintId, ...SPRINT_SCOPED_TYPES);
32
- }
33
- else {
34
- docs = db.prepare(`SELECT id, type, sprint_id, created_at FROM documents WHERE type IN (${SPRINT_SCOPED_TYPES.map(() => '?').join(',')})`).all(...SPRINT_SCOPED_TYPES);
35
- }
36
- const issues = [];
37
- for (const doc of docs) {
38
- if (doc.sprint_id === null) {
39
- const isPreEnforcement = doc.created_at < MOD_022E_CUTOFF_DATE;
40
- if (isPreEnforcement) {
41
- // Pre-enforcement document: flag as informational warning, not error
42
- issues.push({
43
- issueId: 'MISSING_SPRINT',
44
- severity: 'warning',
45
- docId: doc.id,
46
- docType: doc.type,
47
- detail: `Document "${doc.id}" (type: ${doc.type}, created: ${doc.created_at}) is sprint-scoped but has no sprint_id — created before MOD-022e enforcement (${MOD_022E_CUTOFF_DATE}); informational only`,
48
- fixable: false,
49
- });
50
- }
51
- else {
52
- // Post-enforcement document: real error
53
- issues.push({
54
- issueId: 'MISSING_SPRINT',
55
- severity: 'error',
56
- docId: doc.id,
57
- docType: doc.type,
58
- detail: `Document "${doc.id}" (type: ${doc.type}) is sprint-scoped but has no sprint_id`,
59
- fixable: false,
60
- });
61
- }
62
- }
63
- }
64
- // Determine status: warnings alone don't cause FAIL — only actual errors do
65
- const errorIssues = issues.filter(i => i.severity !== 'warning' && i.severity !== 'info');
66
- const warningCount = issues.filter(i => i.severity === 'warning').length;
67
- const status = errorIssues.length === 0 ? (issues.length === 0 ? 'PASS' : 'PASS') : 'FAIL';
68
- const summaryParts = [];
69
- if (errorIssues.length > 0) {
70
- summaryParts.push(`${errorIssues.length} sprint-scoped documents missing sprint_id`);
71
- }
72
- if (warningCount > 0) {
73
- summaryParts.push(`${warningCount} pre-enforcement documents with missing sprint_id (informational)`);
74
- }
75
- const summary = summaryParts.length > 0
76
- ? summaryParts.join('; ')
77
- : 'All sprint-scoped documents have valid sprint_id';
78
- return { checkName: 'sprint-consistency', status, summary, issues };
79
- }
80
- //# sourceMappingURL=sprint-consistency-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sprint-consistency-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/sprint-consistency-check.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { CheckResult } from './types';
3
- export declare function typeMismatchCheck(db: Database.Database, sprintId?: string): CheckResult;
4
- //# sourceMappingURL=type-mismatch-check.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-mismatch-check.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/type-mismatch-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAEvD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAoDvF"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- // type-mismatch audit check: entity type_name vs document type mapping
3
- // FS-SS-023-0005: Verify entity type_name matches expected from document type
4
- // MOD-023: CLI Audit Command
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.typeMismatchCheck = typeMismatchCheck;
7
- function typeMismatchCheck(db, sprintId) {
8
- let rows;
9
- if (sprintId) {
10
- // Sprint scoping via task ID matching (URD-G001 removed documents.sprint_id)
11
- const sprintDocIds = db.prepare(`
12
- SELECT DISTINCT d.id FROM documents d
13
- WHERE d.id IN (SELECT t.id FROM tasks t WHERE t.sprint_id = ?)
14
- `).all(sprintId);
15
- const sprintDocIdSet = new Set(sprintDocIds.map(r => r.id));
16
- const allRows = db.prepare(`
17
- SELECT e.id, e.type_name, d.type as doc_type
18
- FROM entities e
19
- JOIN documents d ON d.id = e.id
20
- `).all();
21
- rows = allRows.filter(r => sprintDocIdSet.has(r.id));
22
- }
23
- else {
24
- rows = db.prepare(`
25
- SELECT e.id, e.type_name, d.type as doc_type
26
- FROM entities e
27
- JOIN documents d ON d.id = e.id
28
- `).all();
29
- }
30
- const issues = [];
31
- for (const row of rows) {
32
- const expectedType = row.doc_type;
33
- // Graceful degradation: skip if no doc type
34
- if (!expectedType)
35
- continue;
36
- if (row.type_name !== expectedType) {
37
- issues.push({
38
- issueId: 'ENTITY_TYPE_MISMATCH',
39
- entityId: row.id,
40
- docId: row.id,
41
- docType: row.doc_type,
42
- entityTypeFound: row.type_name,
43
- entityTypeExpected: expectedType,
44
- detail: `Entity "${row.id}" has type_name "${row.type_name}" but document type "${row.doc_type}" maps to "${expectedType}"`,
45
- fixable: true,
46
- });
47
- }
48
- }
49
- const status = issues.length === 0 ? 'PASS' : 'FAIL';
50
- const summary = status === 'PASS'
51
- ? 'All entities have correct type_name matching document type'
52
- : `${issues.length} entities have mismatched type_name`;
53
- return { checkName: 'type-mismatch', status, summary, issues };
54
- }
55
- //# sourceMappingURL=type-mismatch-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-mismatch-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/type-mismatch-check.ts"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,8EAA8E;AAC9E,6BAA6B;;AAK7B,8CAoDC;AApDD,SAAgB,iBAAiB,CAAC,EAAqB,EAAE,QAAiB;IACxE,IAAI,IAAgE,CAAC;IAErE,IAAI,QAAQ,EAAE,CAAC;QACb,6EAA6E;QAC7E,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG/B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAA0B,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;;KAI1B,CAAC,CAAC,GAAG,EAAgE,CAAC;QACvE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;KAIjB,CAAC,CAAC,GAAG,EAAgE,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;QAElC,4CAA4C;QAC5C,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,IAAI,GAAG,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,sBAAsB;gBAC/B,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,QAAQ;gBACrB,eAAe,EAAE,GAAG,CAAC,SAAS;gBAC9B,kBAAkB,EAAE,YAAY;gBAChC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,oBAAoB,GAAG,CAAC,SAAS,wBAAwB,GAAG,CAAC,QAAQ,cAAc,YAAY,GAAG;gBAC3H,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM;QAC/B,CAAC,CAAC,4DAA4D;QAC9D,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,qCAAqC,CAAC;IAE1D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACjE,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * @deprecated Removed in builtin:3.0 (Sprint 31).
3
- * Entity types are now derived directly from documents.type.
4
- * Doc types serve as entity type names 1:1.
5
- * Returns an empty immutable record.
6
- */
7
- export declare const DOC_TYPE_TO_ENTITY_TYPE: Readonly<Record<string, string>>;
8
- /**
9
- * @deprecated Removed in builtin:3.0 (Sprint 31).
10
- * The doc type IS the entity type name post-migration.
11
- * This returns the input unchanged for backward compatibility.
12
- *
13
- * @param docType - The document type string
14
- * @returns The same string, or undefined if docType is empty
15
- */
16
- export declare function resolveEntityType(docType: string): string | undefined;
17
- /** @deprecated Type alias removed in builtin:3.0 */
18
- export type DocType = string;
19
- //# sourceMappingURL=doc-entity-mapping.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-entity-mapping.d.ts","sourceRoot":"","sources":["../../src/services/doc-entity-mapping.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,kCAA8C,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMrE;AAED,oDAAoD;AACpD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- // Doc-Entity Type Mapping — REMOVED in builtin:3.0 (Sprint 31 Phase 1)
3
- // SAD-0033 §4 Phase 1: DROP entity_types table; remove DOC_TYPE_TO_ENTITY_TYPE constant
4
- // SAD-0006 §2: Entity classification derived from documents.type (no static mapping)
5
- //
6
- // Post-Sprint-31: Entity types are derived directly from document types.
7
- // `documents.type` is the sole source of truth. No mapping table exists.
8
- // This file exists as a no-op placeholder for backward compat during transition.
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.DOC_TYPE_TO_ENTITY_TYPE = void 0;
11
- exports.resolveEntityType = resolveEntityType;
12
- /**
13
- * @deprecated Removed in builtin:3.0 (Sprint 31).
14
- * Entity types are now derived directly from documents.type.
15
- * Doc types serve as entity type names 1:1.
16
- * Returns an empty immutable record.
17
- */
18
- exports.DOC_TYPE_TO_ENTITY_TYPE = Object.freeze({});
19
- /**
20
- * @deprecated Removed in builtin:3.0 (Sprint 31).
21
- * The doc type IS the entity type name post-migration.
22
- * This returns the input unchanged for backward compatibility.
23
- *
24
- * @param docType - The document type string
25
- * @returns The same string, or undefined if docType is empty
26
- */
27
- function resolveEntityType(docType) {
28
- if (!docType)
29
- return undefined;
30
- // Post-Sprint-31: Document types ARE entity type names.
31
- // All 13 canonical types (AD, FR, FS, MDL, NFR, NFS, QA, SAD, SRC, TC, TR, TS, US)
32
- // map 1:1 to entity type names.
33
- return docType;
34
- }
35
- //# sourceMappingURL=doc-entity-mapping.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-entity-mapping.js","sourceRoot":"","sources":["../../src/services/doc-entity-mapping.ts"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,wFAAwF;AACxF,qFAAqF;AACrF,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,iFAAiF;;;AAkBjF,8CAMC;AAtBD;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,EAA4B,CAAC,CAAC;AAEnF;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,wDAAwD;IACxD,mFAAmF;IACnF,gCAAgC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC"}