@lwelliott/cortex-cli 1.0.3
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/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli/audit.d.ts +3 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +78 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/doc.d.ts +3 -0
- package/dist/cli/doc.d.ts.map +1 -0
- package/dist/cli/doc.js +291 -0
- package/dist/cli/doc.js.map +1 -0
- package/dist/cli/entity.d.ts +3 -0
- package/dist/cli/entity.d.ts.map +1 -0
- package/dist/cli/entity.js +135 -0
- package/dist/cli/entity.js.map +1 -0
- package/dist/cli/format-selector.d.ts +30 -0
- package/dist/cli/format-selector.d.ts.map +1 -0
- package/dist/cli/format-selector.js +101 -0
- package/dist/cli/format-selector.js.map +1 -0
- package/dist/cli/formatters/audit-formatter.d.ts +33 -0
- package/dist/cli/formatters/audit-formatter.d.ts.map +1 -0
- package/dist/cli/formatters/audit-formatter.js +204 -0
- package/dist/cli/formatters/audit-formatter.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +10 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +31 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/markdown.d.ts +12 -0
- package/dist/cli/formatters/markdown.d.ts.map +1 -0
- package/dist/cli/formatters/markdown.js +341 -0
- package/dist/cli/formatters/markdown.js.map +1 -0
- package/dist/cli/formatters/quiet.d.ts +15 -0
- package/dist/cli/formatters/quiet.d.ts.map +1 -0
- package/dist/cli/formatters/quiet.js +75 -0
- package/dist/cli/formatters/quiet.js.map +1 -0
- package/dist/cli/formatters/table.d.ts +11 -0
- package/dist/cli/formatters/table.d.ts.map +1 -0
- package/dist/cli/formatters/table.js +726 -0
- package/dist/cli/formatters/table.js.map +1 -0
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.d.ts.map +1 -0
- package/dist/cli/graph.js +209 -0
- package/dist/cli/graph.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +144 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lesson.d.ts +3 -0
- package/dist/cli/lesson.d.ts.map +1 -0
- package/dist/cli/lesson.js +85 -0
- package/dist/cli/lesson.js.map +1 -0
- package/dist/cli/project-resolver.d.ts +17 -0
- package/dist/cli/project-resolver.d.ts.map +1 -0
- package/dist/cli/project-resolver.js +25 -0
- package/dist/cli/project-resolver.js.map +1 -0
- package/dist/cli/project.d.ts +12 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +169 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/relation.d.ts +3 -0
- package/dist/cli/relation.d.ts.map +1 -0
- package/dist/cli/relation.js +128 -0
- package/dist/cli/relation.js.map +1 -0
- package/dist/cli/review.d.ts +3 -0
- package/dist/cli/review.d.ts.map +1 -0
- package/dist/cli/review.js +131 -0
- package/dist/cli/review.js.map +1 -0
- package/dist/cli/router.d.ts +38 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +49 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/schema.d.ts +3 -0
- package/dist/cli/schema.d.ts.map +1 -0
- package/dist/cli/schema.js +94 -0
- package/dist/cli/schema.js.map +1 -0
- package/dist/cli/sprint.d.ts +12 -0
- package/dist/cli/sprint.d.ts.map +1 -0
- package/dist/cli/sprint.js +200 -0
- package/dist/cli/sprint.js.map +1 -0
- package/dist/cli/task.d.ts +12 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +252 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/test-report.d.ts +3 -0
- package/dist/cli/test-report.d.ts.map +1 -0
- package/dist/cli/test-report.js +134 -0
- package/dist/cli/test-report.js.map +1 -0
- package/dist/cli/validate.d.ts +8 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +86 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/config/config.d.ts +18 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +70 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/registry.d.ts +52 -0
- package/dist/config/registry.d.ts.map +1 -0
- package/dist/config/registry.js +193 -0
- package/dist/config/registry.js.map +1 -0
- package/dist/config/resolver.d.ts +26 -0
- package/dist/config/resolver.d.ts.map +1 -0
- package/dist/config/resolver.js +87 -0
- package/dist/config/resolver.js.map +1 -0
- package/dist/db/builtin-schema-constants.d.ts +109 -0
- package/dist/db/builtin-schema-constants.d.ts.map +1 -0
- package/dist/db/builtin-schema-constants.js +32 -0
- package/dist/db/builtin-schema-constants.js.map +1 -0
- package/dist/db/connection.d.ts +34 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +140 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/generated/schema-types.d.ts +134 -0
- package/dist/db/generated/schema-types.d.ts.map +1 -0
- package/dist/db/generated/schema-types.js +31 -0
- package/dist/db/generated/schema-types.js.map +1 -0
- package/dist/db/locks.d.ts +106 -0
- package/dist/db/locks.d.ts.map +1 -0
- package/dist/db/locks.js +211 -0
- package/dist/db/locks.js.map +1 -0
- package/dist/db/migration.d.ts +65 -0
- package/dist/db/migration.d.ts.map +1 -0
- package/dist/db/migration.js +233 -0
- package/dist/db/migration.js.map +1 -0
- package/dist/db/retry.d.ts +26 -0
- package/dist/db/retry.d.ts.map +1 -0
- package/dist/db/retry.js +71 -0
- package/dist/db/retry.js.map +1 -0
- package/dist/db/schema.d.ts +21 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +830 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/models/common.d.ts +27 -0
- package/dist/models/common.d.ts.map +1 -0
- package/dist/models/common.js +4 -0
- package/dist/models/common.js.map +1 -0
- package/dist/models/document.d.ts +89 -0
- package/dist/models/document.d.ts.map +1 -0
- package/dist/models/document.js +5 -0
- package/dist/models/document.js.map +1 -0
- package/dist/models/entity-model.d.ts +30 -0
- package/dist/models/entity-model.d.ts.map +1 -0
- package/dist/models/entity-model.js +99 -0
- package/dist/models/entity-model.js.map +1 -0
- package/dist/models/entity.d.ts +88 -0
- package/dist/models/entity.d.ts.map +1 -0
- package/dist/models/entity.js +5 -0
- package/dist/models/entity.js.map +1 -0
- package/dist/models/graph-schema.d.ts +43 -0
- package/dist/models/graph-schema.d.ts.map +1 -0
- package/dist/models/graph-schema.js +76 -0
- package/dist/models/graph-schema.js.map +1 -0
- package/dist/models/project.d.ts +49 -0
- package/dist/models/project.d.ts.map +1 -0
- package/dist/models/project.js +18 -0
- package/dist/models/project.js.map +1 -0
- package/dist/models/relation.d.ts +35 -0
- package/dist/models/relation.d.ts.map +1 -0
- package/dist/models/relation.js +212 -0
- package/dist/models/relation.js.map +1 -0
- package/dist/models/review.d.ts +86 -0
- package/dist/models/review.d.ts.map +1 -0
- package/dist/models/review.js +5 -0
- package/dist/models/review.js.map +1 -0
- package/dist/models/sprint.d.ts +38 -0
- package/dist/models/sprint.d.ts.map +1 -0
- package/dist/models/sprint.js +4 -0
- package/dist/models/sprint.js.map +1 -0
- package/dist/models/task.d.ts +75 -0
- package/dist/models/task.d.ts.map +1 -0
- package/dist/models/task.js +4 -0
- package/dist/models/task.js.map +1 -0
- package/dist/models/validation.d.ts +25 -0
- package/dist/models/validation.d.ts.map +1 -0
- package/dist/models/validation.js +4 -0
- package/dist/models/validation.js.map +1 -0
- package/dist/services/audit-check-service.d.ts +16 -0
- package/dist/services/audit-check-service.d.ts.map +1 -0
- package/dist/services/audit-check-service.js +137 -0
- package/dist/services/audit-check-service.js.map +1 -0
- package/dist/services/audit-checks/dangling-relations-check.d.ts +7 -0
- package/dist/services/audit-checks/dangling-relations-check.d.ts.map +1 -0
- package/dist/services/audit-checks/dangling-relations-check.js +52 -0
- package/dist/services/audit-checks/dangling-relations-check.js.map +1 -0
- package/dist/services/audit-checks/duplicate-ids-check.d.ts +4 -0
- package/dist/services/audit-checks/duplicate-ids-check.d.ts.map +1 -0
- package/dist/services/audit-checks/duplicate-ids-check.js +49 -0
- package/dist/services/audit-checks/duplicate-ids-check.js.map +1 -0
- package/dist/services/audit-checks/fix-engine.d.ts +24 -0
- package/dist/services/audit-checks/fix-engine.d.ts.map +1 -0
- package/dist/services/audit-checks/fix-engine.js +114 -0
- package/dist/services/audit-checks/fix-engine.js.map +1 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts +9 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js +56 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts +10 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js +57 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts +9 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.js +56 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.js.map +1 -0
- package/dist/services/audit-checks/inverse-consistency-check.d.ts +7 -0
- package/dist/services/audit-checks/inverse-consistency-check.d.ts.map +1 -0
- package/dist/services/audit-checks/inverse-consistency-check.js +54 -0
- package/dist/services/audit-checks/inverse-consistency-check.js.map +1 -0
- package/dist/services/audit-checks/mapping-check.d.ts +4 -0
- package/dist/services/audit-checks/mapping-check.d.ts.map +1 -0
- package/dist/services/audit-checks/mapping-check.js +74 -0
- package/dist/services/audit-checks/mapping-check.js.map +1 -0
- package/dist/services/audit-checks/orphan-documents-check.d.ts +9 -0
- package/dist/services/audit-checks/orphan-documents-check.d.ts.map +1 -0
- package/dist/services/audit-checks/orphan-documents-check.js +54 -0
- package/dist/services/audit-checks/orphan-documents-check.js.map +1 -0
- package/dist/services/audit-checks/orphan-entities-check.d.ts +4 -0
- package/dist/services/audit-checks/orphan-entities-check.d.ts.map +1 -0
- package/dist/services/audit-checks/orphan-entities-check.js +39 -0
- package/dist/services/audit-checks/orphan-entities-check.js.map +1 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts +9 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts.map +1 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js +56 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js.map +1 -0
- package/dist/services/audit-checks/sprint-consistency-check.d.ts +4 -0
- package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +1 -0
- package/dist/services/audit-checks/sprint-consistency-check.js +80 -0
- package/dist/services/audit-checks/sprint-consistency-check.js.map +1 -0
- package/dist/services/audit-checks/src-filesystem-only-check.d.ts +10 -0
- package/dist/services/audit-checks/src-filesystem-only-check.d.ts.map +1 -0
- package/dist/services/audit-checks/src-filesystem-only-check.js +106 -0
- package/dist/services/audit-checks/src-filesystem-only-check.js.map +1 -0
- package/dist/services/audit-checks/ts-to-tc-check.d.ts +10 -0
- package/dist/services/audit-checks/ts-to-tc-check.d.ts.map +1 -0
- package/dist/services/audit-checks/ts-to-tc-check.js +58 -0
- package/dist/services/audit-checks/ts-to-tc-check.js.map +1 -0
- package/dist/services/audit-checks/type-mismatch-check.d.ts +4 -0
- package/dist/services/audit-checks/type-mismatch-check.d.ts.map +1 -0
- package/dist/services/audit-checks/type-mismatch-check.js +55 -0
- package/dist/services/audit-checks/type-mismatch-check.js.map +1 -0
- package/dist/services/audit-checks/types.d.ts +66 -0
- package/dist/services/audit-checks/types.d.ts.map +1 -0
- package/dist/services/audit-checks/types.js +30 -0
- package/dist/services/audit-checks/types.js.map +1 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts +9 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts.map +1 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.js +56 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.js.map +1 -0
- package/dist/services/doc-entity-mapping.d.ts +19 -0
- package/dist/services/doc-entity-mapping.d.ts.map +1 -0
- package/dist/services/doc-entity-mapping.js +35 -0
- package/dist/services/doc-entity-mapping.js.map +1 -0
- package/dist/services/document-service.d.ts +58 -0
- package/dist/services/document-service.d.ts.map +1 -0
- package/dist/services/document-service.js +409 -0
- package/dist/services/document-service.js.map +1 -0
- package/dist/services/graph-export-service.d.ts +12 -0
- package/dist/services/graph-export-service.d.ts.map +1 -0
- package/dist/services/graph-export-service.js +112 -0
- package/dist/services/graph-export-service.js.map +1 -0
- package/dist/services/graph-service.d.ts +21 -0
- package/dist/services/graph-service.d.ts.map +1 -0
- package/dist/services/graph-service.js +49 -0
- package/dist/services/graph-service.js.map +1 -0
- package/dist/services/graph-validation-service.d.ts +13 -0
- package/dist/services/graph-validation-service.d.ts.map +1 -0
- package/dist/services/graph-validation-service.js +171 -0
- package/dist/services/graph-validation-service.js.map +1 -0
- package/dist/services/project.d.ts +80 -0
- package/dist/services/project.d.ts.map +1 -0
- package/dist/services/project.js +256 -0
- package/dist/services/project.js.map +1 -0
- package/dist/services/review-service.d.ts +81 -0
- package/dist/services/review-service.d.ts.map +1 -0
- package/dist/services/review-service.js +242 -0
- package/dist/services/review-service.js.map +1 -0
- package/dist/services/schema-migration-service.d.ts +44 -0
- package/dist/services/schema-migration-service.d.ts.map +1 -0
- package/dist/services/schema-migration-service.js +894 -0
- package/dist/services/schema-migration-service.js.map +1 -0
- package/dist/services/sprint.d.ts +71 -0
- package/dist/services/sprint.d.ts.map +1 -0
- package/dist/services/sprint.js +238 -0
- package/dist/services/sprint.js.map +1 -0
- package/dist/services/stage-validator.d.ts +36 -0
- package/dist/services/stage-validator.d.ts.map +1 -0
- package/dist/services/stage-validator.js +78 -0
- package/dist/services/stage-validator.js.map +1 -0
- package/dist/services/task.d.ts +75 -0
- package/dist/services/task.d.ts.map +1 -0
- package/dist/services/task.js +487 -0
- package/dist/services/task.js.map +1 -0
- package/dist/services/validation.d.ts +24 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +53 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/state-machines/sprint-state.d.ts +25 -0
- package/dist/state-machines/sprint-state.d.ts.map +1 -0
- package/dist/state-machines/sprint-state.js +64 -0
- package/dist/state-machines/sprint-state.js.map +1 -0
- package/dist/state-machines/task-state.d.ts +31 -0
- package/dist/state-machines/task-state.d.ts.map +1 -0
- package/dist/state-machines/task-state.js +83 -0
- package/dist/state-machines/task-state.js.map +1 -0
- package/dist/utils/errors.d.ts +673 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +1447 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/format.d.ts +52 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +65 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/validators/board-integrity.d.ts +25 -0
- package/dist/validators/board-integrity.d.ts.map +1 -0
- package/dist/validators/board-integrity.js +102 -0
- package/dist/validators/board-integrity.js.map +1 -0
- package/dist/validators/board-shape.d.ts +13 -0
- package/dist/validators/board-shape.d.ts.map +1 -0
- package/dist/validators/board-shape.js +74 -0
- package/dist/validators/board-shape.js.map +1 -0
- package/dist/validators/owner-validator.d.ts +30 -0
- package/dist/validators/owner-validator.d.ts.map +1 -0
- package/dist/validators/owner-validator.js +70 -0
- package/dist/validators/owner-validator.js.map +1 -0
- package/dist/validators/spawn-legality.d.ts +19 -0
- package/dist/validators/spawn-legality.d.ts.map +1 -0
- package/dist/validators/spawn-legality.js +77 -0
- package/dist/validators/spawn-legality.js.map +1 -0
- package/dist/validators/state-field-checker.d.ts +8 -0
- package/dist/validators/state-field-checker.d.ts.map +1 -0
- package/dist/validators/state-field-checker.js +47 -0
- package/dist/validators/state-field-checker.js.map +1 -0
- package/dist/validators/state-field-recorder.d.ts +39 -0
- package/dist/validators/state-field-recorder.d.ts.map +1 -0
- package/dist/validators/state-field-recorder.js +62 -0
- package/dist/validators/state-field-recorder.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Relation model: CRUD operations for graph relations
|
|
3
|
+
// MOD-010: Relations with constraint enforcement (AD-0017)
|
|
4
|
+
// + MOD-008: Schema dependency
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getRelationType = getRelationType;
|
|
7
|
+
exports.createRelation = createRelation;
|
|
8
|
+
exports.removeRelation = removeRelation;
|
|
9
|
+
exports.queryRelations = queryRelations;
|
|
10
|
+
exports.listRelationTypes = listRelationTypes;
|
|
11
|
+
const retry_1 = require("../db/retry");
|
|
12
|
+
const errors_1 = require("../utils/errors");
|
|
13
|
+
/** Parse JSON field safely */
|
|
14
|
+
function parseJson(raw, fallback) {
|
|
15
|
+
if (!raw)
|
|
16
|
+
return fallback;
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(raw);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return fallback;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get a relation type definition by name.
|
|
26
|
+
*/
|
|
27
|
+
function getRelationType(db, name) {
|
|
28
|
+
const row = db.prepare(`
|
|
29
|
+
SELECT name, description, from_types, to_types, cardinality, inverse_of, created_at, updated_at
|
|
30
|
+
FROM relation_types WHERE name = ?
|
|
31
|
+
`).get(name);
|
|
32
|
+
return row;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a relation with full constraint enforcement (AD-0017).
|
|
36
|
+
* All checks run in a single transaction; inverse auto-created if defined.
|
|
37
|
+
*
|
|
38
|
+
* Validation order per AD-0017:
|
|
39
|
+
* 1. Self-relation check
|
|
40
|
+
* 2. Entity existence
|
|
41
|
+
* 3. Relation type existence
|
|
42
|
+
* 4. Type constraint
|
|
43
|
+
* 5. Cardinality constraint
|
|
44
|
+
* 6. Duplicate check
|
|
45
|
+
* 7. Insert primary
|
|
46
|
+
* 8. Insert inverse
|
|
47
|
+
*/
|
|
48
|
+
function createRelation(db, fromId, relType, toId, properties) {
|
|
49
|
+
return (0, retry_1.withTransaction)(db, () => {
|
|
50
|
+
// 1. Self-relation check
|
|
51
|
+
if (fromId === toId) {
|
|
52
|
+
throw new errors_1.GraphSelfRelationError(fromId, relType);
|
|
53
|
+
}
|
|
54
|
+
// 2. Document existence (SAD-0035: entities table dropped, use documents)
|
|
55
|
+
const fromDoc = db.prepare('SELECT id, type AS type_name FROM documents WHERE id = ?').get(fromId);
|
|
56
|
+
if (!fromDoc)
|
|
57
|
+
throw new errors_1.GraphEntityNotFoundError(fromId);
|
|
58
|
+
const toDoc = db.prepare('SELECT id, type AS type_name FROM documents WHERE id = ?').get(toId);
|
|
59
|
+
if (!toDoc)
|
|
60
|
+
throw new errors_1.GraphEntityNotFoundError(toId);
|
|
61
|
+
// 3. Relation type existence
|
|
62
|
+
const rt = getRelationType(db, relType);
|
|
63
|
+
if (!rt)
|
|
64
|
+
throw new errors_1.GraphRelationTypeNotFoundError(relType);
|
|
65
|
+
// 4. Type constraint check
|
|
66
|
+
const fromTypes = parseJson(rt.from_types, []);
|
|
67
|
+
const toTypes = parseJson(rt.to_types, []);
|
|
68
|
+
if (fromTypes.length > 0 && !fromTypes.includes(fromDoc.type_name)) {
|
|
69
|
+
throw new errors_1.GraphTypeConstraintError(relType, 'from', fromDoc.type_name, fromTypes);
|
|
70
|
+
}
|
|
71
|
+
if (toTypes.length > 0 && !toTypes.includes(toDoc.type_name)) {
|
|
72
|
+
throw new errors_1.GraphTypeConstraintError(relType, 'to', toDoc.type_name, toTypes);
|
|
73
|
+
}
|
|
74
|
+
// 5. Cardinality constraint check
|
|
75
|
+
enforceCardinality(db, rt, fromId, toId, relType);
|
|
76
|
+
// 6. Duplicate check
|
|
77
|
+
const existing = db.prepare('SELECT id FROM relations WHERE from_id = ? AND rel_type = ? AND to_id = ?').get(fromId, relType, toId);
|
|
78
|
+
if (existing)
|
|
79
|
+
throw new errors_1.GraphDuplicateRelationError(fromId, relType, toId);
|
|
80
|
+
const now = new Date().toISOString();
|
|
81
|
+
const propsJson = JSON.stringify(properties ?? {});
|
|
82
|
+
// 7. Insert primary relation
|
|
83
|
+
const result = db.prepare(`
|
|
84
|
+
INSERT INTO relations (from_id, rel_type, to_id, properties, created_at, updated_at)
|
|
85
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
86
|
+
`).run(fromId, relType, toId, propsJson, now, now);
|
|
87
|
+
const relation = {
|
|
88
|
+
id: Number(result.lastInsertRowid),
|
|
89
|
+
from_id: fromId,
|
|
90
|
+
rel_type: relType,
|
|
91
|
+
to_id: toId,
|
|
92
|
+
properties: propsJson,
|
|
93
|
+
created_at: now,
|
|
94
|
+
updated_at: now,
|
|
95
|
+
};
|
|
96
|
+
// 8. Insert inverse relation if defined
|
|
97
|
+
if (rt.inverse_of) {
|
|
98
|
+
const inverseRt = getRelationType(db, rt.inverse_of);
|
|
99
|
+
if (inverseRt) {
|
|
100
|
+
// Check cardinality for inverse too
|
|
101
|
+
enforceCardinality(db, inverseRt, toId, fromId, rt.inverse_of);
|
|
102
|
+
const existingInverse = db.prepare('SELECT id FROM relations WHERE from_id = ? AND rel_type = ? AND to_id = ?').get(toId, rt.inverse_of, fromId);
|
|
103
|
+
if (!existingInverse) {
|
|
104
|
+
db.prepare(`
|
|
105
|
+
INSERT INTO relations (from_id, rel_type, to_id, properties, created_at, updated_at)
|
|
106
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
107
|
+
`).run(toId, rt.inverse_of, fromId, propsJson, now, now);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return relation;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Enforce cardinality constraints for a relation type.
|
|
116
|
+
*/
|
|
117
|
+
function enforceCardinality(db, rt, fromId, toId, relType) {
|
|
118
|
+
const cardinality = (rt.cardinality ?? 'many_to_many');
|
|
119
|
+
switch (cardinality) {
|
|
120
|
+
case 'one_to_one': {
|
|
121
|
+
const fromCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE from_id = ? AND rel_type = ?').get(fromId, relType);
|
|
122
|
+
if (fromCount.cnt > 0) {
|
|
123
|
+
throw new errors_1.GraphCardinalityError(relType, cardinality, fromId);
|
|
124
|
+
}
|
|
125
|
+
const toCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE to_id = ? AND rel_type = ?').get(toId, relType);
|
|
126
|
+
if (toCount.cnt > 0) {
|
|
127
|
+
throw new errors_1.GraphCardinalityError(relType, cardinality, toId);
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'one_to_many': {
|
|
132
|
+
// one_to_many: each target (to_id) can have at most one incoming relation of this type
|
|
133
|
+
const toCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE to_id = ? AND rel_type = ?').get(toId, relType);
|
|
134
|
+
if (toCount.cnt > 0) {
|
|
135
|
+
throw new errors_1.GraphCardinalityError(relType, cardinality, toId);
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'many_to_one': {
|
|
140
|
+
// many_to_one: each source (from_id) can have at most one outgoing relation of this type
|
|
141
|
+
const fromCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE from_id = ? AND rel_type = ?').get(fromId, relType);
|
|
142
|
+
if (fromCount.cnt > 0) {
|
|
143
|
+
throw new errors_1.GraphCardinalityError(relType, cardinality, fromId);
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
// many_to_many: no constraint
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Remove a relation by ID.
|
|
152
|
+
* Also removes any inverse relation.
|
|
153
|
+
*/
|
|
154
|
+
function removeRelation(db, relationId) {
|
|
155
|
+
(0, retry_1.withTransaction)(db, () => {
|
|
156
|
+
const rel = db.prepare('SELECT from_id, rel_type, to_id FROM relations WHERE id = ?')
|
|
157
|
+
.get(relationId);
|
|
158
|
+
if (!rel)
|
|
159
|
+
throw new errors_1.GraphRelationNotFoundError(relationId);
|
|
160
|
+
db.prepare('DELETE FROM relations WHERE id = ?').run(relationId);
|
|
161
|
+
// Remove inverse if defined
|
|
162
|
+
const rt = getRelationType(db, rel.rel_type);
|
|
163
|
+
if (rt?.inverse_of) {
|
|
164
|
+
db.prepare('DELETE FROM relations WHERE from_id = ? AND rel_type = ? AND to_id = ?')
|
|
165
|
+
.run(rel.to_id, rt.inverse_of, rel.from_id);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Query relations for an entity.
|
|
171
|
+
*/
|
|
172
|
+
function queryRelations(db, options) {
|
|
173
|
+
const { entityId, relType, direction = 'both', limit = 100, offset = 0 } = options;
|
|
174
|
+
let sql;
|
|
175
|
+
const params = [];
|
|
176
|
+
if (relType) {
|
|
177
|
+
if (direction === 'outgoing') {
|
|
178
|
+
sql = 'SELECT * FROM relations WHERE from_id = ? AND rel_type = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
|
179
|
+
params.push(entityId, relType, limit, offset);
|
|
180
|
+
}
|
|
181
|
+
else if (direction === 'incoming') {
|
|
182
|
+
sql = 'SELECT * FROM relations WHERE to_id = ? AND rel_type = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
|
183
|
+
params.push(entityId, relType, limit, offset);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
sql = 'SELECT * FROM relations WHERE (from_id = ? OR to_id = ?) AND rel_type = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
|
187
|
+
params.push(entityId, entityId, relType, limit, offset);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
if (direction === 'outgoing') {
|
|
192
|
+
sql = 'SELECT * FROM relations WHERE from_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
|
193
|
+
params.push(entityId, limit, offset);
|
|
194
|
+
}
|
|
195
|
+
else if (direction === 'incoming') {
|
|
196
|
+
sql = 'SELECT * FROM relations WHERE to_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
|
197
|
+
params.push(entityId, limit, offset);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
sql = 'SELECT * FROM relations WHERE from_id = ? OR to_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
|
201
|
+
params.push(entityId, entityId, limit, offset);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return db.prepare(sql).all(...params);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get all relation types.
|
|
208
|
+
*/
|
|
209
|
+
function listRelationTypes(db) {
|
|
210
|
+
return db.prepare('SELECT * FROM relation_types ORDER BY name').all();
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=relation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/models/relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ReviewType, ReviewVerdict } from './common';
|
|
2
|
+
/** Review record */
|
|
3
|
+
export interface Review {
|
|
4
|
+
id: number;
|
|
5
|
+
review_num: string;
|
|
6
|
+
sprint_id: string;
|
|
7
|
+
asset_name: string;
|
|
8
|
+
review_type: ReviewType;
|
|
9
|
+
verdict: ReviewVerdict;
|
|
10
|
+
critical_count: number;
|
|
11
|
+
major_count: number;
|
|
12
|
+
minor_count: number;
|
|
13
|
+
suggestion_count: number;
|
|
14
|
+
open_questions_count: number;
|
|
15
|
+
content: string;
|
|
16
|
+
asset_ref: string | null;
|
|
17
|
+
updated_at: string;
|
|
18
|
+
created_at: string;
|
|
19
|
+
}
|
|
20
|
+
/** Review detail (full record) */
|
|
21
|
+
export interface ReviewDetail extends Review {
|
|
22
|
+
}
|
|
23
|
+
/** Review add options */
|
|
24
|
+
export interface ReviewAddOptions {
|
|
25
|
+
assetName?: string;
|
|
26
|
+
assetRef?: string;
|
|
27
|
+
critical?: number;
|
|
28
|
+
major?: number;
|
|
29
|
+
minor?: number;
|
|
30
|
+
suggestion?: number;
|
|
31
|
+
}
|
|
32
|
+
/** Test report record (SAD-0031: explicit caller-provided id, task removed) */
|
|
33
|
+
export interface TestReport {
|
|
34
|
+
id: string;
|
|
35
|
+
sprint_id: string;
|
|
36
|
+
module_id: string | null;
|
|
37
|
+
status: string;
|
|
38
|
+
content: string;
|
|
39
|
+
pass_count: number;
|
|
40
|
+
fail_count: number;
|
|
41
|
+
skip_count: number;
|
|
42
|
+
total: number;
|
|
43
|
+
passed: number;
|
|
44
|
+
failed: number;
|
|
45
|
+
skipped: number;
|
|
46
|
+
blocked: number;
|
|
47
|
+
result: string;
|
|
48
|
+
command: string | null;
|
|
49
|
+
duration_ms: number | null;
|
|
50
|
+
report_path: string | null;
|
|
51
|
+
updated_at: string;
|
|
52
|
+
created_at: string;
|
|
53
|
+
}
|
|
54
|
+
/** Test report detail */
|
|
55
|
+
export interface TestReportDetail extends TestReport {
|
|
56
|
+
}
|
|
57
|
+
/** Test report add options (SAD-0031: task removed, content via content-file) */
|
|
58
|
+
export interface TestReportAddOptions {
|
|
59
|
+
skipCount?: number;
|
|
60
|
+
command?: string;
|
|
61
|
+
duration?: number;
|
|
62
|
+
content?: string;
|
|
63
|
+
}
|
|
64
|
+
/** Lesson record (post-URD-026: metadata removed) */
|
|
65
|
+
export interface Lesson {
|
|
66
|
+
id: number;
|
|
67
|
+
text: string;
|
|
68
|
+
description: string;
|
|
69
|
+
updated_at: string;
|
|
70
|
+
created_at: string;
|
|
71
|
+
}
|
|
72
|
+
/** @deprecated Lesson add options removed per URD-026 */
|
|
73
|
+
export interface LessonAddOptions {
|
|
74
|
+
}
|
|
75
|
+
/** Lesson result (for show/update output) — content-only, no metadata */
|
|
76
|
+
export interface LessonResult {
|
|
77
|
+
project_id: string;
|
|
78
|
+
content: string;
|
|
79
|
+
created_at: string;
|
|
80
|
+
updated_at: string;
|
|
81
|
+
}
|
|
82
|
+
/** Lesson update fields — content only, no metadata */
|
|
83
|
+
export interface LessonUpdateFields {
|
|
84
|
+
content?: string;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/models/review.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1D,oBAAoB;AACpB,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAa,SAAQ,MAAM;CAAG;AAE/C,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAiB,SAAQ,UAAU;CAAG;AAEvD,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qDAAqD;AACrD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;CAEhC;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/models/review.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,kDAAkD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SprintStatus, TaskStatus } from './common';
|
|
2
|
+
/** Sprint record from database */
|
|
3
|
+
export interface Sprint {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
status: SprintStatus;
|
|
7
|
+
goal: string | null;
|
|
8
|
+
started_at: string | null;
|
|
9
|
+
closed_at: string | null;
|
|
10
|
+
created_at: string;
|
|
11
|
+
updated_at: string;
|
|
12
|
+
}
|
|
13
|
+
/** Result of sprint creation */
|
|
14
|
+
export interface SprintResult {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
goal: string | null;
|
|
18
|
+
status: SprintStatus;
|
|
19
|
+
created_at: string;
|
|
20
|
+
}
|
|
21
|
+
/** Sprint overview with task counts by status */
|
|
22
|
+
export interface SprintOverview {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
goal: string | null;
|
|
26
|
+
status: SprintStatus;
|
|
27
|
+
taskCounts: Record<TaskStatus, number>;
|
|
28
|
+
totalTasks: number;
|
|
29
|
+
created_at: string;
|
|
30
|
+
updated_at: string;
|
|
31
|
+
closed_at: string | null;
|
|
32
|
+
}
|
|
33
|
+
/** Options for sprint creation */
|
|
34
|
+
export interface SprintCreateOptions {
|
|
35
|
+
name?: string;
|
|
36
|
+
goal?: string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=sprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint.d.ts","sourceRoot":"","sources":["../../src/models/sprint.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzD,kCAAkC;AAClC,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint.js","sourceRoot":"","sources":["../../src/models/sprint.ts"],"names":[],"mappings":";AAAA,kCAAkC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { TaskType, TaskPriority, TaskStatus, RoleName, TaskStage } from './common';
|
|
2
|
+
/** Task record from database */
|
|
3
|
+
export interface Task {
|
|
4
|
+
id: string;
|
|
5
|
+
sprint_id: string;
|
|
6
|
+
parent_id: string | null;
|
|
7
|
+
description: string;
|
|
8
|
+
task_type: TaskType;
|
|
9
|
+
priority: TaskPriority;
|
|
10
|
+
owner: RoleName;
|
|
11
|
+
points: number;
|
|
12
|
+
status: TaskStatus;
|
|
13
|
+
stage: TaskStage;
|
|
14
|
+
session_key: string | null;
|
|
15
|
+
started_at: string | null;
|
|
16
|
+
completed_at: string | null;
|
|
17
|
+
scope_in: string | null;
|
|
18
|
+
scope_out: string | null;
|
|
19
|
+
decisions: string | null;
|
|
20
|
+
dependencies: string | null;
|
|
21
|
+
acceptance: string | null;
|
|
22
|
+
created_at: string;
|
|
23
|
+
updated_at: string;
|
|
24
|
+
removed_at: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** Result of task creation */
|
|
27
|
+
export interface TaskResult {
|
|
28
|
+
id: string;
|
|
29
|
+
sprint_id: string;
|
|
30
|
+
parent_id: string | null;
|
|
31
|
+
description: string;
|
|
32
|
+
task_type: TaskType;
|
|
33
|
+
priority: TaskPriority;
|
|
34
|
+
owner: RoleName;
|
|
35
|
+
points: number;
|
|
36
|
+
status: TaskStatus;
|
|
37
|
+
stage: TaskStage;
|
|
38
|
+
created_at: string;
|
|
39
|
+
}
|
|
40
|
+
/** Detailed task information for `task show` */
|
|
41
|
+
export interface TaskDetail extends Task {
|
|
42
|
+
sprint_name: string | null;
|
|
43
|
+
parent_description: string | null;
|
|
44
|
+
}
|
|
45
|
+
/** Options for task creation */
|
|
46
|
+
export interface TaskAddOptions {
|
|
47
|
+
/** Explicit task ID (4-digit zero-padded NNNN). If not provided, auto-generated. */
|
|
48
|
+
task_id?: string;
|
|
49
|
+
parent_id?: string;
|
|
50
|
+
task_type?: TaskType;
|
|
51
|
+
priority?: TaskPriority;
|
|
52
|
+
points?: number;
|
|
53
|
+
/** Initial stage (defaults to 'Planning') */
|
|
54
|
+
stage?: TaskStage;
|
|
55
|
+
}
|
|
56
|
+
/** Options for task move */
|
|
57
|
+
export interface TaskMoveContext {
|
|
58
|
+
session_key?: string;
|
|
59
|
+
owner?: string;
|
|
60
|
+
}
|
|
61
|
+
/** Fields that can be updated on a task (metadata only — no stage/owner/sprint) */
|
|
62
|
+
export interface TaskUpdateFields {
|
|
63
|
+
description?: string;
|
|
64
|
+
task_type?: TaskType;
|
|
65
|
+
priority?: TaskPriority;
|
|
66
|
+
points?: number;
|
|
67
|
+
scope_in?: string;
|
|
68
|
+
scope_out?: string;
|
|
69
|
+
acceptance?: string;
|
|
70
|
+
decisions?: string;
|
|
71
|
+
dependencies?: string;
|
|
72
|
+
/** Raw content from --content-file (frontmatter extraction handled by service) */
|
|
73
|
+
content_file_content?: string;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExF,gCAAgC;AAChC,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":";AAAA,gCAAgC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Severity of a validation issue */
|
|
2
|
+
export type IssueSeverity = 'error' | 'warning' | 'info';
|
|
3
|
+
/** A single validation issue */
|
|
4
|
+
export interface ValidationIssue {
|
|
5
|
+
category: string;
|
|
6
|
+
severity: IssueSeverity;
|
|
7
|
+
message: string;
|
|
8
|
+
entity?: string;
|
|
9
|
+
detail?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Result of board validation */
|
|
12
|
+
export interface ValidationResult {
|
|
13
|
+
sprint_id: string;
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
issues: ValidationIssue[];
|
|
16
|
+
}
|
|
17
|
+
/** Result of spawn legality check */
|
|
18
|
+
export interface SpawnResult {
|
|
19
|
+
sprint_id: string;
|
|
20
|
+
task_id: string;
|
|
21
|
+
isLegal: boolean;
|
|
22
|
+
verdict: 'OK' | 'ERR-SPAWN-SPRINT' | 'ERR-SPAWN-STATE' | 'ERR-SPAWN-ROLE';
|
|
23
|
+
reason?: string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/models/validation.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,IAAI,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/models/validation.ts"],"names":[],"mappings":";AAAA,sCAAsC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { AuditReport, AuditOptions } from './audit-checks/types';
|
|
3
|
+
import { ALL_CHECK_NAMES } from './audit-checks/types';
|
|
4
|
+
import { FixEngine } from './audit-checks/fix-engine';
|
|
5
|
+
/**
|
|
6
|
+
* Run a full audit with the given options.
|
|
7
|
+
*
|
|
8
|
+
* @param db - Database connection
|
|
9
|
+
* @param opts - Audit options (checks, sprintId, fix, fixDryRun)
|
|
10
|
+
* @returns AuditReport with results and exit code
|
|
11
|
+
* @throws AuditUnknownCheckError if unknown check name
|
|
12
|
+
* @throws AuditSprintNotFoundError if sprint not found
|
|
13
|
+
*/
|
|
14
|
+
export declare function runAudit(db: Database.Database, opts: AuditOptions): AuditReport;
|
|
15
|
+
export { ALL_CHECK_NAMES, FixEngine };
|
|
16
|
+
//# sourceMappingURL=audit-check-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-check-service.d.ts","sourceRoot":"","sources":["../../src/services/audit-check-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAA+B,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AAY3E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAuBtD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,CA0F/E;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC"}
|