@contractspec/example.kb-update-pipeline 1.46.2 → 1.47.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.
@@ -1,51 +1,55 @@
1
1
  $ tsdown
2
- ℹ tsdown v0.18.4 powered by rolldown v1.0.0-beta.57
2
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
3
3
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/kb-update-pipeline/tsdown.config.js
4
- ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/kb-update-pipeline.feature.ts, src/presentations.ts, src/docs/index.ts, src/docs/kb-update-pipeline.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/index.ts, src/handlers/memory.handlers.ts, src/operations/index.ts, src/operations/pipeline.ts
4
+ ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/kb-update-pipeline.feature.ts, src/presentations.ts, src/docs/index.ts, src/docs/kb-update-pipeline.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/index.ts, src/handlers/memory.handlers.ts, src/operations/index.ts, src/operations/pipeline.ts, src/tests/operations.test-spec.ts
5
5
  ℹ target: esnext
6
6
  ℹ tsconfig: tsconfig.json
7
7
  ℹ Build start
8
- ℹ Cleaning 45 files
8
+ ℹ Cleaning 50 files
9
9
  ℹ dist/operations/pipeline.js 4.95 kB │ gzip: 1.37 kB
10
10
  ℹ dist/events.js 3.69 kB │ gzip: 0.73 kB
11
11
  ℹ dist/handlers/memory.handlers.js 3.37 kB │ gzip: 1.12 kB
12
- ℹ dist/kb-update-pipeline.feature.js 2.27 kB │ gzip: 0.64 kB
13
- ℹ dist/presentations.js 1.82 kB │ gzip: 0.61 kB
12
+ ℹ dist/kb-update-pipeline.feature.js 2.35 kB │ gzip: 0.68 kB
13
+ ℹ dist/tests/operations.test-spec.js 2.13 kB │ gzip: 0.50 kB
14
+ ℹ dist/presentations.js 1.90 kB │ gzip: 0.63 kB
14
15
  ℹ dist/entities/models.js 1.81 kB │ gzip: 0.53 kB
15
16
  ℹ dist/docs/kb-update-pipeline.docblock.js 1.49 kB │ gzip: 0.71 kB
16
17
  ℹ dist/index.js 1.44 kB │ gzip: 0.42 kB
17
- ℹ dist/example.js 0.97 kB │ gzip: 0.52 kB
18
+ ℹ dist/example.js 1.05 kB │ gzip: 0.55 kB
18
19
  ℹ dist/operations/index.js 0.31 kB │ gzip: 0.14 kB
19
20
  ℹ dist/entities/index.js 0.25 kB │ gzip: 0.13 kB
20
21
  ℹ dist/handlers/index.js 0.16 kB │ gzip: 0.10 kB
21
22
  ℹ dist/docs/index.js 0.04 kB │ gzip: 0.06 kB
22
- ℹ dist/handlers/memory.handlers.js.map 8.17 kB │ gzip: 2.35 kB
23
+ ℹ dist/handlers/memory.handlers.js.map 8.13 kB │ gzip: 2.34 kB
23
24
  ℹ dist/operations/pipeline.js.map 7.20 kB │ gzip: 1.81 kB
24
25
  ℹ dist/events.js.map 5.65 kB │ gzip: 1.04 kB
25
- ℹ dist/kb-update-pipeline.feature.js.map 3.53 kB │ gzip: 1.02 kB
26
- ℹ dist/presentations.js.map 3.02 kB │ gzip: 0.85 kB
26
+ ℹ dist/tests/operations.test-spec.js.map 3.64 kB │ gzip: 0.76 kB
27
+ ℹ dist/kb-update-pipeline.feature.js.map 3.48 kB │ gzip: 1.02 kB
28
+ ℹ dist/presentations.js.map 2.87 kB │ gzip: 0.83 kB
27
29
  ℹ dist/entities/models.js.map 2.68 kB │ gzip: 0.81 kB
28
30
  ℹ dist/docs/kb-update-pipeline.docblock.js.map 2.00 kB │ gzip: 0.89 kB
29
- ℹ dist/example.js.map 1.52 kB │ gzip: 0.75 kB
31
+ ℹ dist/example.js.map 1.51 kB │ gzip: 0.75 kB
30
32
  ℹ dist/handlers/memory.handlers.d.ts.map 0.92 kB │ gzip: 0.44 kB
31
33
  ℹ dist/events.d.ts.map 0.81 kB │ gzip: 0.33 kB
32
34
  ℹ dist/operations/pipeline.d.ts.map 0.76 kB │ gzip: 0.33 kB
33
35
  ℹ dist/entities/models.d.ts.map 0.47 kB │ gzip: 0.28 kB
34
- ℹ dist/presentations.d.ts.map 0.19 kB │ gzip: 0.16 kB
35
- ℹ dist/kb-update-pipeline.feature.d.ts.map 0.16 kB │ gzip: 0.14 kB
36
- ℹ dist/example.d.ts.map 0.12 kB │ gzip: 0.12 kB
37
- ℹ dist/operations/pipeline.d.ts 4.33 kB │ gzip: 0.58 kB
38
- ℹ dist/events.d.ts 2.54 kB │ gzip: 0.42 kB
36
+ ℹ dist/tests/operations.test-spec.d.ts.map 0.23 kB │ gzip: 0.16 kB
37
+ ℹ dist/presentations.d.ts.map 0.20 kB │ gzip: 0.15 kB
38
+ ℹ dist/kb-update-pipeline.feature.d.ts.map 0.18 kB │ gzip: 0.15 kB
39
+ ℹ dist/example.d.ts.map 0.14 kB │ gzip: 0.13 kB
40
+ ℹ dist/operations/pipeline.d.ts 4.38 kB │ gzip: 0.58 kB
41
+ ℹ dist/events.d.ts 2.52 kB │ gzip: 0.42 kB
39
42
  ℹ dist/entities/models.d.ts 2.00 kB │ gzip: 0.41 kB
40
43
  ℹ dist/handlers/memory.handlers.d.ts 1.94 kB │ gzip: 0.64 kB
41
44
  ℹ dist/index.d.ts 1.48 kB │ gzip: 0.41 kB
42
- ℹ dist/presentations.d.ts 0.41 kB │ gzip: 0.19 kB
45
+ ℹ dist/presentations.d.ts 0.52 kB │ gzip: 0.20 kB
46
+ ℹ dist/tests/operations.test-spec.d.ts 0.47 kB │ gzip: 0.22 kB
47
+ ℹ dist/kb-update-pipeline.feature.d.ts 0.32 kB │ gzip: 0.19 kB
43
48
  ℹ dist/operations/index.d.ts 0.31 kB │ gzip: 0.13 kB
44
- ℹ dist/kb-update-pipeline.feature.d.ts 0.28 kB │ gzip: 0.18 kB
45
49
  ℹ dist/handlers/index.d.ts 0.25 kB │ gzip: 0.10 kB
50
+ ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
46
51
  ℹ dist/entities/index.d.ts 0.25 kB │ gzip: 0.13 kB
47
- ℹ dist/example.d.ts 0.20 kB │ gzip: 0.16 kB
48
52
  ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
49
53
  ℹ dist/docs/kb-update-pipeline.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
50
- ℹ 41 files, total: 73.78 kB
51
- ✔ Build complete in 24148ms
54
+ ℹ 45 files, total: 80.49 kB
55
+ ✔ Build complete in 28255ms
@@ -1,54 +1,56 @@
1
-
2
- $ bun build:types && bun build:bundle
3
- $ tsc --noEmit
4
- $ tsdown
5
- ℹ tsdown v0.18.4 powered by rolldown v1.0.0-beta.57
6
- ℹ config file: /Users/tboutron/Documents/clients/lssm/monorepo-lssm/packages/contractspec/packages/examples/kb-update-pipeline/tsdown.config.js (unrun)
7
- ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/kb-update-pipeline.feature.ts, src/presentations.ts, src/docs/index.ts, src/docs/kb-update-pipeline.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/index.ts, src/handlers/memory.handlers.ts, src/operations/index.ts, src/operations/pipeline.ts
8
- ℹ target: esnext
9
- ℹ tsconfig: tsconfig.json
10
- ℹ Build start
11
- ℹ Cleaning 45 files
12
- ℹ dist/operations/pipeline.js 4.95 kB │ gzip: 1.37 kB
13
- ℹ dist/events.js 3.69 kB │ gzip: 0.73 kB
14
- ℹ dist/handlers/memory.handlers.js 3.37 kB │ gzip: 1.12 kB
15
- ℹ dist/kb-update-pipeline.feature.js 2.27 kB │ gzip: 0.64 kB
16
- ℹ dist/presentations.js 1.82 kB │ gzip: 0.61 kB
17
- ℹ dist/entities/models.js 1.81 kB │ gzip: 0.53 kB
18
- ℹ dist/docs/kb-update-pipeline.docblock.js 1.49 kB │ gzip: 0.71 kB
19
- ℹ dist/index.js 1.44 kB │ gzip: 0.42 kB
20
- ℹ dist/example.js 0.97 kB │ gzip: 0.52 kB
21
- ℹ dist/operations/index.js 0.31 kB │ gzip: 0.14 kB
22
- ℹ dist/entities/index.js 0.25 kB │ gzip: 0.13 kB
23
- ℹ dist/handlers/index.js 0.16 kB │ gzip: 0.10 kB
24
- ℹ dist/docs/index.js 0.04 kB │ gzip: 0.06 kB
25
- ℹ dist/handlers/memory.handlers.js.map 8.17 kB │ gzip: 2.35 kB
26
- ℹ dist/operations/pipeline.js.map 7.20 kB │ gzip: 1.81 kB
27
- ℹ dist/events.js.map 5.65 kB │ gzip: 1.04 kB
28
- ℹ dist/kb-update-pipeline.feature.js.map 3.53 kB │ gzip: 1.02 kB
29
- ℹ dist/presentations.js.map 3.02 kB │ gzip: 0.85 kB
30
- ℹ dist/entities/models.js.map 2.68 kB │ gzip: 0.81 kB
31
- ℹ dist/docs/kb-update-pipeline.docblock.js.map 2.00 kB │ gzip: 0.89 kB
32
- ℹ dist/example.js.map 1.52 kB │ gzip: 0.75 kB
33
- ℹ dist/handlers/memory.handlers.d.ts.map 0.92 kB │ gzip: 0.44 kB
34
- ℹ dist/events.d.ts.map 0.81 kB │ gzip: 0.33 kB
35
- ℹ dist/operations/pipeline.d.ts.map 0.76 kB │ gzip: 0.33 kB
36
- ℹ dist/entities/models.d.ts.map 0.47 kB │ gzip: 0.28 kB
37
- ℹ dist/presentations.d.ts.map 0.19 kB │ gzip: 0.16 kB
38
- ℹ dist/kb-update-pipeline.feature.d.ts.map 0.16 kB │ gzip: 0.14 kB
39
- ℹ dist/example.d.ts.map 0.12 kB │ gzip: 0.12 kB
40
- ℹ dist/operations/pipeline.d.ts 4.37 kB │ gzip: 0.58 kB
41
- ℹ dist/events.d.ts 2.52 kB │ gzip: 0.42 kB
42
- ℹ dist/entities/models.d.ts 2.00 kB │ gzip: 0.41 kB
43
- ℹ dist/handlers/memory.handlers.d.ts 1.94 kB │ gzip: 0.64 kB
44
- ℹ dist/index.d.ts 1.48 kB │ gzip: 0.41 kB
45
- ℹ dist/presentations.d.ts 0.41 kB │ gzip: 0.19 kB
46
- ℹ dist/operations/index.d.ts 0.31 kB │ gzip: 0.13 kB
47
- ℹ dist/kb-update-pipeline.feature.d.ts 0.28 kB │ gzip: 0.18 kB
48
- ℹ dist/handlers/index.d.ts 0.25 kB │ gzip: 0.10 kB
49
- ℹ dist/entities/index.d.ts 0.25 kB │ gzip: 0.13 kB
50
- ℹ dist/example.d.ts 0.20 kB │ gzip: 0.16 kB
51
- ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
52
- ℹ dist/docs/kb-update-pipeline.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
53
- ℹ 41 files, total: 73.80 kB
54
- ✔ Build complete in 7371ms
1
+ $ bun build:types && bun build:bundle
2
+ $ tsc --noEmit
3
+ $ tsdown
4
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
5
+ ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/kb-update-pipeline/tsdown.config.js
6
+ ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/kb-update-pipeline.feature.ts, src/presentations.ts, src/docs/index.ts, src/docs/kb-update-pipeline.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/index.ts, src/handlers/memory.handlers.ts, src/operations/index.ts, src/operations/pipeline.ts, src/tests/operations.test-spec.ts
7
+ ℹ target: esnext
8
+ ℹ tsconfig: tsconfig.json
9
+ ℹ Build start
10
+ ℹ dist/operations/pipeline.js 4.95 kB │ gzip: 1.37 kB
11
+ ℹ dist/events.js 3.69 kB │ gzip: 0.73 kB
12
+ ℹ dist/handlers/memory.handlers.js 3.37 kB │ gzip: 1.12 kB
13
+ ℹ dist/kb-update-pipeline.feature.js 2.35 kB │ gzip: 0.68 kB
14
+ ℹ dist/tests/operations.test-spec.js 2.13 kB │ gzip: 0.50 kB
15
+ ℹ dist/presentations.js 1.90 kB │ gzip: 0.63 kB
16
+ ℹ dist/entities/models.js 1.81 kB │ gzip: 0.53 kB
17
+ ℹ dist/docs/kb-update-pipeline.docblock.js 1.49 kB │ gzip: 0.71 kB
18
+ ℹ dist/index.js 1.44 kB │ gzip: 0.42 kB
19
+ ℹ dist/example.js 1.05 kB │ gzip: 0.55 kB
20
+ ℹ dist/operations/index.js 0.31 kB │ gzip: 0.14 kB
21
+ ℹ dist/entities/index.js 0.25 kB │ gzip: 0.13 kB
22
+ ℹ dist/handlers/index.js 0.16 kB │ gzip: 0.10 kB
23
+ ℹ dist/docs/index.js 0.04 kB │ gzip: 0.06 kB
24
+ ℹ dist/handlers/memory.handlers.js.map 8.13 kB │ gzip: 2.34 kB
25
+ ℹ dist/operations/pipeline.js.map 7.20 kB │ gzip: 1.81 kB
26
+ ℹ dist/events.js.map 5.65 kB │ gzip: 1.04 kB
27
+ ℹ dist/tests/operations.test-spec.js.map 3.64 kB │ gzip: 0.76 kB
28
+ ℹ dist/kb-update-pipeline.feature.js.map 3.48 kB │ gzip: 1.02 kB
29
+ ℹ dist/presentations.js.map 2.87 kB │ gzip: 0.83 kB
30
+ ℹ dist/entities/models.js.map 2.68 kB │ gzip: 0.81 kB
31
+ ℹ dist/docs/kb-update-pipeline.docblock.js.map 2.00 kB │ gzip: 0.89 kB
32
+ ℹ dist/example.js.map 1.51 kB │ gzip: 0.75 kB
33
+ ℹ dist/handlers/memory.handlers.d.ts.map 0.92 kB │ gzip: 0.44 kB
34
+ ℹ dist/events.d.ts.map 0.81 kB │ gzip: 0.33 kB
35
+ ℹ dist/operations/pipeline.d.ts.map 0.76 kB │ gzip: 0.33 kB
36
+ ℹ dist/entities/models.d.ts.map 0.47 kB │ gzip: 0.28 kB
37
+ ℹ dist/tests/operations.test-spec.d.ts.map 0.23 kB │ gzip: 0.16 kB
38
+ ℹ dist/presentations.d.ts.map 0.20 kB │ gzip: 0.15 kB
39
+ ℹ dist/kb-update-pipeline.feature.d.ts.map 0.18 kB │ gzip: 0.15 kB
40
+ ℹ dist/example.d.ts.map 0.14 kB │ gzip: 0.13 kB
41
+ ℹ dist/operations/pipeline.d.ts 4.38 kB │ gzip: 0.58 kB
42
+ ℹ dist/events.d.ts 2.52 kB │ gzip: 0.42 kB
43
+ ℹ dist/entities/models.d.ts 2.00 kB │ gzip: 0.41 kB
44
+ ℹ dist/handlers/memory.handlers.d.ts 1.94 kB │ gzip: 0.64 kB
45
+ ℹ dist/index.d.ts 1.48 kB │ gzip: 0.41 kB
46
+ ℹ dist/presentations.d.ts 0.52 kB │ gzip: 0.20 kB
47
+ ℹ dist/tests/operations.test-spec.d.ts 0.47 kB │ gzip: 0.22 kB
48
+ ℹ dist/kb-update-pipeline.feature.d.ts 0.32 kB │ gzip: 0.19 kB
49
+ ℹ dist/operations/index.d.ts 0.31 kB │ gzip: 0.13 kB
50
+ ℹ dist/handlers/index.d.ts 0.25 kB │ gzip: 0.10 kB
51
+ ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
52
+ ℹ dist/entities/index.d.ts 0.25 kB │ gzip: 0.13 kB
53
+ ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
54
+ ℹ dist/docs/kb-update-pipeline.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
55
+ ℹ 45 files, total: 80.49 kB
56
+ ✔ Build complete in 26275ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @contractspec/example.kb-update-pipeline
2
2
 
3
+ ## 1.47.0
4
+
5
+ ### Minor Changes
6
+
7
+ - caf8701: feat: add cli vibe command to run workflow
8
+ - c69b849: feat: add api web services (mcp & website)
9
+ - 42b8d78: feat: add cli `contractspec vibe` workflow to simplify usage
10
+ - fd38e85: feat: auto-fix contractspec issues
11
+
12
+ ### Patch Changes
13
+
14
+ - e7ded36: feat: improve stability (adding ts-morph)
15
+ - c231a8b: test: improve workspace stability
16
+ - Updated dependencies [e7ded36]
17
+ - Updated dependencies [caf8701]
18
+ - Updated dependencies [c69b849]
19
+ - Updated dependencies [c231a8b]
20
+ - Updated dependencies [42b8d78]
21
+ - Updated dependencies [fd38e85]
22
+ - @contractspec/lib.contracts@1.47.0
23
+ - @contractspec/lib.schema@1.47.0
24
+
3
25
  ## 1.46.2
4
26
 
5
27
  ### Patch Changes
@@ -1,58 +1,58 @@
1
- import * as _contractspec_lib_schema55 from "@contractspec/lib.schema";
1
+ import * as _contractspec_lib_schema18 from "@contractspec/lib.schema";
2
2
 
3
3
  //#region src/entities/models.d.ts
4
- declare const ChangeRiskLevelEnum: _contractspec_lib_schema55.EnumType<[string, string, string]>;
5
- declare const ReviewAssignedRoleEnum: _contractspec_lib_schema55.EnumType<[string, string]>;
6
- declare const ReviewDecisionEnum: _contractspec_lib_schema55.EnumType<[string, string]>;
7
- declare const ChangeCandidateModel: _contractspec_lib_schema55.SchemaModel<{
4
+ declare const ChangeRiskLevelEnum: _contractspec_lib_schema18.EnumType<[string, string, string]>;
5
+ declare const ReviewAssignedRoleEnum: _contractspec_lib_schema18.EnumType<[string, string]>;
6
+ declare const ReviewDecisionEnum: _contractspec_lib_schema18.EnumType<[string, string]>;
7
+ declare const ChangeCandidateModel: _contractspec_lib_schema18.SchemaModel<{
8
8
  id: {
9
- type: _contractspec_lib_schema55.FieldType<string, string>;
9
+ type: _contractspec_lib_schema18.FieldType<string, string>;
10
10
  isOptional: false;
11
11
  };
12
12
  sourceDocumentId: {
13
- type: _contractspec_lib_schema55.FieldType<string, string>;
13
+ type: _contractspec_lib_schema18.FieldType<string, string>;
14
14
  isOptional: false;
15
15
  };
16
16
  detectedAt: {
17
- type: _contractspec_lib_schema55.FieldType<Date, string>;
17
+ type: _contractspec_lib_schema18.FieldType<Date, string>;
18
18
  isOptional: false;
19
19
  };
20
20
  diffSummary: {
21
- type: _contractspec_lib_schema55.FieldType<string, string>;
21
+ type: _contractspec_lib_schema18.FieldType<string, string>;
22
22
  isOptional: false;
23
23
  };
24
24
  riskLevel: {
25
- type: _contractspec_lib_schema55.EnumType<[string, string, string]>;
25
+ type: _contractspec_lib_schema18.EnumType<[string, string, string]>;
26
26
  isOptional: false;
27
27
  };
28
28
  }>;
29
- declare const ReviewTaskModel: _contractspec_lib_schema55.SchemaModel<{
29
+ declare const ReviewTaskModel: _contractspec_lib_schema18.SchemaModel<{
30
30
  id: {
31
- type: _contractspec_lib_schema55.FieldType<string, string>;
31
+ type: _contractspec_lib_schema18.FieldType<string, string>;
32
32
  isOptional: false;
33
33
  };
34
34
  changeCandidateId: {
35
- type: _contractspec_lib_schema55.FieldType<string, string>;
35
+ type: _contractspec_lib_schema18.FieldType<string, string>;
36
36
  isOptional: false;
37
37
  };
38
38
  status: {
39
- type: _contractspec_lib_schema55.FieldType<string, string>;
39
+ type: _contractspec_lib_schema18.FieldType<string, string>;
40
40
  isOptional: false;
41
41
  };
42
42
  assignedRole: {
43
- type: _contractspec_lib_schema55.EnumType<[string, string]>;
43
+ type: _contractspec_lib_schema18.EnumType<[string, string]>;
44
44
  isOptional: false;
45
45
  };
46
46
  decision: {
47
- type: _contractspec_lib_schema55.EnumType<[string, string]>;
47
+ type: _contractspec_lib_schema18.EnumType<[string, string]>;
48
48
  isOptional: true;
49
49
  };
50
50
  decidedAt: {
51
- type: _contractspec_lib_schema55.FieldType<Date, string>;
51
+ type: _contractspec_lib_schema18.FieldType<Date, string>;
52
52
  isOptional: true;
53
53
  };
54
54
  decidedBy: {
55
- type: _contractspec_lib_schema55.FieldType<string, string>;
55
+ type: _contractspec_lib_schema18.FieldType<string, string>;
56
56
  isOptional: true;
57
57
  };
58
58
  }>;
package/dist/events.d.ts CHANGED
@@ -1,71 +1,71 @@
1
- import * as _contractspec_lib_contracts3 from "@contractspec/lib.contracts";
2
- import * as _contractspec_lib_schema36 from "@contractspec/lib.schema";
1
+ import * as _contractspec_lib_contracts2 from "@contractspec/lib.contracts";
2
+ import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
3
3
 
4
4
  //#region src/events.d.ts
5
- declare const KbChangeDetectedEvent: _contractspec_lib_contracts3.EventSpec<_contractspec_lib_schema36.SchemaModel<{
5
+ declare const KbChangeDetectedEvent: _contractspec_lib_contracts2.EventSpec<_contractspec_lib_schema0.SchemaModel<{
6
6
  changeCandidateId: {
7
- type: _contractspec_lib_schema36.FieldType<string, string>;
7
+ type: _contractspec_lib_schema0.FieldType<string, string>;
8
8
  isOptional: false;
9
9
  };
10
10
  sourceDocumentId: {
11
- type: _contractspec_lib_schema36.FieldType<string, string>;
11
+ type: _contractspec_lib_schema0.FieldType<string, string>;
12
12
  isOptional: false;
13
13
  };
14
14
  riskLevel: {
15
- type: _contractspec_lib_schema36.FieldType<string, string>;
15
+ type: _contractspec_lib_schema0.FieldType<string, string>;
16
16
  isOptional: false;
17
17
  };
18
18
  }>>;
19
- declare const KbChangeSummarizedEvent: _contractspec_lib_contracts3.EventSpec<_contractspec_lib_schema36.SchemaModel<{
19
+ declare const KbChangeSummarizedEvent: _contractspec_lib_contracts2.EventSpec<_contractspec_lib_schema0.SchemaModel<{
20
20
  changeCandidateId: {
21
- type: _contractspec_lib_schema36.FieldType<string, string>;
21
+ type: _contractspec_lib_schema0.FieldType<string, string>;
22
22
  isOptional: false;
23
23
  };
24
24
  summary: {
25
- type: _contractspec_lib_schema36.FieldType<string, string>;
25
+ type: _contractspec_lib_schema0.FieldType<string, string>;
26
26
  isOptional: false;
27
27
  };
28
28
  riskLevel: {
29
- type: _contractspec_lib_schema36.FieldType<string, string>;
29
+ type: _contractspec_lib_schema0.FieldType<string, string>;
30
30
  isOptional: false;
31
31
  };
32
32
  }>>;
33
- declare const KbPatchProposedEvent: _contractspec_lib_contracts3.EventSpec<_contractspec_lib_schema36.SchemaModel<{
33
+ declare const KbPatchProposedEvent: _contractspec_lib_contracts2.EventSpec<_contractspec_lib_schema0.SchemaModel<{
34
34
  changeCandidateId: {
35
- type: _contractspec_lib_schema36.FieldType<string, string>;
35
+ type: _contractspec_lib_schema0.FieldType<string, string>;
36
36
  isOptional: false;
37
37
  };
38
38
  proposedRuleVersionIds: {
39
- type: _contractspec_lib_schema36.FieldType<string, string>;
39
+ type: _contractspec_lib_schema0.FieldType<string, string>;
40
40
  isArray: true;
41
41
  isOptional: false;
42
42
  };
43
43
  }>>;
44
- declare const KbReviewRequestedEvent: _contractspec_lib_contracts3.EventSpec<_contractspec_lib_schema36.SchemaModel<{
44
+ declare const KbReviewRequestedEvent: _contractspec_lib_contracts2.EventSpec<_contractspec_lib_schema0.SchemaModel<{
45
45
  reviewTaskId: {
46
- type: _contractspec_lib_schema36.FieldType<string, string>;
46
+ type: _contractspec_lib_schema0.FieldType<string, string>;
47
47
  isOptional: false;
48
48
  };
49
49
  changeCandidateId: {
50
- type: _contractspec_lib_schema36.FieldType<string, string>;
50
+ type: _contractspec_lib_schema0.FieldType<string, string>;
51
51
  isOptional: false;
52
52
  };
53
53
  assignedRole: {
54
- type: _contractspec_lib_schema36.FieldType<string, string>;
54
+ type: _contractspec_lib_schema0.FieldType<string, string>;
55
55
  isOptional: false;
56
56
  };
57
57
  }>>;
58
- declare const KbReviewDecidedEvent: _contractspec_lib_contracts3.EventSpec<_contractspec_lib_schema36.SchemaModel<{
58
+ declare const KbReviewDecidedEvent: _contractspec_lib_contracts2.EventSpec<_contractspec_lib_schema0.SchemaModel<{
59
59
  reviewTaskId: {
60
- type: _contractspec_lib_schema36.FieldType<string, string>;
60
+ type: _contractspec_lib_schema0.FieldType<string, string>;
61
61
  isOptional: false;
62
62
  };
63
63
  decision: {
64
- type: _contractspec_lib_schema36.FieldType<string, string>;
64
+ type: _contractspec_lib_schema0.FieldType<string, string>;
65
65
  isOptional: false;
66
66
  };
67
67
  decidedBy: {
68
- type: _contractspec_lib_schema36.FieldType<string, string>;
68
+ type: _contractspec_lib_schema0.FieldType<string, string>;
69
69
  isOptional: false;
70
70
  };
71
71
  }>>;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","names":[],"sources":["../src/events.ts"],"sourcesContent":[],"mappings":";;;;cAuBa,uBAAqB,4BAAA,CAAA,qCAAA;;UAUhC,0BAAA,CAAA;;EAVW,CAAA;EAUX,gBAAA,EAAA;;;;EAVgC,SAAA,EAAA;IAAA,IAAA,sCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAyBrB,UAAA,EAAA,KAAA;EAUX,CAAA;;cAVW,yBAAuB,4BAAA,CAAA,qCAAA;;IAAA,IAAA,EAUlC,0BAAA,CAAA,SAVkC,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EA4BvB,CAAA;EAUX,OAAA,EAAA;;;EAV+B,CAAA;EAAA,SAAA,EAAA;IAyBpB,IAAA,sCAUX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;cAnCW,oBAyBsB,EAzBF,4BAAA,CAAA,SAyBE,4BAzBF,WAyBE,CAAA;EAAA,iBAAA,EAAA;IAAA,IAAA,EAfjC,0BAAA,CAAA,SAeiC,CAAA,MAAA,EAAA,MAAA,CAAA;IAsBtB,UAAA,EAAA,KAAA;EAUX,CAAA;;;;IAV+B,UAAA,EAAA,KAAA;EAAA,CAAA;;cAtBpB,wBAAsB,4BAAA,CAAA,qCAAA;;UAUjC,0BAAA,CAAA;;;;;;;;;;;;cAYW,sBAAoB,4BAAA,CAAA,qCAAA;;UAU/B,0BAAA,CAAA"}
1
+ {"version":3,"file":"events.d.ts","names":[],"sources":["../src/events.ts"],"sourcesContent":[],"mappings":";;;;cAuBa,uBAAqB,4BAAA,CAAA,oCAAA;;UAUhC,yBAAA,CAAA;;EAVW,CAAA;EAUX,gBAAA,EAAA;;;;EAVgC,SAAA,EAAA;IAAA,IAAA,qCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAyBrB,UAAA,EAAA,KAAA;EAUX,CAAA;;cAVW,yBAAuB,4BAAA,CAAA,oCAAA;;IAAA,IAAA,EAUlC,yBAAA,CAAA,SAVkC,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EA4BvB,CAAA;EAUX,OAAA,EAAA;;;EAV+B,CAAA;EAAA,SAAA,EAAA;IAyBpB,IAAA,qCAUX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;cAnCW,oBAyBsB,EAzBF,4BAAA,CAAA,SAyBE,2BAzBF,WAyBE,CAAA;EAAA,iBAAA,EAAA;IAAA,IAAA,EAfjC,yBAAA,CAAA,SAeiC,CAAA,MAAA,EAAA,MAAA,CAAA;IAsBtB,UAAA,EAAA,KAAA;EAUX,CAAA;;;;IAV+B,UAAA,EAAA,KAAA;EAAA,CAAA;;cAtBpB,wBAAsB,4BAAA,CAAA,oCAAA;;UAUjC,yBAAA,CAAA;;;;;;;;;;;;cAYW,sBAAoB,4BAAA,CAAA,oCAAA;;UAU/B,yBAAA,CAAA"}
package/dist/example.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { ExampleSpec } from "@contractspec/lib.contracts";
1
+ import * as _contractspec_lib_contracts7 from "@contractspec/lib.contracts";
2
2
 
3
3
  //#region src/example.d.ts
4
- declare const example: ExampleSpec;
4
+ declare const example: _contractspec_lib_contracts7.ExampleSpec;
5
5
  //#endregion
6
6
  export { example as default };
7
7
  //# sourceMappingURL=example.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SAAS"}
1
+ {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SA6BJ,4BAAA,CA7BW"}
package/dist/example.js CHANGED
@@ -1,5 +1,7 @@
1
+ import { defineExample } from "@contractspec/lib.contracts";
2
+
1
3
  //#region src/example.ts
2
- const example = {
4
+ const example = defineExample({
3
5
  meta: {
4
6
  key: "kb-update-pipeline",
5
7
  version: "1.0.0",
@@ -40,7 +42,7 @@ const example = {
40
42
  },
41
43
  mcp: { enabled: true }
42
44
  }
43
- };
45
+ });
44
46
  var example_default = example;
45
47
 
46
48
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"example.js","names":["example: ExampleSpec"],"sources":["../src/example.ts"],"sourcesContent":["import type { ExampleSpec } from '@contractspec/lib.contracts';\n\nconst example: ExampleSpec = {\n meta: {\n key: 'kb-update-pipeline',\n version: '1.0.0',\n title: 'KB Update Pipeline',\n description:\n 'Automation proposes KB updates; humans verify; everything audited and notified.',\n kind: 'knowledge',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['knowledge', 'pipeline', 'hitl', 'audit'],\n },\n docs: {\n rootDocId: 'docs.examples.kb-update-pipeline',\n },\n entrypoints: {\n packageName: '@contractspec/example.kb-update-pipeline',\n feature: './feature',\n contracts: './contracts',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['markdown', 'specs', 'builder'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n};\n\nexport default example;\n"],"mappings":";AAEA,MAAMA,UAAuB;CAC3B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAa;GAAY;GAAQ;GAAQ;EACjD;CACD,MAAM,EACJ,WAAW,oCACZ;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO;IAAC;IAAY;IAAS;IAAU;GAAE;EACnE,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF;AAED,sBAAe"}
1
+ {"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'kb-update-pipeline',\n version: '1.0.0',\n title: 'KB Update Pipeline',\n description:\n 'Automation proposes KB updates; humans verify; everything audited and notified.',\n kind: 'knowledge',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['knowledge', 'pipeline', 'hitl', 'audit'],\n },\n docs: {\n rootDocId: 'docs.examples.kb-update-pipeline',\n },\n entrypoints: {\n packageName: '@contractspec/example.kb-update-pipeline',\n feature: './feature',\n contracts: './contracts',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['markdown', 'specs', 'builder'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAa;GAAY;GAAQ;GAAQ;EACjD;CACD,MAAM,EACJ,WAAW,oCACZ;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO;IAAC;IAAY;IAAS;IAAU;GAAE;EACnE,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC;AAEF,sBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.handlers.js","names":["task: ReviewTask","decided: ReviewTask"],"sources":["../../src/handlers/memory.handlers.ts"],"sourcesContent":["interface ChangeCandidate {\n id: string;\n sourceDocumentId: string;\n detectedAt: Date;\n diffSummary: string;\n riskLevel: 'low' | 'medium' | 'high';\n}\n\ninterface ReviewTask {\n id: string;\n changeCandidateId: string;\n status: 'open' | 'decided';\n assignedRole: 'curator' | 'expert';\n decision?: 'approve' | 'reject';\n decidedAt?: Date;\n decidedBy?: string;\n}\n\nexport interface PipelineMemoryStore {\n candidates: Map<string, ChangeCandidate>;\n reviewTasks: Map<string, ReviewTask>;\n proposedRuleVersionIdsByCandidate: Map<string, string[]>;\n approvedRuleVersionIds: Set<string>;\n notifications: {\n kind: 'kb.review.requested';\n reviewTaskId: string;\n changeCandidateId: string;\n assignedRole: 'curator' | 'expert';\n createdAt: Date;\n }[];\n}\n\nexport function createPipelineMemoryStore(): PipelineMemoryStore {\n return {\n candidates: new Map(),\n reviewTasks: new Map(),\n proposedRuleVersionIdsByCandidate: new Map(),\n approvedRuleVersionIds: new Set(),\n notifications: [],\n };\n}\n\nfunction stableId(prefix: string, value: string): string {\n return `${prefix}_${value.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n}\n\nexport interface PipelineMemoryHandlers {\n runWatch(input: {\n jurisdiction: string;\n }): Promise<{ candidates: ChangeCandidate[] }>;\n createReviewTask(input: { changeCandidateId: string }): Promise<ReviewTask>;\n proposeRulePatch(input: {\n changeCandidateId: string;\n proposedRuleVersionIds: string[];\n }): Promise<{ proposedRuleVersionIds: string[] }>;\n markRuleVersionApproved(input: {\n ruleVersionId: string;\n }): Promise<{ ruleVersionId: string }>;\n submitDecision(input: {\n reviewTaskId: string;\n decision: 'approve' | 'reject';\n decidedBy: string;\n decidedByRole: 'curator' | 'expert';\n }): Promise<ReviewTask>;\n publishIfReady(input: {\n jurisdiction: string;\n }): Promise<{ published: boolean; reason?: string }>;\n}\n\nexport function createPipelineMemoryHandlers(\n store: PipelineMemoryStore\n): PipelineMemoryHandlers {\n async function runWatch(input: { jurisdiction: string }) {\n // demo: always returns empty unless caller pre-seeds candidates\n const candidates = [...store.candidates.values()].filter(\n (c) => c.sourceDocumentId.startsWith(`${input.jurisdiction}_`) || true\n );\n return { candidates };\n }\n\n async function createReviewTask(input: { changeCandidateId: string }) {\n const candidate = store.candidates.get(input.changeCandidateId);\n if (!candidate) throw new Error('CHANGE_CANDIDATE_NOT_FOUND');\n const assignedRole = candidate.riskLevel === 'high' ? 'expert' : 'curator';\n const id = stableId('review', input.changeCandidateId);\n const task: ReviewTask = {\n id,\n changeCandidateId: input.changeCandidateId,\n status: 'open',\n assignedRole,\n decision: undefined,\n decidedAt: undefined,\n decidedBy: undefined,\n };\n store.reviewTasks.set(id, task);\n store.notifications.push({\n kind: 'kb.review.requested',\n reviewTaskId: id,\n changeCandidateId: input.changeCandidateId,\n assignedRole,\n createdAt: new Date(),\n });\n return task;\n }\n\n async function proposeRulePatch(input: {\n changeCandidateId: string;\n proposedRuleVersionIds: string[];\n }): Promise<{ proposedRuleVersionIds: string[] }> {\n if (!store.candidates.has(input.changeCandidateId)) {\n throw new Error('CHANGE_CANDIDATE_NOT_FOUND');\n }\n store.proposedRuleVersionIdsByCandidate.set(input.changeCandidateId, [\n ...input.proposedRuleVersionIds,\n ]);\n return { proposedRuleVersionIds: [...input.proposedRuleVersionIds] };\n }\n\n async function markRuleVersionApproved(input: {\n ruleVersionId: string;\n }): Promise<{ ruleVersionId: string }> {\n store.approvedRuleVersionIds.add(input.ruleVersionId);\n return { ruleVersionId: input.ruleVersionId };\n }\n\n async function submitDecision(input: {\n reviewTaskId: string;\n decision: 'approve' | 'reject';\n decidedBy: string;\n decidedByRole: 'curator' | 'expert';\n }) {\n const task = store.reviewTasks.get(input.reviewTaskId);\n if (!task) throw new Error('REVIEW_TASK_NOT_FOUND');\n const candidate = store.candidates.get(task.changeCandidateId);\n if (!candidate) throw new Error('CHANGE_CANDIDATE_NOT_FOUND');\n if (candidate.riskLevel === 'high' && input.decision === 'approve') {\n if (input.decidedByRole !== 'expert') throw new Error('FORBIDDEN_ROLE');\n }\n const decided: ReviewTask = {\n ...task,\n status: 'decided',\n decision: input.decision,\n decidedAt: new Date(),\n decidedBy: input.decidedBy,\n };\n store.reviewTasks.set(decided.id, decided);\n return decided;\n }\n\n async function publishIfReady(_input: { jurisdiction: string }) {\n const openTasks = [...store.reviewTasks.values()].filter(\n (t) => t.status !== 'decided'\n );\n if (openTasks.length) {\n throw new Error('NOT_READY');\n }\n const rejected = [...store.reviewTasks.values()].some(\n (t) => t.decision === 'reject'\n );\n if (rejected) return { published: false, reason: 'REJECTED' };\n\n // Ensure every proposed rule version is approved before publishing.\n for (const task of store.reviewTasks.values()) {\n if (task.decision !== 'approve') continue;\n const proposed =\n store.proposedRuleVersionIdsByCandidate.get(task.changeCandidateId) ??\n [];\n const unapproved = proposed.filter(\n (id) => !store.approvedRuleVersionIds.has(id)\n );\n if (unapproved.length) {\n throw new Error('NOT_READY');\n }\n }\n return { published: true };\n }\n\n return {\n runWatch,\n createReviewTask,\n proposeRulePatch,\n markRuleVersionApproved,\n submitDecision,\n publishIfReady,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory.handlers.js","names":[],"sources":["../../src/handlers/memory.handlers.ts"],"sourcesContent":["interface ChangeCandidate {\n id: string;\n sourceDocumentId: string;\n detectedAt: Date;\n diffSummary: string;\n riskLevel: 'low' | 'medium' | 'high';\n}\n\ninterface ReviewTask {\n id: string;\n changeCandidateId: string;\n status: 'open' | 'decided';\n assignedRole: 'curator' | 'expert';\n decision?: 'approve' | 'reject';\n decidedAt?: Date;\n decidedBy?: string;\n}\n\nexport interface PipelineMemoryStore {\n candidates: Map<string, ChangeCandidate>;\n reviewTasks: Map<string, ReviewTask>;\n proposedRuleVersionIdsByCandidate: Map<string, string[]>;\n approvedRuleVersionIds: Set<string>;\n notifications: {\n kind: 'kb.review.requested';\n reviewTaskId: string;\n changeCandidateId: string;\n assignedRole: 'curator' | 'expert';\n createdAt: Date;\n }[];\n}\n\nexport function createPipelineMemoryStore(): PipelineMemoryStore {\n return {\n candidates: new Map(),\n reviewTasks: new Map(),\n proposedRuleVersionIdsByCandidate: new Map(),\n approvedRuleVersionIds: new Set(),\n notifications: [],\n };\n}\n\nfunction stableId(prefix: string, value: string): string {\n return `${prefix}_${value.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n}\n\nexport interface PipelineMemoryHandlers {\n runWatch(input: {\n jurisdiction: string;\n }): Promise<{ candidates: ChangeCandidate[] }>;\n createReviewTask(input: { changeCandidateId: string }): Promise<ReviewTask>;\n proposeRulePatch(input: {\n changeCandidateId: string;\n proposedRuleVersionIds: string[];\n }): Promise<{ proposedRuleVersionIds: string[] }>;\n markRuleVersionApproved(input: {\n ruleVersionId: string;\n }): Promise<{ ruleVersionId: string }>;\n submitDecision(input: {\n reviewTaskId: string;\n decision: 'approve' | 'reject';\n decidedBy: string;\n decidedByRole: 'curator' | 'expert';\n }): Promise<ReviewTask>;\n publishIfReady(input: {\n jurisdiction: string;\n }): Promise<{ published: boolean; reason?: string }>;\n}\n\nexport function createPipelineMemoryHandlers(\n store: PipelineMemoryStore\n): PipelineMemoryHandlers {\n async function runWatch(input: { jurisdiction: string }) {\n // demo: always returns empty unless caller pre-seeds candidates\n const candidates = [...store.candidates.values()].filter(\n (c) => c.sourceDocumentId.startsWith(`${input.jurisdiction}_`) || true\n );\n return { candidates };\n }\n\n async function createReviewTask(input: { changeCandidateId: string }) {\n const candidate = store.candidates.get(input.changeCandidateId);\n if (!candidate) throw new Error('CHANGE_CANDIDATE_NOT_FOUND');\n const assignedRole = candidate.riskLevel === 'high' ? 'expert' : 'curator';\n const id = stableId('review', input.changeCandidateId);\n const task: ReviewTask = {\n id,\n changeCandidateId: input.changeCandidateId,\n status: 'open',\n assignedRole,\n decision: undefined,\n decidedAt: undefined,\n decidedBy: undefined,\n };\n store.reviewTasks.set(id, task);\n store.notifications.push({\n kind: 'kb.review.requested',\n reviewTaskId: id,\n changeCandidateId: input.changeCandidateId,\n assignedRole,\n createdAt: new Date(),\n });\n return task;\n }\n\n async function proposeRulePatch(input: {\n changeCandidateId: string;\n proposedRuleVersionIds: string[];\n }): Promise<{ proposedRuleVersionIds: string[] }> {\n if (!store.candidates.has(input.changeCandidateId)) {\n throw new Error('CHANGE_CANDIDATE_NOT_FOUND');\n }\n store.proposedRuleVersionIdsByCandidate.set(input.changeCandidateId, [\n ...input.proposedRuleVersionIds,\n ]);\n return { proposedRuleVersionIds: [...input.proposedRuleVersionIds] };\n }\n\n async function markRuleVersionApproved(input: {\n ruleVersionId: string;\n }): Promise<{ ruleVersionId: string }> {\n store.approvedRuleVersionIds.add(input.ruleVersionId);\n return { ruleVersionId: input.ruleVersionId };\n }\n\n async function submitDecision(input: {\n reviewTaskId: string;\n decision: 'approve' | 'reject';\n decidedBy: string;\n decidedByRole: 'curator' | 'expert';\n }) {\n const task = store.reviewTasks.get(input.reviewTaskId);\n if (!task) throw new Error('REVIEW_TASK_NOT_FOUND');\n const candidate = store.candidates.get(task.changeCandidateId);\n if (!candidate) throw new Error('CHANGE_CANDIDATE_NOT_FOUND');\n if (candidate.riskLevel === 'high' && input.decision === 'approve') {\n if (input.decidedByRole !== 'expert') throw new Error('FORBIDDEN_ROLE');\n }\n const decided: ReviewTask = {\n ...task,\n status: 'decided',\n decision: input.decision,\n decidedAt: new Date(),\n decidedBy: input.decidedBy,\n };\n store.reviewTasks.set(decided.id, decided);\n return decided;\n }\n\n async function publishIfReady(_input: { jurisdiction: string }) {\n const openTasks = [...store.reviewTasks.values()].filter(\n (t) => t.status !== 'decided'\n );\n if (openTasks.length) {\n throw new Error('NOT_READY');\n }\n const rejected = [...store.reviewTasks.values()].some(\n (t) => t.decision === 'reject'\n );\n if (rejected) return { published: false, reason: 'REJECTED' };\n\n // Ensure every proposed rule version is approved before publishing.\n for (const task of store.reviewTasks.values()) {\n if (task.decision !== 'approve') continue;\n const proposed =\n store.proposedRuleVersionIdsByCandidate.get(task.changeCandidateId) ??\n [];\n const unapproved = proposed.filter(\n (id) => !store.approvedRuleVersionIds.has(id)\n );\n if (unapproved.length) {\n throw new Error('NOT_READY');\n }\n }\n return { published: true };\n }\n\n return {\n runWatch,\n createReviewTask,\n proposeRulePatch,\n markRuleVersionApproved,\n submitDecision,\n publishIfReady,\n };\n}\n"],"mappings":";AAgCA,SAAgB,4BAAiD;AAC/D,QAAO;EACL,4BAAY,IAAI,KAAK;EACrB,6BAAa,IAAI,KAAK;EACtB,mDAAmC,IAAI,KAAK;EAC5C,wCAAwB,IAAI,KAAK;EACjC,eAAe,EAAE;EAClB;;AAGH,SAAS,SAAS,QAAgB,OAAuB;AACvD,QAAO,GAAG,OAAO,GAAG,MAAM,QAAQ,mBAAmB,IAAI;;AA0B3D,SAAgB,6BACd,OACwB;CACxB,eAAe,SAAS,OAAiC;AAKvD,SAAO,EAAE,YAHU,CAAC,GAAG,MAAM,WAAW,QAAQ,CAAC,CAAC,QAC/C,MAAM,EAAE,iBAAiB,WAAW,GAAG,MAAM,aAAa,GAAG,IAAI,KACnE,EACoB;;CAGvB,eAAe,iBAAiB,OAAsC;EACpE,MAAM,YAAY,MAAM,WAAW,IAAI,MAAM,kBAAkB;AAC/D,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,6BAA6B;EAC7D,MAAM,eAAe,UAAU,cAAc,SAAS,WAAW;EACjE,MAAM,KAAK,SAAS,UAAU,MAAM,kBAAkB;EACtD,MAAM,OAAmB;GACvB;GACA,mBAAmB,MAAM;GACzB,QAAQ;GACR;GACA,UAAU;GACV,WAAW;GACX,WAAW;GACZ;AACD,QAAM,YAAY,IAAI,IAAI,KAAK;AAC/B,QAAM,cAAc,KAAK;GACvB,MAAM;GACN,cAAc;GACd,mBAAmB,MAAM;GACzB;GACA,2BAAW,IAAI,MAAM;GACtB,CAAC;AACF,SAAO;;CAGT,eAAe,iBAAiB,OAGkB;AAChD,MAAI,CAAC,MAAM,WAAW,IAAI,MAAM,kBAAkB,CAChD,OAAM,IAAI,MAAM,6BAA6B;AAE/C,QAAM,kCAAkC,IAAI,MAAM,mBAAmB,CACnE,GAAG,MAAM,uBACV,CAAC;AACF,SAAO,EAAE,wBAAwB,CAAC,GAAG,MAAM,uBAAuB,EAAE;;CAGtE,eAAe,wBAAwB,OAEA;AACrC,QAAM,uBAAuB,IAAI,MAAM,cAAc;AACrD,SAAO,EAAE,eAAe,MAAM,eAAe;;CAG/C,eAAe,eAAe,OAK3B;EACD,MAAM,OAAO,MAAM,YAAY,IAAI,MAAM,aAAa;AACtD,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wBAAwB;EACnD,MAAM,YAAY,MAAM,WAAW,IAAI,KAAK,kBAAkB;AAC9D,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,6BAA6B;AAC7D,MAAI,UAAU,cAAc,UAAU,MAAM,aAAa,WACvD;OAAI,MAAM,kBAAkB,SAAU,OAAM,IAAI,MAAM,iBAAiB;;EAEzE,MAAM,UAAsB;GAC1B,GAAG;GACH,QAAQ;GACR,UAAU,MAAM;GAChB,2BAAW,IAAI,MAAM;GACrB,WAAW,MAAM;GAClB;AACD,QAAM,YAAY,IAAI,QAAQ,IAAI,QAAQ;AAC1C,SAAO;;CAGT,eAAe,eAAe,QAAkC;AAI9D,MAHkB,CAAC,GAAG,MAAM,YAAY,QAAQ,CAAC,CAAC,QAC/C,MAAM,EAAE,WAAW,UACrB,CACa,OACZ,OAAM,IAAI,MAAM,YAAY;AAK9B,MAHiB,CAAC,GAAG,MAAM,YAAY,QAAQ,CAAC,CAAC,MAC9C,MAAM,EAAE,aAAa,SACvB,CACa,QAAO;GAAE,WAAW;GAAO,QAAQ;GAAY;AAG7D,OAAK,MAAM,QAAQ,MAAM,YAAY,QAAQ,EAAE;AAC7C,OAAI,KAAK,aAAa,UAAW;AAOjC,QALE,MAAM,kCAAkC,IAAI,KAAK,kBAAkB,IACnE,EAAE,EACwB,QACzB,OAAO,CAAC,MAAM,uBAAuB,IAAI,GAAG,CAC9C,CACc,OACb,OAAM,IAAI,MAAM,YAAY;;AAGhC,SAAO,EAAE,WAAW,MAAM;;AAG5B,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD"}
@@ -1,7 +1,7 @@
1
- import { FeatureModuleSpec } from "@contractspec/lib.contracts";
1
+ import * as _contractspec_lib_contracts8 from "@contractspec/lib.contracts";
2
2
 
3
3
  //#region src/kb-update-pipeline.feature.d.ts
4
- declare const KbUpdatePipelineFeature: FeatureModuleSpec;
4
+ declare const KbUpdatePipelineFeature: _contractspec_lib_contracts8.FeatureModuleSpec;
5
5
  //#endregion
6
6
  export { KbUpdatePipelineFeature };
7
7
  //# sourceMappingURL=kb-update-pipeline.feature.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kb-update-pipeline.feature.d.ts","names":[],"sources":["../src/kb-update-pipeline.feature.ts"],"sourcesContent":[],"mappings":";;;cAEa,yBAAyB"}
1
+ {"version":3,"file":"kb-update-pipeline.feature.d.ts","names":[],"sources":["../src/kb-update-pipeline.feature.ts"],"sourcesContent":[],"mappings":";;;cAEa,yBAwDX,4BAAA,CAxDkC"}
@@ -1,5 +1,7 @@
1
+ import { defineFeature } from "@contractspec/lib.contracts";
2
+
1
3
  //#region src/kb-update-pipeline.feature.ts
2
- const KbUpdatePipelineFeature = {
4
+ const KbUpdatePipelineFeature = defineFeature({
3
5
  meta: {
4
6
  key: "kb-update-pipeline",
5
7
  version: "1.0.0",
@@ -133,7 +135,7 @@ const KbUpdatePipelineFeature = {
133
135
  version: "1.0.0"
134
136
  }
135
137
  ] }
136
- };
138
+ });
137
139
 
138
140
  //#endregion
139
141
  export { KbUpdatePipelineFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"kb-update-pipeline.feature.js","names":["KbUpdatePipelineFeature: FeatureModuleSpec"],"sources":["../src/kb-update-pipeline.feature.ts"],"sourcesContent":["import type { FeatureModuleSpec } from '@contractspec/lib.contracts';\n\nexport const KbUpdatePipelineFeature: FeatureModuleSpec = {\n meta: {\n key: 'kb-update-pipeline',\n version: '1.0.0',\n title: 'KB Update Pipeline (HITL)',\n description:\n 'Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.',\n domain: 'knowledge',\n owners: ['@examples'],\n tags: ['knowledge', 'pipeline', 'hitl', 'audit', 'notifications'],\n stability: 'experimental',\n },\n operations: [\n { key: 'kbPipeline.runWatch', version: '1.0.0' },\n { key: 'kbPipeline.createReviewTask', version: '1.0.0' },\n { key: 'kbPipeline.submitDecision', version: '1.0.0' },\n { key: 'kbPipeline.publishIfReady', version: '1.0.0' },\n ],\n events: [\n { key: 'kb.change.detected', version: '1.0.0' },\n { key: 'kb.change.summarized', version: '1.0.0' },\n { key: 'kb.patch.proposed', version: '1.0.0' },\n { key: 'kb.review.requested', version: '1.0.0' },\n { key: 'kb.review.decided', version: '1.0.0' },\n ],\n presentations: [\n { key: 'kb.dashboard', version: '1.0.0' },\n { key: 'kb.review.list', version: '1.0.0' },\n { key: 'kb.review.form', version: '1.0.0' },\n ],\n opToPresentation: [\n {\n op: { key: 'kbPipeline.runWatch', version: '1.0.0' },\n pres: { key: 'kb.dashboard', version: '1.0.0' },\n },\n {\n op: { key: 'kbPipeline.createReviewTask', version: '1.0.0' },\n pres: { key: 'kb.review.list', version: '1.0.0' },\n },\n {\n op: { key: 'kbPipeline.submitDecision', version: '1.0.0' },\n pres: { key: 'kb.review.form', version: '1.0.0' },\n },\n ],\n presentationsTargets: [\n { key: 'kb.dashboard', version: '1.0.0', targets: ['react', 'markdown'] },\n { key: 'kb.review.list', version: '1.0.0', targets: ['react', 'markdown'] },\n { key: 'kb.review.form', version: '1.0.0', targets: ['react'] },\n ],\n capabilities: {\n requires: [\n { key: 'identity', version: '1.0.0' },\n { key: 'notifications', version: '1.0.0' },\n { key: 'audit-trail', version: '1.0.0' },\n ],\n },\n};\n"],"mappings":";AAEA,MAAaA,0BAA6C;CACxD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,YAAY;EACrB,MAAM;GAAC;GAAa;GAAY;GAAQ;GAAS;GAAgB;EACjE,WAAW;EACZ;CACD,YAAY;EACV;GAAE,KAAK;GAAuB,SAAS;GAAS;EAChD;GAAE,KAAK;GAA+B,SAAS;GAAS;EACxD;GAAE,KAAK;GAA6B,SAAS;GAAS;EACtD;GAAE,KAAK;GAA6B,SAAS;GAAS;EACvD;CACD,QAAQ;EACN;GAAE,KAAK;GAAsB,SAAS;GAAS;EAC/C;GAAE,KAAK;GAAwB,SAAS;GAAS;EACjD;GAAE,KAAK;GAAqB,SAAS;GAAS;EAC9C;GAAE,KAAK;GAAuB,SAAS;GAAS;EAChD;GAAE,KAAK;GAAqB,SAAS;GAAS;EAC/C;CACD,eAAe;EACb;GAAE,KAAK;GAAgB,SAAS;GAAS;EACzC;GAAE,KAAK;GAAkB,SAAS;GAAS;EAC3C;GAAE,KAAK;GAAkB,SAAS;GAAS;EAC5C;CACD,kBAAkB;EAChB;GACE,IAAI;IAAE,KAAK;IAAuB,SAAS;IAAS;GACpD,MAAM;IAAE,KAAK;IAAgB,SAAS;IAAS;GAChD;EACD;GACE,IAAI;IAAE,KAAK;IAA+B,SAAS;IAAS;GAC5D,MAAM;IAAE,KAAK;IAAkB,SAAS;IAAS;GAClD;EACD;GACE,IAAI;IAAE,KAAK;IAA6B,SAAS;IAAS;GAC1D,MAAM;IAAE,KAAK;IAAkB,SAAS;IAAS;GAClD;EACF;CACD,sBAAsB;EACpB;GAAE,KAAK;GAAgB,SAAS;GAAS,SAAS,CAAC,SAAS,WAAW;GAAE;EACzE;GAAE,KAAK;GAAkB,SAAS;GAAS,SAAS,CAAC,SAAS,WAAW;GAAE;EAC3E;GAAE,KAAK;GAAkB,SAAS;GAAS,SAAS,CAAC,QAAQ;GAAE;EAChE;CACD,cAAc,EACZ,UAAU;EACR;GAAE,KAAK;GAAY,SAAS;GAAS;EACrC;GAAE,KAAK;GAAiB,SAAS;GAAS;EAC1C;GAAE,KAAK;GAAe,SAAS;GAAS;EACzC,EACF;CACF"}
1
+ {"version":3,"file":"kb-update-pipeline.feature.js","names":[],"sources":["../src/kb-update-pipeline.feature.ts"],"sourcesContent":["import { defineFeature } from '@contractspec/lib.contracts';\n\nexport const KbUpdatePipelineFeature = defineFeature({\n meta: {\n key: 'kb-update-pipeline',\n version: '1.0.0',\n title: 'KB Update Pipeline (HITL)',\n description:\n 'Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.',\n domain: 'knowledge',\n owners: ['@examples'],\n tags: ['knowledge', 'pipeline', 'hitl', 'audit', 'notifications'],\n stability: 'experimental',\n },\n operations: [\n { key: 'kbPipeline.runWatch', version: '1.0.0' },\n { key: 'kbPipeline.createReviewTask', version: '1.0.0' },\n { key: 'kbPipeline.submitDecision', version: '1.0.0' },\n { key: 'kbPipeline.publishIfReady', version: '1.0.0' },\n ],\n events: [\n { key: 'kb.change.detected', version: '1.0.0' },\n { key: 'kb.change.summarized', version: '1.0.0' },\n { key: 'kb.patch.proposed', version: '1.0.0' },\n { key: 'kb.review.requested', version: '1.0.0' },\n { key: 'kb.review.decided', version: '1.0.0' },\n ],\n presentations: [\n { key: 'kb.dashboard', version: '1.0.0' },\n { key: 'kb.review.list', version: '1.0.0' },\n { key: 'kb.review.form', version: '1.0.0' },\n ],\n opToPresentation: [\n {\n op: { key: 'kbPipeline.runWatch', version: '1.0.0' },\n pres: { key: 'kb.dashboard', version: '1.0.0' },\n },\n {\n op: { key: 'kbPipeline.createReviewTask', version: '1.0.0' },\n pres: { key: 'kb.review.list', version: '1.0.0' },\n },\n {\n op: { key: 'kbPipeline.submitDecision', version: '1.0.0' },\n pres: { key: 'kb.review.form', version: '1.0.0' },\n },\n ],\n presentationsTargets: [\n { key: 'kb.dashboard', version: '1.0.0', targets: ['react', 'markdown'] },\n { key: 'kb.review.list', version: '1.0.0', targets: ['react', 'markdown'] },\n { key: 'kb.review.form', version: '1.0.0', targets: ['react'] },\n ],\n capabilities: {\n requires: [\n { key: 'identity', version: '1.0.0' },\n { key: 'notifications', version: '1.0.0' },\n { key: 'audit-trail', version: '1.0.0' },\n ],\n },\n});\n"],"mappings":";;;AAEA,MAAa,0BAA0B,cAAc;CACnD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,YAAY;EACrB,MAAM;GAAC;GAAa;GAAY;GAAQ;GAAS;GAAgB;EACjE,WAAW;EACZ;CACD,YAAY;EACV;GAAE,KAAK;GAAuB,SAAS;GAAS;EAChD;GAAE,KAAK;GAA+B,SAAS;GAAS;EACxD;GAAE,KAAK;GAA6B,SAAS;GAAS;EACtD;GAAE,KAAK;GAA6B,SAAS;GAAS;EACvD;CACD,QAAQ;EACN;GAAE,KAAK;GAAsB,SAAS;GAAS;EAC/C;GAAE,KAAK;GAAwB,SAAS;GAAS;EACjD;GAAE,KAAK;GAAqB,SAAS;GAAS;EAC9C;GAAE,KAAK;GAAuB,SAAS;GAAS;EAChD;GAAE,KAAK;GAAqB,SAAS;GAAS;EAC/C;CACD,eAAe;EACb;GAAE,KAAK;GAAgB,SAAS;GAAS;EACzC;GAAE,KAAK;GAAkB,SAAS;GAAS;EAC3C;GAAE,KAAK;GAAkB,SAAS;GAAS;EAC5C;CACD,kBAAkB;EAChB;GACE,IAAI;IAAE,KAAK;IAAuB,SAAS;IAAS;GACpD,MAAM;IAAE,KAAK;IAAgB,SAAS;IAAS;GAChD;EACD;GACE,IAAI;IAAE,KAAK;IAA+B,SAAS;IAAS;GAC5D,MAAM;IAAE,KAAK;IAAkB,SAAS;IAAS;GAClD;EACD;GACE,IAAI;IAAE,KAAK;IAA6B,SAAS;IAAS;GAC1D,MAAM;IAAE,KAAK;IAAkB,SAAS;IAAS;GAClD;EACF;CACD,sBAAsB;EACpB;GAAE,KAAK;GAAgB,SAAS;GAAS,SAAS,CAAC,SAAS,WAAW;GAAE;EACzE;GAAE,KAAK;GAAkB,SAAS;GAAS,SAAS,CAAC,SAAS,WAAW;GAAE;EAC3E;GAAE,KAAK;GAAkB,SAAS;GAAS,SAAS,CAAC,QAAQ;GAAE;EAChE;CACD,cAAc,EACZ,UAAU;EACR;GAAE,KAAK;GAAY,SAAS;GAAS;EACrC;GAAE,KAAK;GAAiB,SAAS;GAAS;EAC1C;GAAE,KAAK;GAAe,SAAS;GAAS;EACzC,EACF;CACF,CAAC"}