@soddong/agentic-contract-validation 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +157 -0
  3. package/dist/database.d.ts +17 -0
  4. package/dist/database.d.ts.map +1 -0
  5. package/dist/database.js +76 -0
  6. package/dist/database.js.map +1 -0
  7. package/dist/index.d.ts +67 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +67 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/registry.d.ts +21 -0
  12. package/dist/registry.d.ts.map +1 -0
  13. package/dist/registry.js +173 -0
  14. package/dist/registry.js.map +1 -0
  15. package/dist/seed-apply.d.ts +22 -0
  16. package/dist/seed-apply.d.ts.map +1 -0
  17. package/dist/seed-apply.js +198 -0
  18. package/dist/seed-apply.js.map +1 -0
  19. package/docs/build.md +25 -0
  20. package/docs/configuration.md +18 -0
  21. package/docs/delivery.md +9 -0
  22. package/docs/operations.md +7 -0
  23. package/docs/publishing.md +11 -0
  24. package/docs/schema/generated/README.md +22 -0
  25. package/docs/schema/generated/schema.json +563 -0
  26. package/docs/schema/generated/schema.mmd +48 -0
  27. package/docs/schema/generated/schema.svg +83 -0
  28. package/docs/schema/generated/validation_contract_profiles.md +72 -0
  29. package/docs/schema/generated/validation_contract_profiles.svg +71 -0
  30. package/docs/schema/generated/validation_contract_provider_manifests.md +62 -0
  31. package/docs/schema/generated/validation_contract_provider_manifests.svg +49 -0
  32. package/docs/schema/generated/validation_contract_rules.md +91 -0
  33. package/docs/schema/generated/validation_contract_rules.svg +52 -0
  34. package/docs/schema/generated/validation_contract_schema_migrations.md +47 -0
  35. package/docs/schema/generated/validation_contract_schema_migrations.svg +27 -0
  36. package/docs/usage.md +55 -0
  37. package/package.json +27 -0
  38. package/src/database/migrations/0001_validation_contract_registry.sql +78 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0
4
+
5
+ - Validation provider/profile/rule registry SQLite schema를 추가한다.
6
+ - `ValidationContractRegistry`를 추가해 provider manifest와 validation profile을 idempotent하게 등록할 수 있게 한다.
7
+ - `validationProfiles` seed section을 처리하는 `applyAgenticSeed()` handler를 추가한다.
8
+ - seed의 `NAMING`, `REFERENCE` validation type을 각각 `POLICY`, `REFERENCE_INTEGRITY`로 정규화하고 원본 값을 metadata에 보존한다.
9
+ - registry database 초기화 helper를 추가한다.
10
+
11
+ ## 0.1.0
12
+
13
+ - `@soddong/agentic-contract-validation` package skeleton을 추가한다.
14
+ - Validation severity/type/execution mode 공통 code를 추가한다.
15
+ - `ValidationRuleContract`, `ValidationProfileContract`, `ValidationProviderManifest`를 추가한다.
16
+ - `ValidationResultReference`를 추가한다.
17
+ - contract definition helper와 code guard helper를 추가한다.
package/README.md ADDED
@@ -0,0 +1,157 @@
1
+ # @soddong/agentic-contract-validation
2
+
3
+ `@soddong/agentic-contract-validation`은 Agentic Platform의 공통 validation contract 패키지입니다.
4
+
5
+ 이 패키지는 검증 실행 엔진이 아니라, domain module과 validation capability가 함께 사용하는 rule/profile/provider manifest 타입, 공통 code, profile registry를 제공합니다.
6
+
7
+ ## 현재 범위
8
+
9
+ | 구분 | 상태 |
10
+ | --- | --- |
11
+ | 패키지 skeleton | 포함 |
12
+ | build/typecheck | 포함 |
13
+ | validation severity code | 포함 |
14
+ | validation type code | 포함 |
15
+ | validation execution mode code | 포함 |
16
+ | rule/profile/provider manifest contract | 포함 |
17
+ | validation provider/profile/rule registry | 포함 |
18
+ | `validationProfiles` seed apply handler | 포함 |
19
+ | result reference contract | 포함 |
20
+ | validator 실행 엔진 | 제외 |
21
+ | validation result 저장 | 제외 |
22
+ | report rendering | 제외 |
23
+ | waiver/exception 승인 | 제외 |
24
+ | CLI | 1차 구현 제외 |
25
+ | Adapter | 1차 구현 제외 |
26
+
27
+ ## 책임
28
+
29
+ ```text
30
+ @soddong/agentic-contract-validation
31
+ - ValidationRuleContract
32
+ - ValidationProfileContract
33
+ - ValidationProviderManifest
34
+ - ValidationSeverityCode
35
+ - ValidationTypeCode
36
+ - ValidationExecutionModeCode
37
+ - ValidationContractRegistry
38
+ - applyAgenticSeed(validationProfiles)
39
+ - ValidationResultReference
40
+ ```
41
+
42
+ ## 비책임
43
+
44
+ | 제외 항목 | 담당 후보 |
45
+ | --- | --- |
46
+ | validator runner | `@soddong/agentic-capability-validation` |
47
+ | validation run/result 저장 | `@soddong/agentic-capability-validation` |
48
+ | artifact instance 상태 연결 | `@soddong/agentic-domain-artifact` |
49
+ | document block 조회 | `@soddong/agentic-domain-document` |
50
+ | LLM 평가 context 조립 | `@soddong/agentic-capability-agent-client`, `@soddong/agentic-runtime` |
51
+
52
+ ## 기본 API 예시
53
+
54
+ ```ts
55
+ import {
56
+ defineValidationProfile,
57
+ defineValidationProviderManifest,
58
+ defineValidationRule,
59
+ getValidationContractPackageInfo
60
+ } from "@soddong/agentic-contract-validation";
61
+
62
+ console.log(getValidationContractPackageInfo());
63
+
64
+ const rule = defineValidationRule({
65
+ ruleId: "ARTIFACT_STANDARD.TABLE.REQUIRED_COLUMNS",
66
+ providerModule: "@soddong/agentic-domain-artifact-standard",
67
+ validationTypeCode: "SCHEMA",
68
+ executionModeCode: "AUTOMATED",
69
+ severityCode: "ERROR",
70
+ appliesToTypeCode: "TABLE_SCHEMA",
71
+ appliesToRef: "business_process_definition.table.l4_processes",
72
+ parameters: {
73
+ requiredColumns: ["sequence_no", "process_id", "process_name", "purpose"]
74
+ },
75
+ message: "필수 table column이 누락되었습니다.",
76
+ remediation: "산출물 표준의 table schema에 맞게 누락 column을 추가하십시오."
77
+ });
78
+
79
+ const profile = defineValidationProfile({
80
+ profileId: "business_process_definition.default",
81
+ providerModule: "@soddong/agentic-domain-artifact-standard",
82
+ targetDomain: "artifact-standard",
83
+ rules: [rule]
84
+ });
85
+
86
+ const manifest = defineValidationProviderManifest({
87
+ providerId: "agentic-domain-artifact-standard.validation",
88
+ providerModule: "@soddong/agentic-domain-artifact-standard",
89
+ version: "0.2.0",
90
+ profiles: [profile]
91
+ });
92
+
93
+ console.log(manifest);
94
+ ```
95
+
96
+ ## Registry 및 Seed Apply 예시
97
+
98
+ `validationProfiles` seed section은 provider manifest와 profile/rule registry로 저장할 수 있습니다.
99
+
100
+ ```ts
101
+ import {
102
+ applyAgenticSeed,
103
+ initializeValidationContractDatabase,
104
+ openValidationContractDatabase,
105
+ ValidationContractRegistry
106
+ } from "@soddong/agentic-contract-validation";
107
+
108
+ initializeValidationContractDatabase();
109
+
110
+ await applyAgenticSeed({
111
+ sourcePackageName: "@soddong/agentic-methodology-ai-agent-sdlc",
112
+ sourcePackageVersion: "0.2.0",
113
+ bundleCode: "ai-agent-sdlc-build-planning",
114
+ bundleVersion: "0.2.0",
115
+ sourceSection: "validationProfiles",
116
+ targetOperation: "register_validation_profiles",
117
+ mode: "apply",
118
+ itemPayload: [
119
+ {
120
+ profileId: "ai_agent_sdlc.build_planning_seed_structure",
121
+ providerModule: "@soddong/agentic-methodology-ai-agent-sdlc",
122
+ targetDomain: "methodology",
123
+ rules: [
124
+ {
125
+ ruleId: "AI_AGENT_SDLC.BUILD_PLANNING.FOUR_STAGES_REQUIRED",
126
+ validationTypeCode: "STRUCTURE",
127
+ executionModeCode: "AUTOMATED",
128
+ severityCode: "ERROR",
129
+ appliesToTypeCode: "stage_seed",
130
+ message: "Build Planning seed must contain required stages."
131
+ }
132
+ ]
133
+ }
134
+ ]
135
+ });
136
+
137
+ const db = openValidationContractDatabase();
138
+ const registry = new ValidationContractRegistry(db);
139
+ console.log(registry.listProviderManifests());
140
+ db.close();
141
+ ```
142
+
143
+ Seed에서 `NAMING`, `REFERENCE` 같은 legacy type이 들어오면 각각 `POLICY`, `REFERENCE_INTEGRITY`로 정규화하고 원본 값은 rule metadata에 보존합니다.
144
+
145
+ ## 의존성 방향
146
+
147
+ ```text
148
+ @soddong/agentic-contract-validation
149
+
150
+ ├─ @soddong/agentic-domain-document
151
+ ├─ @soddong/agentic-domain-artifact-standard
152
+ ├─ @soddong/agentic-domain-methodology
153
+ ├─ @soddong/agentic-domain-artifact
154
+ └─ @soddong/agentic-capability-validation
155
+ ```
156
+
157
+ Domain package는 validation 실행 엔진이 아니라 contract package를 의존합니다.
@@ -0,0 +1,17 @@
1
+ import Database from "better-sqlite3";
2
+ export interface ValidationContractDatabaseOptions {
3
+ readonly projectRoot?: string;
4
+ readonly databasePath?: string;
5
+ readonly applyMigration?: boolean;
6
+ }
7
+ export interface ValidationContractDatabaseInitResult {
8
+ readonly databasePath: string;
9
+ readonly created: boolean;
10
+ readonly tables: string[];
11
+ }
12
+ export declare function resolveValidationContractDatabasePath(options?: ValidationContractDatabaseOptions): string;
13
+ export declare function listValidationContractTables(db: Database.Database): string[];
14
+ export declare function applyValidationContractRegistryMigration(db: Database.Database): void;
15
+ export declare function openValidationContractDatabase(options?: ValidationContractDatabaseOptions): Database.Database;
16
+ export declare function initializeValidationContractDatabase(options?: ValidationContractDatabaseOptions): ValidationContractDatabaseInitResult;
17
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC3B;AAuBD,wBAAgB,qCAAqC,CAAC,OAAO,GAAE,iCAAsC,GAAG,MAAM,CAiB7G;AAOD,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,EAAE,CAY5E;AAED,wBAAgB,wCAAwC,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAEpF;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,iCAAsC,GAC9C,QAAQ,CAAC,QAAQ,CAkBnB;AAED,wBAAgB,oCAAoC,CAClD,OAAO,GAAE,iCAAsC,GAC9C,oCAAoC,CActC"}
@@ -0,0 +1,76 @@
1
+ import Database from "better-sqlite3";
2
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
3
+ import { dirname, isAbsolute, join } from "node:path";
4
+ const DEFAULT_DATABASE_PATH = ".agentic/platform.sqlite";
5
+ function readProjectConfig(projectRoot) {
6
+ const configPath = join(projectRoot, "agentic.config.json");
7
+ if (!existsSync(configPath)) {
8
+ return {};
9
+ }
10
+ return JSON.parse(readFileSync(configPath, "utf8"));
11
+ }
12
+ export function resolveValidationContractDatabasePath(options = {}) {
13
+ if (options.databasePath !== undefined) {
14
+ return isAbsolute(options.databasePath)
15
+ ? options.databasePath
16
+ : join(options.projectRoot ?? process.cwd(), options.databasePath);
17
+ }
18
+ const projectRoot = options.projectRoot ?? process.cwd();
19
+ const config = readProjectConfig(projectRoot);
20
+ const database = config.runtime?.database;
21
+ if (database?.type !== undefined && database.type !== "sqlite") {
22
+ throw new Error(`Unsupported validation contract database type: ${database.type}`);
23
+ }
24
+ const configuredPath = database?.path ?? DEFAULT_DATABASE_PATH;
25
+ return isAbsolute(configuredPath) ? configuredPath : join(projectRoot, configuredPath);
26
+ }
27
+ function readValidationContractRegistryMigration() {
28
+ const migrationUrl = new URL("../src/database/migrations/0001_validation_contract_registry.sql", import.meta.url);
29
+ return readFileSync(migrationUrl, "utf8");
30
+ }
31
+ export function listValidationContractTables(db) {
32
+ const rows = db
33
+ .prepare(`SELECT name
34
+ FROM sqlite_master
35
+ WHERE type = 'table'
36
+ AND name LIKE 'validation_contract_%'
37
+ ORDER BY name`)
38
+ .all();
39
+ return rows.map((row) => row.name);
40
+ }
41
+ export function applyValidationContractRegistryMigration(db) {
42
+ db.exec(readValidationContractRegistryMigration());
43
+ }
44
+ export function openValidationContractDatabase(options = {}) {
45
+ const databasePath = resolveValidationContractDatabasePath(options);
46
+ mkdirSync(dirname(databasePath), { recursive: true });
47
+ const db = new Database(databasePath);
48
+ try {
49
+ db.pragma("journal_mode = WAL");
50
+ db.pragma("foreign_keys = ON");
51
+ if (options.applyMigration !== false) {
52
+ applyValidationContractRegistryMigration(db);
53
+ }
54
+ return db;
55
+ }
56
+ catch (error) {
57
+ db.close();
58
+ throw error;
59
+ }
60
+ }
61
+ export function initializeValidationContractDatabase(options = {}) {
62
+ const databasePath = resolveValidationContractDatabasePath(options);
63
+ const created = !existsSync(databasePath);
64
+ const db = openValidationContractDatabase(options);
65
+ try {
66
+ return {
67
+ databasePath,
68
+ created,
69
+ tables: listValidationContractTables(db)
70
+ };
71
+ }
72
+ finally {
73
+ db.close();
74
+ }
75
+ }
76
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export declare const agenticContractValidationPackage: {
2
+ readonly name: "@soddong/agentic-contract-validation";
3
+ readonly version: "0.2.0";
4
+ readonly layer: "contract";
5
+ readonly cli: "not-provided";
6
+ readonly adapter: "not-provided";
7
+ };
8
+ export interface ValidationContractPackageInfo {
9
+ readonly name: "@soddong/agentic-contract-validation";
10
+ readonly version: "0.2.0";
11
+ readonly layer: "contract";
12
+ readonly cli: "not-provided";
13
+ readonly adapter: "not-provided";
14
+ }
15
+ export declare function getValidationContractPackageInfo(): ValidationContractPackageInfo;
16
+ export declare const validationSeverityCodes: readonly ["ERROR", "WARNING", "INFO"];
17
+ export type ValidationSeverityCode = (typeof validationSeverityCodes)[number];
18
+ export declare const validationTypeCodes: readonly ["STRUCTURE", "SCHEMA", "REFERENCE_INTEGRITY", "POLICY", "CONTENT_RULE", "QUALITY_CHECKLIST", "RUBRIC", "EXAMPLE_BASED_REVIEW"];
19
+ export type ValidationTypeCode = (typeof validationTypeCodes)[number];
20
+ export declare const validationExecutionModeCodes: readonly ["AUTOMATED", "HUMAN_REVIEW", "LLM_EVALUATION", "HYBRID"];
21
+ export type ValidationExecutionModeCode = (typeof validationExecutionModeCodes)[number];
22
+ export interface ValidationRuleContract {
23
+ readonly ruleId: string;
24
+ readonly providerModule: string;
25
+ readonly validationTypeCode: ValidationTypeCode;
26
+ readonly executionModeCode: ValidationExecutionModeCode;
27
+ readonly severityCode: ValidationSeverityCode;
28
+ readonly appliesToTypeCode: string;
29
+ readonly appliesToRef?: string;
30
+ readonly sourceComponentRef?: string;
31
+ readonly parameters?: Readonly<Record<string, unknown>>;
32
+ readonly message: string;
33
+ readonly remediation?: string;
34
+ readonly metadata?: Readonly<Record<string, unknown>>;
35
+ }
36
+ export interface ValidationProfileContract {
37
+ readonly profileId: string;
38
+ readonly providerModule: string;
39
+ readonly targetDomain: string;
40
+ readonly rules: readonly ValidationRuleContract[];
41
+ readonly metadata?: Readonly<Record<string, unknown>>;
42
+ }
43
+ export interface ValidationProviderManifest {
44
+ readonly providerId: string;
45
+ readonly providerModule: string;
46
+ readonly version: string;
47
+ readonly profiles: readonly ValidationProfileContract[];
48
+ readonly metadata?: Readonly<Record<string, unknown>>;
49
+ }
50
+ export interface ValidationResultReference {
51
+ readonly validationRunId?: string;
52
+ readonly validationResultId?: string;
53
+ readonly targetTypeCode: string;
54
+ readonly targetRef: string;
55
+ readonly statusCode: string;
56
+ readonly summary?: Readonly<Record<string, unknown>>;
57
+ }
58
+ export declare function isValidationSeverityCode(value: string): value is ValidationSeverityCode;
59
+ export declare function isValidationTypeCode(value: string): value is ValidationTypeCode;
60
+ export declare function isValidationExecutionModeCode(value: string): value is ValidationExecutionModeCode;
61
+ export declare function defineValidationRule(rule: ValidationRuleContract): ValidationRuleContract;
62
+ export declare function defineValidationProfile(profile: ValidationProfileContract): ValidationProfileContract;
63
+ export declare function defineValidationProviderManifest(manifest: ValidationProviderManifest): ValidationProviderManifest;
64
+ export { applyValidationContractRegistryMigration, initializeValidationContractDatabase, listValidationContractTables, openValidationContractDatabase, resolveValidationContractDatabasePath, type ValidationContractDatabaseInitResult, type ValidationContractDatabaseOptions } from "./database.js";
65
+ export { ValidationContractRegistry, type ValidationProfileRegistrationInput, type ValidationProfileRegistrationResult } from "./registry.js";
66
+ export { applyAgenticSeed, type AgenticSeedApplyInput, type AgenticSeedApplyResult } from "./seed-apply.js";
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,67 @@
1
+ export const agenticContractValidationPackage = {
2
+ name: "@soddong/agentic-contract-validation",
3
+ version: "0.2.0",
4
+ layer: "contract",
5
+ cli: "not-provided",
6
+ adapter: "not-provided"
7
+ };
8
+ export function getValidationContractPackageInfo() {
9
+ return agenticContractValidationPackage;
10
+ }
11
+ export const validationSeverityCodes = ["ERROR", "WARNING", "INFO"];
12
+ export const validationTypeCodes = [
13
+ "STRUCTURE",
14
+ "SCHEMA",
15
+ "REFERENCE_INTEGRITY",
16
+ "POLICY",
17
+ "CONTENT_RULE",
18
+ "QUALITY_CHECKLIST",
19
+ "RUBRIC",
20
+ "EXAMPLE_BASED_REVIEW"
21
+ ];
22
+ export const validationExecutionModeCodes = [
23
+ "AUTOMATED",
24
+ "HUMAN_REVIEW",
25
+ "LLM_EVALUATION",
26
+ "HYBRID"
27
+ ];
28
+ function includesCode(codes, value) {
29
+ return codes.includes(value);
30
+ }
31
+ export function isValidationSeverityCode(value) {
32
+ return includesCode(validationSeverityCodes, value);
33
+ }
34
+ export function isValidationTypeCode(value) {
35
+ return includesCode(validationTypeCodes, value);
36
+ }
37
+ export function isValidationExecutionModeCode(value) {
38
+ return includesCode(validationExecutionModeCodes, value);
39
+ }
40
+ export function defineValidationRule(rule) {
41
+ assertNonEmpty(rule.ruleId, "ruleId");
42
+ assertNonEmpty(rule.providerModule, "providerModule");
43
+ assertNonEmpty(rule.appliesToTypeCode, "appliesToTypeCode");
44
+ assertNonEmpty(rule.message, "message");
45
+ return rule;
46
+ }
47
+ export function defineValidationProfile(profile) {
48
+ assertNonEmpty(profile.profileId, "profileId");
49
+ assertNonEmpty(profile.providerModule, "providerModule");
50
+ assertNonEmpty(profile.targetDomain, "targetDomain");
51
+ return profile;
52
+ }
53
+ export function defineValidationProviderManifest(manifest) {
54
+ assertNonEmpty(manifest.providerId, "providerId");
55
+ assertNonEmpty(manifest.providerModule, "providerModule");
56
+ assertNonEmpty(manifest.version, "version");
57
+ return manifest;
58
+ }
59
+ function assertNonEmpty(value, fieldName) {
60
+ if (value.trim().length === 0) {
61
+ throw new Error(`${fieldName} must not be empty`);
62
+ }
63
+ }
64
+ export { applyValidationContractRegistryMigration, initializeValidationContractDatabase, listValidationContractTables, openValidationContractDatabase, resolveValidationContractDatabasePath } from "./database.js";
65
+ export { ValidationContractRegistry } from "./registry.js";
66
+ export { applyAgenticSeed } from "./seed-apply.js";
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,IAAI,EAAE,sCAAsC;IAC5C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,cAAc;IACnB,OAAO,EAAE,cAAc;CACf,CAAC;AAUX,MAAM,UAAU,gCAAgC;IAC9C,OAAO,gCAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAI7E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW;IACX,QAAQ;IACR,qBAAqB;IACrB,QAAQ;IACR,cAAc;IACd,mBAAmB;IACnB,QAAQ;IACR,sBAAsB;CACd,CAAC;AAIX,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,WAAW;IACX,cAAc;IACd,gBAAgB;IAChB,QAAQ;CACA,CAAC;AA4CX,SAAS,YAAY,CAAoC,KAAQ,EAAE,KAAa;IAC9E,OAAQ,KAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,YAAY,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,YAAY,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,YAAY,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA4B;IAC/D,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACtD,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAC5D,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAkC;IACxE,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/C,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACzD,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,QAAoC;IAEpC,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAClD,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAC1D,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,SAAiB;IACtD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,OAAO,EACL,wCAAwC,EACxC,oCAAoC,EACpC,4BAA4B,EAC5B,8BAA8B,EAC9B,qCAAqC,EAGtC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,EAG3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAA2D,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { ValidationProfileContract, ValidationProviderManifest } from "./index.js";
3
+ export interface ValidationProfileRegistrationInput {
4
+ readonly providerId?: string;
5
+ readonly providerVersion: string;
6
+ readonly profile: ValidationProfileContract;
7
+ readonly metadata?: Readonly<Record<string, unknown>>;
8
+ }
9
+ export interface ValidationProfileRegistrationResult {
10
+ readonly status: "created" | "skipped";
11
+ readonly providerManifest: ValidationProviderManifest;
12
+ }
13
+ export declare class ValidationContractRegistry {
14
+ private readonly db;
15
+ constructor(db: Database.Database);
16
+ registerValidationProfile(input: ValidationProfileRegistrationInput): ValidationProfileRegistrationResult;
17
+ listProviderManifests(): ValidationProviderManifest[];
18
+ getProviderManifest(providerIdValue: string, version: string): ValidationProviderManifest;
19
+ private ensureProviderManifest;
20
+ }
21
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;CACvD;AAkHD,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD,yBAAyB,CAAC,KAAK,EAAE,kCAAkC,GAAG,mCAAmC;IA6EzG,qBAAqB,IAAI,0BAA0B,EAAE;IAYrD,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,0BAA0B;IAiBzF,OAAO,CAAC,sBAAsB;CA8B/B"}
@@ -0,0 +1,173 @@
1
+ import { randomUUID } from "node:crypto";
2
+ function jsonValue(value) {
3
+ return value === undefined || value === null ? null : JSON.stringify(value);
4
+ }
5
+ function parseJson(value) {
6
+ if (typeof value !== "string" || value.length === 0) {
7
+ return undefined;
8
+ }
9
+ return JSON.parse(value);
10
+ }
11
+ function optionalString(value) {
12
+ return typeof value === "string" ? value : undefined;
13
+ }
14
+ function providerId(providerModule) {
15
+ return `${providerModule}.validation`;
16
+ }
17
+ function assertNonEmpty(value, fieldName) {
18
+ if (value.trim().length === 0) {
19
+ throw new Error(`${fieldName} must not be empty`);
20
+ }
21
+ }
22
+ function defineRule(rule) {
23
+ assertNonEmpty(rule.ruleId, "ruleId");
24
+ assertNonEmpty(rule.providerModule, "providerModule");
25
+ assertNonEmpty(rule.appliesToTypeCode, "appliesToTypeCode");
26
+ assertNonEmpty(rule.message, "message");
27
+ return rule;
28
+ }
29
+ function defineProfile(profile) {
30
+ assertNonEmpty(profile.profileId, "profileId");
31
+ assertNonEmpty(profile.providerModule, "providerModule");
32
+ assertNonEmpty(profile.targetDomain, "targetDomain");
33
+ return profile;
34
+ }
35
+ function defineProviderManifest(manifest) {
36
+ assertNonEmpty(manifest.providerId, "providerId");
37
+ assertNonEmpty(manifest.providerModule, "providerModule");
38
+ assertNonEmpty(manifest.version, "version");
39
+ return manifest;
40
+ }
41
+ function providerRowToManifest(db, row) {
42
+ const providerManifestId = row.provider_manifest_id;
43
+ return defineProviderManifest({
44
+ providerId: row.provider_id,
45
+ providerModule: row.provider_module,
46
+ version: row.provider_version,
47
+ profiles: listProfilesByProviderManifestId(db, providerManifestId),
48
+ metadata: parseJson(row.metadata_json)
49
+ });
50
+ }
51
+ function ruleFromRow(row) {
52
+ return defineRule({
53
+ ruleId: row.rule_id,
54
+ providerModule: row.provider_module,
55
+ validationTypeCode: row.validation_type_code,
56
+ executionModeCode: row.execution_mode_code,
57
+ severityCode: row.severity_code,
58
+ appliesToTypeCode: row.applies_to_type_code,
59
+ appliesToRef: optionalString(row.applies_to_ref),
60
+ sourceComponentRef: optionalString(row.source_component_ref),
61
+ parameters: parseJson(row.parameters_json),
62
+ message: row.message,
63
+ remediation: optionalString(row.remediation),
64
+ metadata: parseJson(row.metadata_json)
65
+ });
66
+ }
67
+ function profileFromRow(db, row) {
68
+ const validationProfileId = row.validation_profile_id;
69
+ const ruleRows = db
70
+ .prepare(`SELECT *
71
+ FROM validation_contract_rules
72
+ WHERE validation_profile_id = ?
73
+ ORDER BY sort_order, rule_id`)
74
+ .all(validationProfileId);
75
+ return defineProfile({
76
+ profileId: row.profile_id,
77
+ providerModule: row.provider_module,
78
+ targetDomain: row.target_domain,
79
+ rules: ruleRows.map(ruleFromRow),
80
+ metadata: parseJson(row.metadata_json)
81
+ });
82
+ }
83
+ function listProfilesByProviderManifestId(db, providerManifestId) {
84
+ const rows = db
85
+ .prepare(`SELECT *
86
+ FROM validation_contract_profiles
87
+ WHERE provider_manifest_id = ?
88
+ ORDER BY profile_id`)
89
+ .all(providerManifestId);
90
+ return rows.map((row) => profileFromRow(db, row));
91
+ }
92
+ export class ValidationContractRegistry {
93
+ db;
94
+ constructor(db) {
95
+ this.db = db;
96
+ }
97
+ registerValidationProfile(input) {
98
+ const profile = defineProfile(input.profile);
99
+ const resolvedProviderId = input.providerId ?? providerId(profile.providerModule);
100
+ const providerManifestId = this.ensureProviderManifest(resolvedProviderId, profile.providerModule, input.providerVersion, input.metadata);
101
+ const existingProfile = this.db
102
+ .prepare(`SELECT validation_profile_id
103
+ FROM validation_contract_profiles
104
+ WHERE provider_manifest_id = ?
105
+ AND profile_id = ?`)
106
+ .get(providerManifestId, profile.profileId);
107
+ if (existingProfile !== undefined) {
108
+ return {
109
+ status: "skipped",
110
+ providerManifest: this.getProviderManifest(resolvedProviderId, input.providerVersion)
111
+ };
112
+ }
113
+ const validationProfileId = randomUUID();
114
+ this.db
115
+ .prepare(`INSERT INTO validation_contract_profiles
116
+ (validation_profile_id, provider_manifest_id, profile_id, provider_module, target_domain, metadata_json)
117
+ VALUES (?, ?, ?, ?, ?, ?)`)
118
+ .run(validationProfileId, providerManifestId, profile.profileId, profile.providerModule, profile.targetDomain, jsonValue(profile.metadata));
119
+ profile.rules.forEach((rule, index) => {
120
+ const definedRule = defineRule(rule);
121
+ this.db
122
+ .prepare(`INSERT INTO validation_contract_rules
123
+ (validation_rule_id, validation_profile_id, rule_id, provider_module, validation_type_code,
124
+ execution_mode_code, severity_code, applies_to_type_code, applies_to_ref, source_component_ref,
125
+ parameters_json, message, remediation, sort_order, metadata_json)
126
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
127
+ .run(randomUUID(), validationProfileId, definedRule.ruleId, definedRule.providerModule, definedRule.validationTypeCode, definedRule.executionModeCode, definedRule.severityCode, definedRule.appliesToTypeCode, definedRule.appliesToRef ?? null, definedRule.sourceComponentRef ?? null, jsonValue(definedRule.parameters), definedRule.message, definedRule.remediation ?? null, index * 10, jsonValue(definedRule.metadata));
128
+ });
129
+ return {
130
+ status: "created",
131
+ providerManifest: this.getProviderManifest(resolvedProviderId, input.providerVersion)
132
+ };
133
+ }
134
+ listProviderManifests() {
135
+ const rows = this.db
136
+ .prepare(`SELECT *
137
+ FROM validation_contract_provider_manifests
138
+ ORDER BY provider_id, provider_version`)
139
+ .all();
140
+ return rows.map((row) => providerRowToManifest(this.db, row));
141
+ }
142
+ getProviderManifest(providerIdValue, version) {
143
+ const row = this.db
144
+ .prepare(`SELECT *
145
+ FROM validation_contract_provider_manifests
146
+ WHERE provider_id = ?
147
+ AND provider_version = ?`)
148
+ .get(providerIdValue, version);
149
+ if (row === undefined) {
150
+ throw new Error(`Validation provider manifest not found: ${providerIdValue}@${version}`);
151
+ }
152
+ return providerRowToManifest(this.db, row);
153
+ }
154
+ ensureProviderManifest(providerIdValue, providerModule, version, metadata) {
155
+ const existing = this.db
156
+ .prepare(`SELECT provider_manifest_id
157
+ FROM validation_contract_provider_manifests
158
+ WHERE provider_id = ?
159
+ AND provider_version = ?`)
160
+ .get(providerIdValue, version);
161
+ if (existing !== undefined) {
162
+ return existing.provider_manifest_id;
163
+ }
164
+ const providerManifestId = randomUUID();
165
+ this.db
166
+ .prepare(`INSERT INTO validation_contract_provider_manifests
167
+ (provider_manifest_id, provider_id, provider_module, provider_version, metadata_json)
168
+ VALUES (?, ?, ?, ?, ?)`)
169
+ .run(providerManifestId, providerIdValue, providerModule, version, jsonValue(metadata));
170
+ return providerManifestId;
171
+ }
172
+ }
173
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}