@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,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Project resolution logic
|
|
3
|
+
// Implements AD-0005: Project Resolution Cascade
|
|
4
|
+
// Resolution order: --project flag → env var → default → CWD → error
|
|
5
|
+
// + FS-SS-002-0007 (error codes), FS-SS-002-0008 (resolution error)
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ENV_PROJECT_VAR = void 0;
|
|
8
|
+
exports.resolveProject = resolveProject;
|
|
9
|
+
const errors_1 = require("../utils/errors");
|
|
10
|
+
const registry_1 = require("./registry");
|
|
11
|
+
/** Environment variable name for project override */
|
|
12
|
+
exports.ENV_PROJECT_VAR = 'CORTEX_CLI_PROJECT';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve which project to use.
|
|
15
|
+
*
|
|
16
|
+
* Priority cascade (AD-0005):
|
|
17
|
+
* 1. --project flag (explicit)
|
|
18
|
+
* 2. CORTEX_CLI_PROJECT environment variable
|
|
19
|
+
* 3. Default project from registry
|
|
20
|
+
* 4. Current working directory matches a registered project folder
|
|
21
|
+
* 5. Error: ProjectResolutionError (ERR-PROJ-011)
|
|
22
|
+
*/
|
|
23
|
+
function resolveProject(opts) {
|
|
24
|
+
const options = opts ?? {};
|
|
25
|
+
const registry = (0, registry_1.loadRegistry)(options.registryPath);
|
|
26
|
+
// Track attempted methods for error reporting (FS-SS-002-0008 VR-001)
|
|
27
|
+
const attemptedMethods = [];
|
|
28
|
+
// 1. Check --project flag
|
|
29
|
+
if (options.flag) {
|
|
30
|
+
const entry = registry.projects[options.flag];
|
|
31
|
+
if (!entry) {
|
|
32
|
+
throw new errors_1.ProjectFlagNotFoundError(options.flag);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
name: options.flag,
|
|
36
|
+
folder: entry.folder,
|
|
37
|
+
dbPath: `${entry.folder}/pmp/project.db`,
|
|
38
|
+
resolutionMethod: 'flag',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// 2. Check environment variable
|
|
42
|
+
const envProject = options.envVar ?? process.env[exports.ENV_PROJECT_VAR];
|
|
43
|
+
if (envProject) {
|
|
44
|
+
const entry = registry.projects[envProject];
|
|
45
|
+
if (!entry) {
|
|
46
|
+
throw new errors_1.ProjectEnvNotFoundError(envProject);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
name: envProject,
|
|
50
|
+
folder: entry.folder,
|
|
51
|
+
dbPath: `${entry.folder}/pmp/project.db`,
|
|
52
|
+
resolutionMethod: 'env',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
attemptedMethods.push('CORTEX_CLI_PROJECT not set');
|
|
56
|
+
// 3. Check default project
|
|
57
|
+
if (registry.default) {
|
|
58
|
+
const entry = registry.projects[registry.default];
|
|
59
|
+
if (entry) {
|
|
60
|
+
return {
|
|
61
|
+
name: registry.default,
|
|
62
|
+
folder: entry.folder,
|
|
63
|
+
dbPath: `${entry.folder}/pmp/project.db`,
|
|
64
|
+
resolutionMethod: 'default',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
attemptedMethods.push(`default '${registry.default}' not in registry`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
attemptedMethods.push('no default project configured');
|
|
71
|
+
}
|
|
72
|
+
// 4. Check CWD match
|
|
73
|
+
const cwd = options.cwd ?? process.cwd();
|
|
74
|
+
const match = (0, registry_1.findProjectByFolder)(cwd, options.registryPath);
|
|
75
|
+
if (match) {
|
|
76
|
+
return {
|
|
77
|
+
name: match.name,
|
|
78
|
+
folder: match.entry.folder,
|
|
79
|
+
dbPath: `${match.entry.folder}/pmp/project.db`,
|
|
80
|
+
resolutionMethod: 'cwd',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
attemptedMethods.push(`CWD '${cwd}' not inside any registered project`);
|
|
84
|
+
// 5. No project found — list attempted methods (FS-SS-002-0008 VR-001)
|
|
85
|
+
throw new errors_1.ProjectResolutionError(attemptedMethods);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export declare const ENTITY_TYPES: readonly [{
|
|
2
|
+
readonly name: "Person";
|
|
3
|
+
readonly description: "A human agent (analyst, architect, coder, tester, captain)";
|
|
4
|
+
readonly required_fields: {};
|
|
5
|
+
}, {
|
|
6
|
+
readonly name: "Project";
|
|
7
|
+
readonly description: "A cortex-cli project workspace";
|
|
8
|
+
readonly required_fields: {};
|
|
9
|
+
}, {
|
|
10
|
+
readonly name: "Sprint";
|
|
11
|
+
readonly description: "A named sprint with a status lifecycle";
|
|
12
|
+
readonly required_fields: {};
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "Task";
|
|
15
|
+
readonly description: "A work item belonging to a sprint";
|
|
16
|
+
readonly required_fields: {};
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "Document";
|
|
19
|
+
readonly description: "A registered document artifact";
|
|
20
|
+
readonly required_fields: {};
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "Review";
|
|
23
|
+
readonly description: "A review record with verdict";
|
|
24
|
+
readonly required_fields: {};
|
|
25
|
+
}, {
|
|
26
|
+
readonly name: "TestReport";
|
|
27
|
+
readonly description: "A test execution report";
|
|
28
|
+
readonly required_fields: {};
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "Lesson";
|
|
31
|
+
readonly description: "A lessons-learned entry";
|
|
32
|
+
readonly required_fields: {};
|
|
33
|
+
}, {
|
|
34
|
+
readonly name: "Bug";
|
|
35
|
+
readonly description: "A tracked bug";
|
|
36
|
+
readonly required_fields: {};
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "SourceFile";
|
|
39
|
+
readonly description: "A source code file";
|
|
40
|
+
readonly required_fields: {};
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "Decision";
|
|
43
|
+
readonly description: "An architecture or design decision";
|
|
44
|
+
readonly required_fields: {};
|
|
45
|
+
}];
|
|
46
|
+
export declare const RELATION_TYPES: readonly [{
|
|
47
|
+
readonly name: "has_member";
|
|
48
|
+
readonly from_types: readonly ["Sprint"];
|
|
49
|
+
readonly to_types: readonly ["Task"];
|
|
50
|
+
readonly cardinality: "one_to_many";
|
|
51
|
+
readonly description: "Sprint contains tasks";
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "depends_on";
|
|
54
|
+
readonly from_types: readonly ["Task"];
|
|
55
|
+
readonly to_types: readonly ["Task"];
|
|
56
|
+
readonly cardinality: "many_to_many";
|
|
57
|
+
readonly description: "Task dependency";
|
|
58
|
+
}, {
|
|
59
|
+
readonly name: "relates_to";
|
|
60
|
+
readonly from_types: readonly ["Task"];
|
|
61
|
+
readonly to_types: readonly ["Task"];
|
|
62
|
+
readonly cardinality: "many_to_many";
|
|
63
|
+
readonly description: "Generic task relation";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "written_by";
|
|
66
|
+
readonly from_types: readonly ["Document"];
|
|
67
|
+
readonly to_types: readonly ["Person"];
|
|
68
|
+
readonly cardinality: "many_to_one";
|
|
69
|
+
readonly description: "Document author";
|
|
70
|
+
}, {
|
|
71
|
+
readonly name: "reviewed_by";
|
|
72
|
+
readonly from_types: readonly ["Document"];
|
|
73
|
+
readonly to_types: readonly ["Review"];
|
|
74
|
+
readonly cardinality: "many_to_one";
|
|
75
|
+
readonly description: "Review of a document";
|
|
76
|
+
}, {
|
|
77
|
+
readonly name: "approved_by";
|
|
78
|
+
readonly from_types: readonly ["Review"];
|
|
79
|
+
readonly to_types: readonly ["Person"];
|
|
80
|
+
readonly cardinality: "many_to_one";
|
|
81
|
+
readonly description: "Reviewer who gave verdict";
|
|
82
|
+
}, {
|
|
83
|
+
readonly name: "tracks";
|
|
84
|
+
readonly from_types: readonly ["Bug"];
|
|
85
|
+
readonly to_types: readonly ["Task"];
|
|
86
|
+
readonly cardinality: "many_to_one";
|
|
87
|
+
readonly description: "Bug is tracked by a task";
|
|
88
|
+
}, {
|
|
89
|
+
readonly name: "implements";
|
|
90
|
+
readonly from_types: readonly ["SourceFile"];
|
|
91
|
+
readonly to_types: readonly ["Task"];
|
|
92
|
+
readonly cardinality: "many_to_one";
|
|
93
|
+
readonly description: "Source file implements a task";
|
|
94
|
+
}, {
|
|
95
|
+
readonly name: "decides";
|
|
96
|
+
readonly from_types: readonly ["Person"];
|
|
97
|
+
readonly to_types: readonly ["Decision"];
|
|
98
|
+
readonly cardinality: "many_to_one";
|
|
99
|
+
readonly description: "Person made a decision";
|
|
100
|
+
}, {
|
|
101
|
+
readonly name: "contains";
|
|
102
|
+
readonly from_types: readonly ["Project"];
|
|
103
|
+
readonly to_types: readonly ["Document"];
|
|
104
|
+
readonly cardinality: "one_to_many";
|
|
105
|
+
readonly description: "Project contains document";
|
|
106
|
+
}];
|
|
107
|
+
export type BuiltinEntityType = typeof ENTITY_TYPES[number];
|
|
108
|
+
export type BuiltinRelationType = typeof RELATION_TYPES[number];
|
|
109
|
+
//# sourceMappingURL=builtin-schema-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-schema-constants.d.ts","sourceRoot":"","sources":["../../src/db/builtin-schema-constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYf,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWjB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Builtin graph schema constants
|
|
3
|
+
// URD-003 §4: Predefined entity types and relation types
|
|
4
|
+
// Used by initializeBuiltinSchema() in migration.ts
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RELATION_TYPES = exports.ENTITY_TYPES = void 0;
|
|
7
|
+
exports.ENTITY_TYPES = [
|
|
8
|
+
{ name: 'Person', description: 'A human agent (analyst, architect, coder, tester, captain)', required_fields: {} },
|
|
9
|
+
{ name: 'Project', description: 'A cortex-cli project workspace', required_fields: {} },
|
|
10
|
+
{ name: 'Sprint', description: 'A named sprint with a status lifecycle', required_fields: {} },
|
|
11
|
+
{ name: 'Task', description: 'A work item belonging to a sprint', required_fields: {} },
|
|
12
|
+
{ name: 'Document', description: 'A registered document artifact', required_fields: {} },
|
|
13
|
+
{ name: 'Review', description: 'A review record with verdict', required_fields: {} },
|
|
14
|
+
{ name: 'TestReport', description: 'A test execution report', required_fields: {} },
|
|
15
|
+
{ name: 'Lesson', description: 'A lessons-learned entry', required_fields: {} },
|
|
16
|
+
{ name: 'Bug', description: 'A tracked bug', required_fields: {} },
|
|
17
|
+
{ name: 'SourceFile', description: 'A source code file', required_fields: {} },
|
|
18
|
+
{ name: 'Decision', description: 'An architecture or design decision', required_fields: {} },
|
|
19
|
+
];
|
|
20
|
+
exports.RELATION_TYPES = [
|
|
21
|
+
{ name: 'has_member', from_types: ['Sprint'], to_types: ['Task'], cardinality: 'one_to_many', description: 'Sprint contains tasks' },
|
|
22
|
+
{ name: 'depends_on', from_types: ['Task'], to_types: ['Task'], cardinality: 'many_to_many', description: 'Task dependency' },
|
|
23
|
+
{ name: 'relates_to', from_types: ['Task'], to_types: ['Task'], cardinality: 'many_to_many', description: 'Generic task relation' },
|
|
24
|
+
{ name: 'written_by', from_types: ['Document'], to_types: ['Person'], cardinality: 'many_to_one', description: 'Document author' },
|
|
25
|
+
{ name: 'reviewed_by', from_types: ['Document'], to_types: ['Review'], cardinality: 'many_to_one', description: 'Review of a document' },
|
|
26
|
+
{ name: 'approved_by', from_types: ['Review'], to_types: ['Person'], cardinality: 'many_to_one', description: 'Reviewer who gave verdict' },
|
|
27
|
+
{ name: 'tracks', from_types: ['Bug'], to_types: ['Task'], cardinality: 'many_to_one', description: 'Bug is tracked by a task' },
|
|
28
|
+
{ name: 'implements', from_types: ['SourceFile'], to_types: ['Task'], cardinality: 'many_to_one', description: 'Source file implements a task' },
|
|
29
|
+
{ name: 'decides', from_types: ['Person'], to_types: ['Decision'], cardinality: 'many_to_one', description: 'Person made a decision' },
|
|
30
|
+
{ name: 'contains', from_types: ['Project'], to_types: ['Document'], cardinality: 'one_to_many', description: 'Project contains document' },
|
|
31
|
+
];
|
|
32
|
+
//# sourceMappingURL=builtin-schema-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-schema-constants.js","sourceRoot":"","sources":["../../src/db/builtin-schema-constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface ConnectionOptions {
|
|
3
|
+
/** Enable WAL mode (default: true) */
|
|
4
|
+
walMode?: boolean;
|
|
5
|
+
/** Busy timeout in ms (default: 5000) */
|
|
6
|
+
busyTimeout?: number;
|
|
7
|
+
/** Foreign keys enabled (default: true) */
|
|
8
|
+
foreignKeys?: boolean;
|
|
9
|
+
/** Journal mode (overrides walMode if set) */
|
|
10
|
+
journalMode?: string;
|
|
11
|
+
/** Synchronous mode (default: 'NORMAL') */
|
|
12
|
+
synchronous?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Open a SQLite database connection with proper configuration.
|
|
16
|
+
* Creates parent directories if they don't exist (for file-based databases).
|
|
17
|
+
*
|
|
18
|
+
* @param dbPath - Path to the database file, or ':memory:' for in-memory
|
|
19
|
+
* @param options - Connection configuration options
|
|
20
|
+
* @returns Configured better-sqlite3 Database instance
|
|
21
|
+
* @throws ERR-DB-001 through ERR-DB-004, ERR-CONN-001, ERR-CONN-002
|
|
22
|
+
*/
|
|
23
|
+
export declare function openConnection(dbPath: string, options?: ConnectionOptions): Database.Database;
|
|
24
|
+
/**
|
|
25
|
+
* Verify that a database connection is properly configured.
|
|
26
|
+
* Returns an object with the current pragma settings.
|
|
27
|
+
*/
|
|
28
|
+
export declare function verifyConnection(db: Database.Database): {
|
|
29
|
+
journalMode: string;
|
|
30
|
+
busyTimeout: number;
|
|
31
|
+
foreignKeys: number;
|
|
32
|
+
synchronous: number;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAYtC,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiDD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAyE7F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAOA"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SQLite connection factory with WAL mode, busy retry, and pragmas
|
|
3
|
+
// Implements AD-0003: WAL Mode with Busy Timeout and Exponential Backoff
|
|
4
|
+
// + FS-SS-001-0001 error codes (ERR-DB-001 through ERR-DB-004)
|
|
5
|
+
// + FS-SS-001-0003 (ERR-CONN-001, ERR-CONN-002)
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.openConnection = openConnection;
|
|
11
|
+
exports.verifyConnection = verifyConnection;
|
|
12
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
const errors_1 = require("../utils/errors");
|
|
16
|
+
const DEFAULT_OPTIONS = {
|
|
17
|
+
walMode: true,
|
|
18
|
+
busyTimeout: 5000,
|
|
19
|
+
foreignKeys: true,
|
|
20
|
+
journalMode: 'wal',
|
|
21
|
+
synchronous: 'NORMAL',
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Classify a connection/open error into the appropriate typed error class
|
|
25
|
+
* per FS-SS-001-0001 error conditions table.
|
|
26
|
+
*/
|
|
27
|
+
function classifyConnectionError(err, dbPath) {
|
|
28
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
29
|
+
// ERR-DB-001: Parent directory does not exist
|
|
30
|
+
if (msg.includes('ENOENT') || msg.includes('no such file or directory')) {
|
|
31
|
+
throw new errors_1.DatabaseParentDirMissingError((0, path_1.dirname)(dbPath));
|
|
32
|
+
}
|
|
33
|
+
// ERR-DB-002: Permission denied
|
|
34
|
+
if (msg.includes('EACCES') || msg.includes('EPERM') || msg.includes('permission denied')) {
|
|
35
|
+
throw new errors_1.DatabasePermissionDeniedError(dbPath);
|
|
36
|
+
}
|
|
37
|
+
// ERR-DB-003: Disk full
|
|
38
|
+
if (msg.includes('ENOSPC') || msg.includes('disk full') || msg.includes('no space left')) {
|
|
39
|
+
throw new errors_1.DatabaseDiskFullError(dbPath);
|
|
40
|
+
}
|
|
41
|
+
// ERR-DB-004: Database file exists but is not valid (corrupt)
|
|
42
|
+
if (msg.includes('file is not a database') || msg.includes('malformed') || msg.includes('corrupt')) {
|
|
43
|
+
throw new errors_1.DatabaseCorruptError(dbPath);
|
|
44
|
+
}
|
|
45
|
+
// ERR-CONN-002: Database busy at open time
|
|
46
|
+
if (msg.includes('SQLITE_BUSY') || msg.includes('database is locked')) {
|
|
47
|
+
throw new errors_1.ConnectionBusyError(dbPath);
|
|
48
|
+
}
|
|
49
|
+
// Fallback: generic connection error (ERR-CONN-001)
|
|
50
|
+
throw new errors_1.ConnectionError(`Failed to open database at "${dbPath}": ${msg}`, { dbPath, originalError: err });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Open a SQLite database connection with proper configuration.
|
|
54
|
+
* Creates parent directories if they don't exist (for file-based databases).
|
|
55
|
+
*
|
|
56
|
+
* @param dbPath - Path to the database file, or ':memory:' for in-memory
|
|
57
|
+
* @param options - Connection configuration options
|
|
58
|
+
* @returns Configured better-sqlite3 Database instance
|
|
59
|
+
* @throws ERR-DB-001 through ERR-DB-004, ERR-CONN-001, ERR-CONN-002
|
|
60
|
+
*/
|
|
61
|
+
function openConnection(dbPath, options) {
|
|
62
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
63
|
+
// Create parent directories for file-based databases
|
|
64
|
+
if (dbPath !== ':memory:') {
|
|
65
|
+
const dir = (0, path_1.dirname)(dbPath);
|
|
66
|
+
if (!(0, fs_1.existsSync)(dir)) {
|
|
67
|
+
try {
|
|
68
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
72
|
+
if (msg.includes('EACCES') || msg.includes('EPERM') || msg.includes('permission denied')) {
|
|
73
|
+
throw new errors_1.DatabasePermissionDeniedError(dir);
|
|
74
|
+
}
|
|
75
|
+
if (msg.includes('ENOSPC') || msg.includes('disk full')) {
|
|
76
|
+
throw new errors_1.DatabaseDiskFullError(dbPath);
|
|
77
|
+
}
|
|
78
|
+
throw new errors_1.DatabaseParentDirMissingError(dir);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Check if file exists and is not a valid SQLite database
|
|
83
|
+
if (dbPath !== ':memory:' && (0, fs_1.existsSync)(dbPath)) {
|
|
84
|
+
try {
|
|
85
|
+
const stat = (0, fs_1.statSync)(dbPath);
|
|
86
|
+
if (stat.size > 0) {
|
|
87
|
+
// Try to open to verify it's a valid SQLite file
|
|
88
|
+
// better-sqlite3 will throw if it's corrupt
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// statSync failed — proceed to open attempt
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
let db;
|
|
96
|
+
try {
|
|
97
|
+
db = new better_sqlite3_1.default(dbPath);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
classifyConnectionError(err, dbPath);
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
// Enable WAL mode first (AD-0003)
|
|
104
|
+
if (opts.walMode) {
|
|
105
|
+
db.pragma(`journal_mode = ${opts.journalMode}`);
|
|
106
|
+
}
|
|
107
|
+
// Set busy timeout (AD-0003)
|
|
108
|
+
db.pragma(`busy_timeout = ${opts.busyTimeout}`);
|
|
109
|
+
// Set foreign keys
|
|
110
|
+
if (opts.foreignKeys) {
|
|
111
|
+
db.pragma('foreign_keys = ON');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
db.pragma('foreign_keys = OFF');
|
|
115
|
+
}
|
|
116
|
+
// Set synchronous mode (NORMAL is safe with WAL)
|
|
117
|
+
db.pragma(`synchronous = ${opts.synchronous}`);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
db.close();
|
|
121
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
122
|
+
if (msg.includes('SQLITE_BUSY') || msg.includes('database is locked')) {
|
|
123
|
+
throw new errors_1.ConnectionBusyError(dbPath);
|
|
124
|
+
}
|
|
125
|
+
throw new errors_1.ConnectionError(`Failed to configure database: ${msg}`, { dbPath, originalError: err });
|
|
126
|
+
}
|
|
127
|
+
return db;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Verify that a database connection is properly configured.
|
|
131
|
+
* Returns an object with the current pragma settings.
|
|
132
|
+
*/
|
|
133
|
+
function verifyConnection(db) {
|
|
134
|
+
const journalMode = db.pragma('journal_mode', { simple: true });
|
|
135
|
+
const busyTimeout = db.pragma('busy_timeout', { simple: true });
|
|
136
|
+
const foreignKeys = db.pragma('foreign_keys', { simple: true });
|
|
137
|
+
const synchronous = Number(db.pragma('synchronous', { simple: true }));
|
|
138
|
+
return { journalMode, busyTimeout, foreignKeys, synchronous };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical relation types sourced from plan/project-schema.yaml (builtin:3.0).
|
|
3
|
+
* Entity types are derived dynamically from documents.type — no static registry.
|
|
4
|
+
* Total: 18 relation types.
|
|
5
|
+
*/
|
|
6
|
+
export declare const RELATION_TYPES: readonly [{
|
|
7
|
+
readonly name: "contained_in";
|
|
8
|
+
readonly from_types: readonly ["US", "FR", "NFR"];
|
|
9
|
+
readonly to_types: readonly ["MDL"];
|
|
10
|
+
readonly cardinality: "many_to_one";
|
|
11
|
+
readonly inverse_of: "contains";
|
|
12
|
+
readonly description: "A requirement or feature belongs to a module (e.g., FR-001 is contained in MDL-Auth)";
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "contains";
|
|
15
|
+
readonly from_types: readonly ["MDL"];
|
|
16
|
+
readonly to_types: readonly ["US", "FR", "NFR"];
|
|
17
|
+
readonly cardinality: "one_to_many";
|
|
18
|
+
readonly inverse_of: "contained_in";
|
|
19
|
+
readonly description: "A module contains requirements or features (inverse of contained_in)";
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "covered_by";
|
|
22
|
+
readonly from_types: readonly ["FS", "NFS"];
|
|
23
|
+
readonly to_types: readonly ["SAD", "AD", "QA"];
|
|
24
|
+
readonly cardinality: "many_to_many";
|
|
25
|
+
readonly inverse_of: "covers";
|
|
26
|
+
readonly description: "A specification is covered by design or QA artifacts (e.g., FS-001 is covered by SAD-0035)";
|
|
27
|
+
}, {
|
|
28
|
+
readonly name: "covers";
|
|
29
|
+
readonly from_types: readonly ["SAD", "AD", "QA"];
|
|
30
|
+
readonly to_types: readonly ["FS", "NFS"];
|
|
31
|
+
readonly cardinality: "many_to_many";
|
|
32
|
+
readonly inverse_of: "covered_by";
|
|
33
|
+
readonly description: "A design or QA artifact covers a specification (inverse of covered_by)";
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "decomposed_to";
|
|
36
|
+
readonly from_types: readonly ["SAD"];
|
|
37
|
+
readonly to_types: readonly ["AD", "QA"];
|
|
38
|
+
readonly cardinality: "one_to_many";
|
|
39
|
+
readonly inverse_of: "decomposes";
|
|
40
|
+
readonly description: "A SAD decomposes into AD and QA artifacts (e.g., SAD-0035 decomposes to AD-0035, QA-SAD-0035)";
|
|
41
|
+
}, {
|
|
42
|
+
readonly name: "decomposes";
|
|
43
|
+
readonly from_types: readonly ["AD", "QA"];
|
|
44
|
+
readonly to_types: readonly ["SAD"];
|
|
45
|
+
readonly cardinality: "many_to_one";
|
|
46
|
+
readonly inverse_of: "decomposed_to";
|
|
47
|
+
readonly description: "An AD or QA artifact decomposes from a SAD (inverse of decomposed_to)";
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "depended_on_by";
|
|
50
|
+
readonly from_types: readonly ["MDL"];
|
|
51
|
+
readonly to_types: readonly ["MDL"];
|
|
52
|
+
readonly cardinality: "many_to_many";
|
|
53
|
+
readonly inverse_of: "depends_on";
|
|
54
|
+
readonly description: "A module is depended on by another module (inverse of depends_on)";
|
|
55
|
+
}, {
|
|
56
|
+
readonly name: "depends_on";
|
|
57
|
+
readonly from_types: readonly ["MDL"];
|
|
58
|
+
readonly to_types: readonly ["MDL"];
|
|
59
|
+
readonly cardinality: "many_to_many";
|
|
60
|
+
readonly inverse_of: "depended_on_by";
|
|
61
|
+
readonly description: "A module depends on another module (e.g., MDL-Auth depends on MDL-User)";
|
|
62
|
+
}, {
|
|
63
|
+
readonly name: "divided_from";
|
|
64
|
+
readonly from_types: readonly ["TC"];
|
|
65
|
+
readonly to_types: readonly ["TS"];
|
|
66
|
+
readonly cardinality: "many_to_one";
|
|
67
|
+
readonly inverse_of: "divided_into";
|
|
68
|
+
readonly description: "A test case is divided from a test suite (e.g., TC-0711 divided from TS-033)";
|
|
69
|
+
}, {
|
|
70
|
+
readonly name: "divided_into";
|
|
71
|
+
readonly from_types: readonly ["TS"];
|
|
72
|
+
readonly to_types: readonly ["TC"];
|
|
73
|
+
readonly cardinality: "one_to_many";
|
|
74
|
+
readonly inverse_of: "divided_from";
|
|
75
|
+
readonly description: "A test suite is divided into test cases (inverse of divided_from)";
|
|
76
|
+
}, {
|
|
77
|
+
readonly name: "fulfilled_by";
|
|
78
|
+
readonly from_types: readonly ["US"];
|
|
79
|
+
readonly to_types: readonly ["FR", "NFR"];
|
|
80
|
+
readonly cardinality: "many_to_many";
|
|
81
|
+
readonly inverse_of: "fulfills";
|
|
82
|
+
readonly description: "A user story is fulfilled by functional or non-functional requirements (e.g., US-001 fulfilled by FR-001)";
|
|
83
|
+
}, {
|
|
84
|
+
readonly name: "fulfills";
|
|
85
|
+
readonly from_types: readonly ["FR", "NFR"];
|
|
86
|
+
readonly to_types: readonly ["US"];
|
|
87
|
+
readonly cardinality: "many_to_many";
|
|
88
|
+
readonly inverse_of: "fulfilled_by";
|
|
89
|
+
readonly description: "A requirement fulfills a user story (inverse of fulfilled_by)";
|
|
90
|
+
}, {
|
|
91
|
+
readonly name: "implemented_by";
|
|
92
|
+
readonly from_types: readonly ["SAD", "AD", "QA"];
|
|
93
|
+
readonly to_types: readonly ["SRC"];
|
|
94
|
+
readonly cardinality: "many_to_many";
|
|
95
|
+
readonly inverse_of: "implements";
|
|
96
|
+
readonly description: "A design or QA artifact is implemented by source code (e.g., SAD-0035 implemented by SRC-auth)";
|
|
97
|
+
}, {
|
|
98
|
+
readonly name: "implements";
|
|
99
|
+
readonly from_types: readonly ["SRC"];
|
|
100
|
+
readonly to_types: readonly ["SAD", "AD", "QA"];
|
|
101
|
+
readonly cardinality: "many_to_many";
|
|
102
|
+
readonly inverse_of: "implemented_by";
|
|
103
|
+
readonly description: "Source code implements a design or QA artifact (inverse of implemented_by)";
|
|
104
|
+
}, {
|
|
105
|
+
readonly name: "realized_by";
|
|
106
|
+
readonly from_types: readonly ["FR"];
|
|
107
|
+
readonly to_types: readonly ["FS"];
|
|
108
|
+
readonly cardinality: "many_to_many";
|
|
109
|
+
readonly inverse_of: "realizes";
|
|
110
|
+
readonly description: "A functional requirement is realized by a functional specification (e.g., FR-001 realized by FS-001)";
|
|
111
|
+
}, {
|
|
112
|
+
readonly name: "realizes";
|
|
113
|
+
readonly from_types: readonly ["FS"];
|
|
114
|
+
readonly to_types: readonly ["FR"];
|
|
115
|
+
readonly cardinality: "many_to_many";
|
|
116
|
+
readonly inverse_of: "realized_by";
|
|
117
|
+
readonly description: "A functional specification realizes a functional requirement (inverse of realized_by)";
|
|
118
|
+
}, {
|
|
119
|
+
readonly name: "verified_by";
|
|
120
|
+
readonly from_types: readonly ["FS", "NFS"];
|
|
121
|
+
readonly to_types: readonly ["TS"];
|
|
122
|
+
readonly cardinality: "many_to_many";
|
|
123
|
+
readonly inverse_of: "verifies";
|
|
124
|
+
readonly description: "A specification is verified by a test suite (e.g., FS-001 verified by TS-033)";
|
|
125
|
+
}, {
|
|
126
|
+
readonly name: "verifies";
|
|
127
|
+
readonly from_types: readonly ["TS"];
|
|
128
|
+
readonly to_types: readonly ["FS", "NFS"];
|
|
129
|
+
readonly cardinality: "many_to_many";
|
|
130
|
+
readonly inverse_of: "verified_by";
|
|
131
|
+
readonly description: "A test suite verifies a specification (inverse of verified_by)";
|
|
132
|
+
}];
|
|
133
|
+
export type BuiltinRelationType = typeof RELATION_TYPES[number];
|
|
134
|
+
//# sourceMappingURL=schema-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-types.d.ts","sourceRoot":"","sources":["../../../src/db/generated/schema-types.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBjB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// AUTO-GENERATED by scripts/generate-schema-types.js
|
|
3
|
+
// Do not edit manually. Regenerate by running the script after changing plan/project-schema.yaml.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.RELATION_TYPES = void 0;
|
|
6
|
+
/**
|
|
7
|
+
* Canonical relation types sourced from plan/project-schema.yaml (builtin:3.0).
|
|
8
|
+
* Entity types are derived dynamically from documents.type — no static registry.
|
|
9
|
+
* Total: 18 relation types.
|
|
10
|
+
*/
|
|
11
|
+
exports.RELATION_TYPES = [
|
|
12
|
+
{ name: 'contained_in', from_types: ["US", "FR", "NFR"], to_types: ["MDL"], cardinality: "many_to_one", inverse_of: "contains", description: "A requirement or feature belongs to a module (e.g., FR-001 is contained in MDL-Auth)" },
|
|
13
|
+
{ name: 'contains', from_types: ["MDL"], to_types: ["US", "FR", "NFR"], cardinality: "one_to_many", inverse_of: "contained_in", description: "A module contains requirements or features (inverse of contained_in)" },
|
|
14
|
+
{ name: 'covered_by', from_types: ["FS", "NFS"], to_types: ["SAD", "AD", "QA"], cardinality: "many_to_many", inverse_of: "covers", description: "A specification is covered by design or QA artifacts (e.g., FS-001 is covered by SAD-0035)" },
|
|
15
|
+
{ name: 'covers', from_types: ["SAD", "AD", "QA"], to_types: ["FS", "NFS"], cardinality: "many_to_many", inverse_of: "covered_by", description: "A design or QA artifact covers a specification (inverse of covered_by)" },
|
|
16
|
+
{ name: 'decomposed_to', from_types: ["SAD"], to_types: ["AD", "QA"], cardinality: "one_to_many", inverse_of: "decomposes", description: "A SAD decomposes into AD and QA artifacts (e.g., SAD-0035 decomposes to AD-0035, QA-SAD-0035)" },
|
|
17
|
+
{ name: 'decomposes', from_types: ["AD", "QA"], to_types: ["SAD"], cardinality: "many_to_one", inverse_of: "decomposed_to", description: "An AD or QA artifact decomposes from a SAD (inverse of decomposed_to)" },
|
|
18
|
+
{ name: 'depended_on_by', from_types: ["MDL"], to_types: ["MDL"], cardinality: "many_to_many", inverse_of: "depends_on", description: "A module is depended on by another module (inverse of depends_on)" },
|
|
19
|
+
{ name: 'depends_on', from_types: ["MDL"], to_types: ["MDL"], cardinality: "many_to_many", inverse_of: "depended_on_by", description: "A module depends on another module (e.g., MDL-Auth depends on MDL-User)" },
|
|
20
|
+
{ name: 'divided_from', from_types: ["TC"], to_types: ["TS"], cardinality: "many_to_one", inverse_of: "divided_into", description: "A test case is divided from a test suite (e.g., TC-0711 divided from TS-033)" },
|
|
21
|
+
{ name: 'divided_into', from_types: ["TS"], to_types: ["TC"], cardinality: "one_to_many", inverse_of: "divided_from", description: "A test suite is divided into test cases (inverse of divided_from)" },
|
|
22
|
+
{ name: 'fulfilled_by', from_types: ["US"], to_types: ["FR", "NFR"], cardinality: "many_to_many", inverse_of: "fulfills", description: "A user story is fulfilled by functional or non-functional requirements (e.g., US-001 fulfilled by FR-001)" },
|
|
23
|
+
{ name: 'fulfills', from_types: ["FR", "NFR"], to_types: ["US"], cardinality: "many_to_many", inverse_of: "fulfilled_by", description: "A requirement fulfills a user story (inverse of fulfilled_by)" },
|
|
24
|
+
{ name: 'implemented_by', from_types: ["SAD", "AD", "QA"], to_types: ["SRC"], cardinality: "many_to_many", inverse_of: "implements", description: "A design or QA artifact is implemented by source code (e.g., SAD-0035 implemented by SRC-auth)" },
|
|
25
|
+
{ name: 'implements', from_types: ["SRC"], to_types: ["SAD", "AD", "QA"], cardinality: "many_to_many", inverse_of: "implemented_by", description: "Source code implements a design or QA artifact (inverse of implemented_by)" },
|
|
26
|
+
{ name: 'realized_by', from_types: ["FR"], to_types: ["FS"], cardinality: "many_to_many", inverse_of: "realizes", description: "A functional requirement is realized by a functional specification (e.g., FR-001 realized by FS-001)" },
|
|
27
|
+
{ name: 'realizes', from_types: ["FS"], to_types: ["FR"], cardinality: "many_to_many", inverse_of: "realized_by", description: "A functional specification realizes a functional requirement (inverse of realized_by)" },
|
|
28
|
+
{ name: 'verified_by', from_types: ["FS", "NFS"], to_types: ["TS"], cardinality: "many_to_many", inverse_of: "verifies", description: "A specification is verified by a test suite (e.g., FS-001 verified by TS-033)" },
|
|
29
|
+
{ name: 'verifies', from_types: ["TS"], to_types: ["FS", "NFS"], cardinality: "many_to_many", inverse_of: "verified_by", description: "A test suite verifies a specification (inverse of verified_by)" }
|
|
30
|
+
];
|
|
31
|
+
//# sourceMappingURL=schema-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-types.js","sourceRoot":"","sources":["../../../src/db/generated/schema-types.ts"],"names":[],"mappings":"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"}
|