@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,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src-filesystem-only audit check: SRC filesystem existence
|
|
3
|
+
// SAD-0037 §3.8: SRC documents without corresponding filesystem file
|
|
4
|
+
// FS-SS-036-0007: SRC Filesystem-Only Check Implementation
|
|
5
|
+
// MOD-023: CLI Audit Command
|
|
6
|
+
//
|
|
7
|
+
// This is the only audit check that requires filesystem access.
|
|
8
|
+
// It uses the SrcCheckRunner signature: (db, projectFolder, sprintId?)
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.srcFilesystemOnlyCheck = srcFilesystemOnlyCheck;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
/**
|
|
47
|
+
* Verify every SRC document has a corresponding file on the filesystem.
|
|
48
|
+
* SRC documents with a path field are verified for existence; absolute paths
|
|
49
|
+
* are used directly, relative paths are resolved against projectFolder.
|
|
50
|
+
* Non-fixable — reports missing files only.
|
|
51
|
+
*/
|
|
52
|
+
function srcFilesystemOnlyCheck(db, projectFolder, sprintId) {
|
|
53
|
+
let sql = `
|
|
54
|
+
SELECT d.id, d.type, d.path
|
|
55
|
+
FROM documents d
|
|
56
|
+
WHERE d.type = 'SRC'
|
|
57
|
+
`;
|
|
58
|
+
const params = [];
|
|
59
|
+
if (sprintId) {
|
|
60
|
+
sql = `
|
|
61
|
+
SELECT d.id, d.type, d.path
|
|
62
|
+
FROM documents d
|
|
63
|
+
WHERE d.type = 'SRC'
|
|
64
|
+
AND d.id IN (SELECT id FROM tasks WHERE sprint_id = ?)
|
|
65
|
+
`;
|
|
66
|
+
params.push(sprintId);
|
|
67
|
+
}
|
|
68
|
+
sql += ' ORDER BY d.id';
|
|
69
|
+
const rows = db.prepare(sql).all(...params);
|
|
70
|
+
const issues = [];
|
|
71
|
+
for (const row of rows) {
|
|
72
|
+
if (!row.path) {
|
|
73
|
+
issues.push({
|
|
74
|
+
issueId: 'SRC_NOT_FOUND',
|
|
75
|
+
docId: row.id,
|
|
76
|
+
docType: row.type,
|
|
77
|
+
detail: `SRC document '${row.id}' has no path field (cannot verify filesystem existence)`,
|
|
78
|
+
severity: 'warning',
|
|
79
|
+
fixable: false,
|
|
80
|
+
});
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Resolve path: absolute path used directly; relative path resolved against project folder
|
|
84
|
+
const resolvedPath = path.isAbsolute(row.path)
|
|
85
|
+
? row.path
|
|
86
|
+
: path.join(projectFolder, row.path);
|
|
87
|
+
const fileExists = fs.existsSync(resolvedPath);
|
|
88
|
+
if (!fileExists) {
|
|
89
|
+
issues.push({
|
|
90
|
+
issueId: 'SRC_NOT_FOUND',
|
|
91
|
+
docId: row.id,
|
|
92
|
+
docType: row.type,
|
|
93
|
+
detail: `SRC document '${row.id}' references path '${row.path}' which does not exist on the filesystem`,
|
|
94
|
+
severity: 'error',
|
|
95
|
+
fixable: false,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const status = issues.length === 0 ? 'PASS' : 'FAIL';
|
|
100
|
+
const scope = sprintId ? ` in sprint ${sprintId}` : '';
|
|
101
|
+
const summary = status === 'PASS'
|
|
102
|
+
? `All SRC documents have corresponding files on the filesystem${scope}`
|
|
103
|
+
: `${issues.length} SRC document(s) reference non-existent files${scope}`;
|
|
104
|
+
return { checkName: 'src-filesystem-only', status, summary, issues };
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=src-filesystem-only-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-filesystem-only-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/src-filesystem-only-check.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,qEAAqE;AACrE,2DAA2D;AAC3D,6BAA6B;AAC7B,EAAE;AACF,gEAAgE;AAChE,uEAAuE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAavE,wDAiEC;AA3ED,uCAAyB;AACzB,2CAA6B;AAG7B;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,EAAqB,EACrB,aAAqB,EACrB,QAAiB;IAEjB,IAAI,GAAG,GAAG;;;;GAIT,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,GAAG;;;;;KAKL,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,IAAI,gBAAgB,CAAC;IAExB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA6D,CAAC;IAExG,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,MAAM,EAAE,iBAAiB,GAAG,CAAC,EAAE,0DAA0D;gBACzF,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,2FAA2F;QAC3F,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5C,CAAC,CAAC,GAAG,CAAC,IAAI;YACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,MAAM,EAAE,iBAAiB,GAAG,CAAC,EAAE,sBAAsB,GAAG,CAAC,IAAI,0CAA0C;gBACvG,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,KAAK;aACf,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,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM;QAC/B,CAAC,CAAC,+DAA+D,KAAK,EAAE;QACxE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,gDAAgD,KAAK,EAAE,CAAC;IAE5E,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { CheckResult } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Verify every TS (Test Suite) document has at least one outgoing divided_into
|
|
5
|
+
* relation to a Test Case (TC) document.
|
|
6
|
+
* Non-fixable — reports missing traceability only.
|
|
7
|
+
* Severity: error (AD-0047) — a TS without TC is a critical traceability gap.
|
|
8
|
+
*/
|
|
9
|
+
export declare function tsToTcCheck(db: Database.Database, sprintId?: string): CheckResult;
|
|
10
|
+
//# sourceMappingURL=ts-to-tc-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-to-tc-check.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/ts-to-tc-check.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAgDjF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ts-to-tc audit check: TS→TC traceability
|
|
3
|
+
// SAD-0037 §3.6: TS documents without divided_into relation to TC
|
|
4
|
+
// FS-SS-036-0005: TS→TC Traceability Check Implementation
|
|
5
|
+
// AD-0047: TS→TC missing TC is severity error
|
|
6
|
+
// MOD-023: CLI Audit Command
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.tsToTcCheck = tsToTcCheck;
|
|
9
|
+
/**
|
|
10
|
+
* Verify every TS (Test Suite) document has at least one outgoing divided_into
|
|
11
|
+
* relation to a Test Case (TC) document.
|
|
12
|
+
* Non-fixable — reports missing traceability only.
|
|
13
|
+
* Severity: error (AD-0047) — a TS without TC is a critical traceability gap.
|
|
14
|
+
*/
|
|
15
|
+
function tsToTcCheck(db, sprintId) {
|
|
16
|
+
let sql = `
|
|
17
|
+
SELECT d.id, d.type, d.title
|
|
18
|
+
FROM documents d
|
|
19
|
+
WHERE d.type = 'TS'
|
|
20
|
+
AND NOT EXISTS (
|
|
21
|
+
SELECT 1 FROM relations r
|
|
22
|
+
WHERE r.from_id = d.id
|
|
23
|
+
AND r.rel_type = 'divided_into'
|
|
24
|
+
)
|
|
25
|
+
`;
|
|
26
|
+
const params = [];
|
|
27
|
+
if (sprintId) {
|
|
28
|
+
sql = `
|
|
29
|
+
SELECT d.id, d.type, d.title
|
|
30
|
+
FROM documents d
|
|
31
|
+
WHERE d.type = 'TS'
|
|
32
|
+
AND NOT EXISTS (
|
|
33
|
+
SELECT 1 FROM relations r
|
|
34
|
+
WHERE r.from_id = d.id
|
|
35
|
+
AND r.rel_type = 'divided_into'
|
|
36
|
+
)
|
|
37
|
+
AND d.id IN (SELECT id FROM tasks WHERE sprint_id = ?)
|
|
38
|
+
`;
|
|
39
|
+
params.push(sprintId);
|
|
40
|
+
}
|
|
41
|
+
sql += ' ORDER BY d.id';
|
|
42
|
+
const rows = db.prepare(sql).all(...params);
|
|
43
|
+
const issues = rows.map(row => ({
|
|
44
|
+
issueId: 'MISSING_TC',
|
|
45
|
+
docId: row.id,
|
|
46
|
+
docType: row.type,
|
|
47
|
+
detail: `Test Suite '${row.id}' has no divided_into relation to any Test Case`,
|
|
48
|
+
severity: 'error',
|
|
49
|
+
fixable: false,
|
|
50
|
+
}));
|
|
51
|
+
const status = issues.length === 0 ? 'PASS' : 'FAIL';
|
|
52
|
+
const scope = sprintId ? ` in sprint ${sprintId}` : '';
|
|
53
|
+
const summary = status === 'PASS'
|
|
54
|
+
? `All TS documents have TC traceability${scope}`
|
|
55
|
+
: `${issues.length} TS document(s) missing TC traceability${scope}`;
|
|
56
|
+
return { checkName: 'ts-to-tc', status, summary, issues };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ts-to-tc-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-to-tc-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/ts-to-tc-check.ts"],"names":[],"mappings":";AAAA,2CAA2C;AAC3C,kEAAkE;AAClE,0DAA0D;AAC1D,8CAA8C;AAC9C,6BAA6B;;AAW7B,kCAgDC;AAtDD;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,EAAqB,EAAE,QAAiB;IAClE,IAAI,GAAG,GAAG;;;;;;;;;GAST,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,GAAG;;;;;;;;;;KAUL,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,IAAI,gBAAgB,CAAC;IAExB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAuD,CAAC;IAElG,MAAM,MAAM,GAAiB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,OAAO,EAAE,GAAG,CAAC,IAAI;QACjB,MAAM,EAAE,eAAe,GAAG,CAAC,EAAE,iDAAiD;QAC9E,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM;QAC/B,CAAC,CAAC,wCAAwC,KAAK,EAAE;QACjD,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,0CAA0C,KAAK,EAAE,CAAC;IAEtE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
/** A single audit issue detected by a check */
|
|
3
|
+
export interface AuditIssue {
|
|
4
|
+
issueId: string;
|
|
5
|
+
severity?: 'error' | 'warning' | 'info';
|
|
6
|
+
entityId?: string;
|
|
7
|
+
docId?: string;
|
|
8
|
+
docType?: string;
|
|
9
|
+
relationId?: number;
|
|
10
|
+
relationSide?: 'source' | 'target';
|
|
11
|
+
detail: string;
|
|
12
|
+
fixable?: boolean;
|
|
13
|
+
count?: number;
|
|
14
|
+
entityTypeFound?: string;
|
|
15
|
+
entityTypeExpected?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Result from running a single audit check */
|
|
18
|
+
export interface CheckResult {
|
|
19
|
+
checkName: string;
|
|
20
|
+
status: 'PASS' | 'FAIL' | 'SKIP';
|
|
21
|
+
summary: string;
|
|
22
|
+
issues: AuditIssue[];
|
|
23
|
+
fixApplied?: string;
|
|
24
|
+
/** Count of fixable issues for this check (populated during fixDryRun) */
|
|
25
|
+
fixCount?: number;
|
|
26
|
+
}
|
|
27
|
+
/** Applied fix record */
|
|
28
|
+
export interface AppliedFix {
|
|
29
|
+
check: string;
|
|
30
|
+
issueId: string;
|
|
31
|
+
targetId: string;
|
|
32
|
+
}
|
|
33
|
+
/** Result from the fix engine */
|
|
34
|
+
export interface FixResult {
|
|
35
|
+
applied: AppliedFix[];
|
|
36
|
+
count: number;
|
|
37
|
+
}
|
|
38
|
+
/** Full audit report */
|
|
39
|
+
export interface AuditReport {
|
|
40
|
+
generatedAt: string;
|
|
41
|
+
sprintFilter: string | null;
|
|
42
|
+
checks: CheckResult[];
|
|
43
|
+
exitCode: 0 | 1 | 2;
|
|
44
|
+
fixApplied: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** Audit options parsed from CLI or programmatic use */
|
|
47
|
+
export interface AuditOptions {
|
|
48
|
+
checks?: string[];
|
|
49
|
+
sprintId?: string;
|
|
50
|
+
fix?: boolean;
|
|
51
|
+
fixDryRun?: boolean;
|
|
52
|
+
reportFile?: string;
|
|
53
|
+
format?: string;
|
|
54
|
+
dbPath?: string;
|
|
55
|
+
/** Project folder for src-filesystem-only check (SAD-0037 §4) */
|
|
56
|
+
projectFolder?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Function signature for individual check runners (DB-only checks) */
|
|
59
|
+
export type CheckRunner = (db: Database.Database, sprintId?: string) => CheckResult;
|
|
60
|
+
/** Function signature for src-filesystem-only check (requires projectFolder) (SAD-0037 §4.2) */
|
|
61
|
+
export type SrcCheckRunner = (db: Database.Database, projectFolder: string, sprintId?: string) => CheckResult;
|
|
62
|
+
/** Known check names (SAD-0037: expanded to 11 checks) */
|
|
63
|
+
export declare const ALL_CHECK_NAMES: readonly ["dangling-relations", "duplicate-ids", "orphan-documents", "inverse-consistency", "us-to-fr-nfr", "fr-nfr-to-fs-nfs", "fs-nfs-to-sad-ad-qa", "fs-nfs-to-ts", "ts-to-tc", "sad-ad-qa-tc-to-src", "src-filesystem-only"];
|
|
64
|
+
export declare function isKnownCheck(name: string): boolean;
|
|
65
|
+
export declare function normalizeCheckName(name: string): string;
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yBAAyB;AACzB,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uEAAuE;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;AAEpF,gGAAgG;AAChG,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;AAE9G,0DAA0D;AAC1D,eAAO,MAAM,eAAe,kOAclB,CAAC;AAEX,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Shared audit types for check modules
|
|
3
|
+
// MOD-023: CLI Audit Command
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.ALL_CHECK_NAMES = void 0;
|
|
6
|
+
exports.isKnownCheck = isKnownCheck;
|
|
7
|
+
exports.normalizeCheckName = normalizeCheckName;
|
|
8
|
+
/** Known check names (SAD-0037: expanded to 11 checks) */
|
|
9
|
+
exports.ALL_CHECK_NAMES = [
|
|
10
|
+
// Existing 4 integrity checks (SAD-0036):
|
|
11
|
+
'dangling-relations',
|
|
12
|
+
'duplicate-ids',
|
|
13
|
+
'orphan-documents',
|
|
14
|
+
'inverse-consistency',
|
|
15
|
+
// New 7 traceability checks (SAD-0037):
|
|
16
|
+
'us-to-fr-nfr',
|
|
17
|
+
'fr-nfr-to-fs-nfs',
|
|
18
|
+
'fs-nfs-to-sad-ad-qa',
|
|
19
|
+
'fs-nfs-to-ts',
|
|
20
|
+
'ts-to-tc',
|
|
21
|
+
'sad-ad-qa-tc-to-src',
|
|
22
|
+
'src-filesystem-only',
|
|
23
|
+
];
|
|
24
|
+
function isKnownCheck(name) {
|
|
25
|
+
return exports.ALL_CHECK_NAMES.includes(name.toLowerCase());
|
|
26
|
+
}
|
|
27
|
+
function normalizeCheckName(name) {
|
|
28
|
+
return name.toLowerCase().trim();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/audit-checks/types.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,6BAA6B;;;AAyF7B,oCAEC;AAED,gDAEC;AAvBD,0DAA0D;AAC7C,QAAA,eAAe,GAAG;IAC7B,0CAA0C;IAC1C,oBAAoB;IACpB,eAAe;IACf,kBAAkB;IAClB,qBAAqB;IACrB,wCAAwC;IACxC,cAAc;IACd,kBAAkB;IAClB,qBAAqB;IACrB,cAAc;IACd,UAAU;IACV,qBAAqB;IACrB,qBAAqB;CACb,CAAC;AAEX,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,uBAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAoC,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { CheckResult } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Verify every US document has at least one outgoing fulfilled_by relation
|
|
5
|
+
* to a Functional Requirement (FR) or Non-Functional Requirement (NFR).
|
|
6
|
+
* Non-fixable — reports missing traceability only.
|
|
7
|
+
*/
|
|
8
|
+
export declare function usToFrNfrCheck(db: Database.Database, sprintId?: string): CheckResult;
|
|
9
|
+
//# sourceMappingURL=us-to-fr-nfr-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"us-to-fr-nfr-check.d.ts","sourceRoot":"","sources":["../../../src/services/audit-checks/us-to-fr-nfr-check.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAgDpF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// us-to-fr-nfr audit check: US→FR/NFR traceability
|
|
3
|
+
// SAD-0037 §3.2: US documents without fulfilled_by relation to FR/NFR
|
|
4
|
+
// FS-SS-036-0001: US→FR/NFR Traceability Check Implementation
|
|
5
|
+
// MOD-023: CLI Audit Command
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.usToFrNfrCheck = usToFrNfrCheck;
|
|
8
|
+
/**
|
|
9
|
+
* Verify every US document has at least one outgoing fulfilled_by relation
|
|
10
|
+
* to a Functional Requirement (FR) or Non-Functional Requirement (NFR).
|
|
11
|
+
* Non-fixable — reports missing traceability only.
|
|
12
|
+
*/
|
|
13
|
+
function usToFrNfrCheck(db, sprintId) {
|
|
14
|
+
let sql = `
|
|
15
|
+
SELECT d.id, d.type, d.title
|
|
16
|
+
FROM documents d
|
|
17
|
+
WHERE d.type = 'US'
|
|
18
|
+
AND NOT EXISTS (
|
|
19
|
+
SELECT 1 FROM relations r
|
|
20
|
+
WHERE r.from_id = d.id
|
|
21
|
+
AND r.rel_type = 'fulfilled_by'
|
|
22
|
+
)
|
|
23
|
+
`;
|
|
24
|
+
const params = [];
|
|
25
|
+
if (sprintId) {
|
|
26
|
+
sql = `
|
|
27
|
+
SELECT d.id, d.type, d.title
|
|
28
|
+
FROM documents d
|
|
29
|
+
WHERE d.type = 'US'
|
|
30
|
+
AND NOT EXISTS (
|
|
31
|
+
SELECT 1 FROM relations r
|
|
32
|
+
WHERE r.from_id = d.id
|
|
33
|
+
AND r.rel_type = 'fulfilled_by'
|
|
34
|
+
)
|
|
35
|
+
AND d.id IN (SELECT id FROM tasks WHERE sprint_id = ?)
|
|
36
|
+
`;
|
|
37
|
+
params.push(sprintId);
|
|
38
|
+
}
|
|
39
|
+
sql += ' ORDER BY d.id';
|
|
40
|
+
const rows = db.prepare(sql).all(...params);
|
|
41
|
+
const issues = rows.map(row => ({
|
|
42
|
+
issueId: 'MISSING_FR_NFR',
|
|
43
|
+
docId: row.id,
|
|
44
|
+
docType: row.type,
|
|
45
|
+
detail: `User Story '${row.id}' has no fulfilled_by relation to any FR or NFR`,
|
|
46
|
+
severity: 'warning',
|
|
47
|
+
fixable: false,
|
|
48
|
+
}));
|
|
49
|
+
const status = issues.length === 0 ? 'PASS' : 'FAIL';
|
|
50
|
+
const scope = sprintId ? ` in sprint ${sprintId}` : '';
|
|
51
|
+
const summary = status === 'PASS'
|
|
52
|
+
? `All US documents have FR/NFR traceability${scope}`
|
|
53
|
+
: `${issues.length} US document(s) missing FR/NFR traceability${scope}`;
|
|
54
|
+
return { checkName: 'us-to-fr-nfr', status, summary, issues };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=us-to-fr-nfr-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"us-to-fr-nfr-check.js","sourceRoot":"","sources":["../../../src/services/audit-checks/us-to-fr-nfr-check.ts"],"names":[],"mappings":";AAAA,mDAAmD;AACnD,sEAAsE;AACtE,8DAA8D;AAC9D,6BAA6B;;AAU7B,wCAgDC;AArDD;;;;GAIG;AACH,SAAgB,cAAc,CAAC,EAAqB,EAAE,QAAiB;IACrE,IAAI,GAAG,GAAG;;;;;;;;;GAST,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,GAAG;;;;;;;;;;KAUL,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,IAAI,gBAAgB,CAAC;IAExB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAuD,CAAC;IAElG,MAAM,MAAM,GAAiB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,OAAO,EAAE,GAAG,CAAC,IAAI;QACjB,MAAM,EAAE,eAAe,GAAG,CAAC,EAAE,iDAAiD;QAC9E,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,KAAK,MAAM;QAC/B,CAAC,CAAC,4CAA4C,KAAK,EAAE;QACrD,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,8CAA8C,KAAK,EAAE,CAAC;IAE1E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { Document, DocumentDetail, DocumentRegisterOptions, DocumentUpdateFields, SearchResult, ListOptions, SearchOptions } from '../models/document';
|
|
3
|
+
/**
|
|
4
|
+
* Register a new document.
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerDocument(db: Database.Database, id: string, type: string, title: string, opts?: DocumentRegisterOptions): Document;
|
|
7
|
+
/**
|
|
8
|
+
* List documents with optional filters, pagination, sorting, and count-only support.
|
|
9
|
+
* Default ordering: ascending by id.
|
|
10
|
+
*
|
|
11
|
+
* When countOnly is true, returns { count: number } instead of Document[].
|
|
12
|
+
*/
|
|
13
|
+
export declare function listDocuments(db: Database.Database, opts?: ListOptions): Document[] | {
|
|
14
|
+
count: number;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Get a single document by ID.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getDocument(db: Database.Database, id: string): Document;
|
|
20
|
+
/**
|
|
21
|
+
* Show document detail (with content if stored).
|
|
22
|
+
* Content is fetched from document_contents (primary) or doc.path (fallback for
|
|
23
|
+
* legacy documents registered before this fix).
|
|
24
|
+
*/
|
|
25
|
+
export declare function showDocument(db: Database.Database, id: string): DocumentDetail;
|
|
26
|
+
/**
|
|
27
|
+
* Update document metadata.
|
|
28
|
+
* --meta replaces entirely (not merge), per spec.
|
|
29
|
+
*
|
|
30
|
+
* MOD-021: When fields.type changes the document type, the old entity is deleted
|
|
31
|
+
* (with relation cascade) and a new entity is created with the updated type mapping.
|
|
32
|
+
* All operations (content upsert, entity sync, document update) run within a single
|
|
33
|
+
* atomic transaction per FS-SS-021-0004.
|
|
34
|
+
*/
|
|
35
|
+
export declare function updateDocument(db: Database.Database, id: string, fields: DocumentUpdateFields): Document;
|
|
36
|
+
/**
|
|
37
|
+
* Remove a document registration.
|
|
38
|
+
*
|
|
39
|
+
* Deletion ordering per SAD-0035 (3-step sequence after entities table drop):
|
|
40
|
+
* Step 1: Delete relations (outgoing and incoming) referencing the document
|
|
41
|
+
* Step 2: Delete document_contents row (UNCONDITIONAL per AD-0028 — FK constraint
|
|
42
|
+
* requires content deletion before the document row is removed)
|
|
43
|
+
* Step 3: Delete document row
|
|
44
|
+
*
|
|
45
|
+
* Content is always deleted unconditionally per AD-0028 — there is no soft-delete option.
|
|
46
|
+
*/
|
|
47
|
+
export declare function removeDocument(db: Database.Database, id: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Full-text search across document contents with pagination, sorting, count-only support, and type filtering.
|
|
50
|
+
* Default ordering: FTS5 BM25 relevance ranking (descending).
|
|
51
|
+
* When --order-by is specified, results are sorted by the given column via SQL subquery instead of by rank.
|
|
52
|
+
*
|
|
53
|
+
* When countOnly is true, returns { count: number } instead of SearchResult[].
|
|
54
|
+
*/
|
|
55
|
+
export declare function searchDocuments(db: Database.Database, query: string, opts?: SearchOptions): SearchResult[] | {
|
|
56
|
+
count: number;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=document-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-service.d.ts","sourceRoot":"","sources":["../../src/services/document-service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmC5J;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,uBAAuB,GAC7B,QAAQ,CAmEV;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,CAAC,EAAE,WAAW,GACjB,QAAQ,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkDhC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAkB9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,oBAAoB,GAC3B,QAAQ,CAmEV;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAetE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,aAAa,GACnB,YAAY,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAgIpC"}
|