@mplp/schema 1.0.4 → 1.0.6

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 (43) hide show
  1. package/LICENSE +17 -0
  2. package/LICENSE.txt +201 -201
  3. package/README.md +25 -7
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +15 -0
  6. package/dist/kernel-duties.d.ts +9 -0
  7. package/dist/kernel-duties.js +19 -0
  8. package/package.json +17 -7
  9. package/schemas/common/common-types.schema.json +49 -49
  10. package/schemas/common/events.schema.json +66 -66
  11. package/schemas/common/identifiers.schema.json +13 -13
  12. package/schemas/common/learning-sample.schema.json +194 -194
  13. package/schemas/common/metadata.schema.json +115 -113
  14. package/schemas/common/trace-base.schema.json +43 -43
  15. package/schemas/events/mplp-event-core.schema.json +58 -58
  16. package/schemas/events/mplp-graph-update-event.schema.json +58 -58
  17. package/schemas/events/mplp-map-event.schema.json +147 -147
  18. package/schemas/events/mplp-pipeline-stage-event.schema.json +56 -56
  19. package/schemas/events/mplp-runtime-execution-event.schema.json +58 -58
  20. package/schemas/events/mplp-sa-event.schema.json +109 -109
  21. package/schemas/integration/mplp-ci-event.schema.json +130 -130
  22. package/schemas/integration/mplp-file-update-event.schema.json +70 -70
  23. package/schemas/integration/mplp-git-event.schema.json +98 -98
  24. package/schemas/integration/mplp-tool-event.schema.json +83 -83
  25. package/schemas/invariants/integration-invariants.yaml +139 -147
  26. package/schemas/invariants/learning-invariants.yaml +98 -106
  27. package/schemas/invariants/map-invariants.yaml +65 -73
  28. package/schemas/invariants/observability-invariants.yaml +98 -106
  29. package/schemas/invariants/sa-invariants.yaml +64 -72
  30. package/schemas/kernel-duties.json +18 -0
  31. package/schemas/learning/mplp-learning-sample-core.schema.json +94 -94
  32. package/schemas/learning/mplp-learning-sample-delta.schema.json +137 -137
  33. package/schemas/learning/mplp-learning-sample-intent.schema.json +119 -119
  34. package/schemas/mplp-collab.schema.json +243 -243
  35. package/schemas/mplp-confirm.schema.json +226 -226
  36. package/schemas/mplp-context.schema.json +246 -246
  37. package/schemas/mplp-core.schema.json +183 -183
  38. package/schemas/mplp-dialog.schema.json +198 -198
  39. package/schemas/mplp-extension.schema.json +179 -179
  40. package/schemas/mplp-network.schema.json +230 -230
  41. package/schemas/mplp-plan.schema.json +193 -193
  42. package/schemas/mplp-role.schema.json +139 -139
  43. package/schemas/mplp-trace.schema.json +216 -216
@@ -1,98 +1,98 @@
1
- {
2
- "$comment": "MPLP Protocol v1.0.0 — Frozen Specification\nFreeze Date: 2025-12-03\nStatus: FROZEN (no breaking changes permitted)\nGovernance: MPLP Protocol Governance Committee (MPGC)\nCopyright: © 2025 邦士(北京)网络科技有限公司\nLicense: Apache-2.0\nAny normative change requires a new protocol version.",
3
- "$schema": "http://json-schema.org/draft-07/schema#",
4
- "$id": "https://mplp.dev/schemas/v1.0/integration/mplp-git-event.json",
5
- "title": "MPLP Git Event v1.0",
6
- "description": "Git operations (commit, push, branch/merge/tag)",
7
- "type": "object",
8
- "additionalProperties": false,
9
- "properties": {
10
- "repo_url": {
11
- "type": "string",
12
- "minLength": 1,
13
- "description": "Repository URL or identifier",
14
- "examples": [
15
- "https://github.com/org/repo.git",
16
- "git@github.com:org/repo.git"
17
- ]
18
- },
19
- "commit_id": {
20
- "type": "string",
21
- "minLength": 1,
22
- "description": "Commit SHA or identifier",
23
- "examples": [
24
- "abc123def456",
25
- "1a2b3c4d5e6f7g8h9i0j"
26
- ]
27
- },
28
- "ref_name": {
29
- "type": "string",
30
- "minLength": 1,
31
- "description": "Branch, tag, or ref name",
32
- "examples": [
33
- "refs/heads/main",
34
- "refs/tags/v1.0.0",
35
- "main"
36
- ]
37
- },
38
- "event_kind": {
39
- "type": "string",
40
- "enum": [
41
- "commit",
42
- "push",
43
- "merge",
44
- "tag",
45
- "branch_create",
46
- "branch_delete"
47
- ],
48
- "description": "Type of Git operation"
49
- },
50
- "author_name": {
51
- "type": "string",
52
- "description": "Commit author name"
53
- },
54
- "author_email": {
55
- "type": "string",
56
- "format": "email",
57
- "description": "Commit author email"
58
- },
59
- "commit_message": {
60
- "type": "string",
61
- "description": "Commit message (first line or summary)"
62
- },
63
- "timestamp": {
64
- "type": "string",
65
- "format": "date-time",
66
- "description": "When the Git operation occurred (ISO 8601)"
67
- },
68
- "files_changed": {
69
- "type": "integer",
70
- "minimum": 0,
71
- "description": "Number of files changed in commit"
72
- },
73
- "insertions": {
74
- "type": "integer",
75
- "minimum": 0,
76
- "description": "Total lines inserted"
77
- },
78
- "deletions": {
79
- "type": "integer",
80
- "minimum": 0,
81
- "description": "Total lines deleted"
82
- },
83
- "parent_commits": {
84
- "type": "array",
85
- "items": {
86
- "type": "string"
87
- },
88
- "description": "Parent commit SHA(s) - multiple for merges"
89
- }
90
- },
91
- "required": [
92
- "repo_url",
93
- "commit_id",
94
- "ref_name",
95
- "event_kind",
96
- "timestamp"
97
- ]
98
- }
1
+ {
2
+ "$comment": "MPLP Protocol v1.0.0 — Frozen Specification\nFreeze Date: 2025-12-03\nStatus: FROZEN (no breaking changes permitted)\nGovernance: MPLP Protocol Governance Committee (MPGC)\nCopyright: © 2026 Bangshi Beijing Network Technology Limited Company\nLicense: Apache-2.0\nAny normative change requires a new protocol version.",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "$id": "https://mplp.dev/schemas/v1.0/integration/mplp-git-event.json",
5
+ "title": "MPLP Git Event v1.0",
6
+ "description": "Git operations (commit, push, branch/merge/tag)",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "repo_url": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "description": "Repository URL or identifier",
14
+ "examples": [
15
+ "https://github.com/org/repo.git",
16
+ "git@github.com:org/repo.git"
17
+ ]
18
+ },
19
+ "commit_id": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "description": "Commit SHA or identifier",
23
+ "examples": [
24
+ "abc123def456",
25
+ "1a2b3c4d5e6f7g8h9i0j"
26
+ ]
27
+ },
28
+ "ref_name": {
29
+ "type": "string",
30
+ "minLength": 1,
31
+ "description": "Branch, tag, or ref name",
32
+ "examples": [
33
+ "refs/heads/main",
34
+ "refs/tags/v1.0.0",
35
+ "main"
36
+ ]
37
+ },
38
+ "event_kind": {
39
+ "type": "string",
40
+ "enum": [
41
+ "commit",
42
+ "push",
43
+ "merge",
44
+ "tag",
45
+ "branch_create",
46
+ "branch_delete"
47
+ ],
48
+ "description": "Type of Git operation"
49
+ },
50
+ "author_name": {
51
+ "type": "string",
52
+ "description": "Commit author name"
53
+ },
54
+ "author_email": {
55
+ "type": "string",
56
+ "format": "email",
57
+ "description": "Commit author email"
58
+ },
59
+ "commit_message": {
60
+ "type": "string",
61
+ "description": "Commit message (first line or summary)"
62
+ },
63
+ "timestamp": {
64
+ "type": "string",
65
+ "format": "date-time",
66
+ "description": "When the Git operation occurred (ISO 8601)"
67
+ },
68
+ "files_changed": {
69
+ "type": "integer",
70
+ "minimum": 0,
71
+ "description": "Number of files changed in commit"
72
+ },
73
+ "insertions": {
74
+ "type": "integer",
75
+ "minimum": 0,
76
+ "description": "Total lines inserted"
77
+ },
78
+ "deletions": {
79
+ "type": "integer",
80
+ "minimum": 0,
81
+ "description": "Total lines deleted"
82
+ },
83
+ "parent_commits": {
84
+ "type": "array",
85
+ "items": {
86
+ "type": "string"
87
+ },
88
+ "description": "Parent commit SHA(s) - multiple for merges"
89
+ }
90
+ },
91
+ "required": [
92
+ "repo_url",
93
+ "commit_id",
94
+ "ref_name",
95
+ "event_kind",
96
+ "timestamp"
97
+ ]
98
+ }
@@ -1,83 +1,83 @@
1
- {
2
- "$comment": "MPLP Protocol v1.0.0 — Frozen Specification\nFreeze Date: 2025-12-03\nStatus: FROZEN (no breaking changes permitted)\nGovernance: MPLP Protocol Governance Committee (MPGC)\nCopyright: © 2025 邦士(北京)网络科技有限公司\nLicense: Apache-2.0\nAny normative change requires a new protocol version.",
3
- "$schema": "http://json-schema.org/draft-07/schema#",
4
- "$id": "https://mplp.dev/schemas/v1.0/integration/mplp-tool-event.json",
5
- "title": "MPLP Tool Event v1.0",
6
- "description": "External tool invocation and results (formatters, linters, test runners, generators)",
7
- "type": "object",
8
- "additionalProperties": false,
9
- "properties": {
10
- "tool_id": {
11
- "type": "string",
12
- "minLength": 1,
13
- "description": "Unique identifier for the tool",
14
- "examples": [
15
- "eslint-v8.50.0",
16
- "prettier-v3.0.0",
17
- "black-v23.10.0"
18
- ]
19
- },
20
- "tool_kind": {
21
- "type": "string",
22
- "enum": [
23
- "formatter",
24
- "linter",
25
- "test_runner",
26
- "generator",
27
- "other"
28
- ],
29
- "description": "Category of tool"
30
- },
31
- "invocation_id": {
32
- "type": "string",
33
- "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
34
- "description": "UUID v4 identifier for this specific invocation"
35
- },
36
- "status": {
37
- "type": "string",
38
- "enum": [
39
- "pending",
40
- "running",
41
- "succeeded",
42
- "failed",
43
- "cancelled"
44
- ],
45
- "description": "Current execution status"
46
- },
47
- "started_at": {
48
- "type": "string",
49
- "format": "date-time",
50
- "description": "Invocation start timestamp (ISO 8601)"
51
- },
52
- "completed_at": {
53
- "type": "string",
54
- "format": "date-time",
55
- "description": "Invocation completion timestamp (ISO 8601)"
56
- },
57
- "exit_code": {
58
- "type": "integer",
59
- "description": "Tool process exit code (if applicable)"
60
- },
61
- "output_summary": {
62
- "type": "string",
63
- "description": "Brief summary of tool output or errors"
64
- },
65
- "args": {
66
- "type": "array",
67
- "items": {
68
- "type": "string"
69
- },
70
- "description": "Command-line arguments passed to tool (optional)"
71
- },
72
- "working_directory": {
73
- "type": "string",
74
- "description": "Working directory where tool was executed (optional)"
75
- }
76
- },
77
- "required": [
78
- "tool_id",
79
- "tool_kind",
80
- "invocation_id",
81
- "status"
82
- ]
83
- }
1
+ {
2
+ "$comment": "MPLP Protocol v1.0.0 — Frozen Specification\nFreeze Date: 2025-12-03\nStatus: FROZEN (no breaking changes permitted)\nGovernance: MPLP Protocol Governance Committee (MPGC)\nCopyright: © 2026 Bangshi Beijing Network Technology Limited Company\nLicense: Apache-2.0\nAny normative change requires a new protocol version.",
3
+ "$schema": "http://json-schema.org/draft-07/schema#",
4
+ "$id": "https://mplp.dev/schemas/v1.0/integration/mplp-tool-event.json",
5
+ "title": "MPLP Tool Event v1.0",
6
+ "description": "External tool invocation and results (formatters, linters, test runners, generators)",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "tool_id": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "description": "Unique identifier for the tool",
14
+ "examples": [
15
+ "eslint-v8.50.0",
16
+ "prettier-v3.0.0",
17
+ "black-v23.10.0"
18
+ ]
19
+ },
20
+ "tool_kind": {
21
+ "type": "string",
22
+ "enum": [
23
+ "formatter",
24
+ "linter",
25
+ "test_runner",
26
+ "generator",
27
+ "other"
28
+ ],
29
+ "description": "Category of tool"
30
+ },
31
+ "invocation_id": {
32
+ "type": "string",
33
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
34
+ "description": "UUID v4 identifier for this specific invocation"
35
+ },
36
+ "status": {
37
+ "type": "string",
38
+ "enum": [
39
+ "pending",
40
+ "running",
41
+ "succeeded",
42
+ "failed",
43
+ "cancelled"
44
+ ],
45
+ "description": "Current execution status"
46
+ },
47
+ "started_at": {
48
+ "type": "string",
49
+ "format": "date-time",
50
+ "description": "Invocation start timestamp (ISO 8601)"
51
+ },
52
+ "completed_at": {
53
+ "type": "string",
54
+ "format": "date-time",
55
+ "description": "Invocation completion timestamp (ISO 8601)"
56
+ },
57
+ "exit_code": {
58
+ "type": "integer",
59
+ "description": "Tool process exit code (if applicable)"
60
+ },
61
+ "output_summary": {
62
+ "type": "string",
63
+ "description": "Brief summary of tool output or errors"
64
+ },
65
+ "args": {
66
+ "type": "array",
67
+ "items": {
68
+ "type": "string"
69
+ },
70
+ "description": "Command-line arguments passed to tool (optional)"
71
+ },
72
+ "working_directory": {
73
+ "type": "string",
74
+ "description": "Working directory where tool was executed (optional)"
75
+ }
76
+ },
77
+ "required": [
78
+ "tool_id",
79
+ "tool_kind",
80
+ "invocation_id",
81
+ "status"
82
+ ]
83
+ }
@@ -1,147 +1,139 @@
1
- # MPLP v1.0.0 FROZEN – Invariant Set
2
- # © 2025 邦士(北京)网络科技有限公司 – Apache-2.0
3
- # Governance: MPLP Protocol Governance Committee (MPGC)
4
-
5
- # MPLP Protocol v1.0.0 — Frozen Specification
6
- # Freeze Date: 2025-12-03
7
- # Status: FROZEN (no breaking changes permitted)
8
- # Governance: MPLP Protocol Governance Committee (MPGC)
9
- # © 2025 邦士(北京)网络科技有限公司
10
- # License: Apache-2.0
11
- # Any normative change requires a new protocol version.
12
-
13
- # MPLP Protocol 1.0.0 — Frozen Specification
14
- # Status: Frozen as of 2025-11-30
15
- # Copyright: © 2025 邦士(北京)网络科技有限公司
16
- # License: Apache-2.0 (see LICENSE at repository root)
17
- # Any normative change requires a new protocol version.
18
-
19
- invariants:
20
- # ========================================
21
- # Tool Event Invariants
22
- # ========================================
23
- - id: integration_tool_event_id_non_empty
24
- scope: tool_event
25
- path: tool_id
26
- rule: non-empty-string
27
- description: "Tool event must have non-empty tool_id"
28
-
29
- - id: integration_tool_kind_valid
30
- scope: tool_event
31
- path: tool_kind
32
- rule: enum(formatter,linter,test_runner,generator,other)
33
- description: "Tool kind must be valid enum value"
34
-
35
- - id: integration_tool_invocation_id_uuid
36
- scope: tool_event
37
- path: invocation_id
38
- rule: uuid-v4
39
- description: "Tool invocation_id must be UUID v4"
40
-
41
- - id: integration_tool_status_valid
42
- scope: tool_event
43
- path: status
44
- rule: enum(pending,running,succeeded,failed,cancelled)
45
- description: "Tool event status must be valid enum value"
46
-
47
- - id: integration_tool_started_at_iso
48
- scope: tool_event
49
- path: started_at
50
- rule: iso-datetime
51
- description: "If started_at present, must be ISO 8601 datetime"
52
- note: "Apply only when started_at field exists"
53
-
54
- # ========================================
55
- # File Update Event Invariants
56
- # ========================================
57
- - id: integration_file_path_non_empty
58
- scope: file_update_event
59
- path: file_path
60
- rule: non-empty-string
61
- description: "File update event must have non-empty file_path"
62
-
63
- - id: integration_file_change_type_valid
64
- scope: file_update_event
65
- path: change_type
66
- rule: enum(created,modified,deleted,renamed)
67
- description: "File change_type must be valid enum value"
68
-
69
- - id: integration_file_timestamp_iso
70
- scope: file_update_event
71
- path: timestamp
72
- rule: iso-datetime
73
- description: "File update timestamp must be ISO 8601 datetime"
74
-
75
- # ========================================
76
- # Git Event Invariants
77
- # ========================================
78
- - id: integration_git_repo_url_non_empty
79
- scope: git_event
80
- path: repo_url
81
- rule: non-empty-string
82
- description: "Git event must have non-empty repo_url"
83
-
84
- - id: integration_git_commit_id_non_empty
85
- scope: git_event
86
- path: commit_id
87
- rule: non-empty-string
88
- description: "Git event must have non-empty commit_id"
89
-
90
- - id: integration_git_ref_name_non_empty
91
- scope: git_event
92
- path: ref_name
93
- rule: non-empty-string
94
- description: "Git event must have non-empty ref_name"
95
-
96
- - id: integration_git_event_kind_valid
97
- scope: git_event
98
- path: event_kind
99
- rule: enum(commit,push,merge,tag,branch_create,branch_delete)
100
- description: "Git event_kind must be valid enum value"
101
-
102
- - id: integration_git_timestamp_iso
103
- scope: git_event
104
- path: timestamp
105
- rule: iso-datetime
106
- description: "Git event timestamp must be ISO 8601 datetime"
107
-
108
- # ========================================
109
- # CI Event Invariants
110
- # ========================================
111
- - id: integration_ci_provider_non_empty
112
- scope: ci_event
113
- path: ci_provider
114
- rule: non-empty-string
115
- description: "CI event must have non-empty ci_provider"
116
-
117
- - id: integration_ci_pipeline_id_non_empty
118
- scope: ci_event
119
- path: pipeline_id
120
- rule: non-empty-string
121
- description: "CI event must have non-empty pipeline_id"
122
-
123
- - id: integration_ci_run_id_non_empty
124
- scope: ci_event
125
- path: run_id
126
- rule: non-empty-string
127
- description: "CI event must have non-empty run_id"
128
-
129
- - id: integration_ci_status_valid
130
- scope: ci_event
131
- path: status
132
- rule: enum(pending,running,succeeded,failed,cancelled)
133
- description: "CI event status must be valid enum value"
134
-
135
- - id: integration_ci_started_at_iso
136
- scope: ci_event
137
- path: started_at
138
- rule: iso-datetime
139
- description: "If started_at present, must be ISO 8601 datetime"
140
- note: "Apply only when started_at field exists"
141
-
142
- - id: integration_ci_completed_at_iso
143
- scope: ci_event
144
- path: completed_at
145
- rule: iso-datetime
146
- description: "If completed_at present, must be ISO 8601 datetime"
147
- note: "Apply only when completed_at field exists"
1
+ # MPLP v1.0.0 FROZEN – Invariant Set
2
+ # © 2026 Bangshi Beijing Network Technology Limited Company – Apache-2.0
3
+ # Governance: MPLP Protocol Governance Committee (MPGC)
4
+
5
+ # MPLP Protocol 1.0.0 — Frozen Specification
6
+ # Status: Frozen as of 2025-11-30
7
+ # Copyright: © 2026 Bangshi Beijing Network Technology Limited Company
8
+ # License: Apache-2.0 (see LICENSE at repository root)
9
+ # Any normative change requires a new protocol version.
10
+
11
+ invariants:
12
+ # ========================================
13
+ # Tool Event Invariants
14
+ # ========================================
15
+ - id: integration_tool_event_id_non_empty
16
+ scope: tool_event
17
+ path: tool_id
18
+ rule: non-empty-string
19
+ description: "Tool event must have non-empty tool_id"
20
+
21
+ - id: integration_tool_kind_valid
22
+ scope: tool_event
23
+ path: tool_kind
24
+ rule: enum(formatter,linter,test_runner,generator,other)
25
+ description: "Tool kind must be valid enum value"
26
+
27
+ - id: integration_tool_invocation_id_uuid
28
+ scope: tool_event
29
+ path: invocation_id
30
+ rule: uuid-v4
31
+ description: "Tool invocation_id must be UUID v4"
32
+
33
+ - id: integration_tool_status_valid
34
+ scope: tool_event
35
+ path: status
36
+ rule: enum(pending,running,succeeded,failed,cancelled)
37
+ description: "Tool event status must be valid enum value"
38
+
39
+ - id: integration_tool_started_at_iso
40
+ scope: tool_event
41
+ path: started_at
42
+ rule: iso-datetime
43
+ description: "If started_at present, must be ISO 8601 datetime"
44
+ note: "Apply only when started_at field exists"
45
+
46
+ # ========================================
47
+ # File Update Event Invariants
48
+ # ========================================
49
+ - id: integration_file_path_non_empty
50
+ scope: file_update_event
51
+ path: file_path
52
+ rule: non-empty-string
53
+ description: "File update event must have non-empty file_path"
54
+
55
+ - id: integration_file_change_type_valid
56
+ scope: file_update_event
57
+ path: change_type
58
+ rule: enum(created,modified,deleted,renamed)
59
+ description: "File change_type must be valid enum value"
60
+
61
+ - id: integration_file_timestamp_iso
62
+ scope: file_update_event
63
+ path: timestamp
64
+ rule: iso-datetime
65
+ description: "File update timestamp must be ISO 8601 datetime"
66
+
67
+ # ========================================
68
+ # Git Event Invariants
69
+ # ========================================
70
+ - id: integration_git_repo_url_non_empty
71
+ scope: git_event
72
+ path: repo_url
73
+ rule: non-empty-string
74
+ description: "Git event must have non-empty repo_url"
75
+
76
+ - id: integration_git_commit_id_non_empty
77
+ scope: git_event
78
+ path: commit_id
79
+ rule: non-empty-string
80
+ description: "Git event must have non-empty commit_id"
81
+
82
+ - id: integration_git_ref_name_non_empty
83
+ scope: git_event
84
+ path: ref_name
85
+ rule: non-empty-string
86
+ description: "Git event must have non-empty ref_name"
87
+
88
+ - id: integration_git_event_kind_valid
89
+ scope: git_event
90
+ path: event_kind
91
+ rule: enum(commit,push,merge,tag,branch_create,branch_delete)
92
+ description: "Git event_kind must be valid enum value"
93
+
94
+ - id: integration_git_timestamp_iso
95
+ scope: git_event
96
+ path: timestamp
97
+ rule: iso-datetime
98
+ description: "Git event timestamp must be ISO 8601 datetime"
99
+
100
+ # ========================================
101
+ # CI Event Invariants
102
+ # ========================================
103
+ - id: integration_ci_provider_non_empty
104
+ scope: ci_event
105
+ path: ci_provider
106
+ rule: non-empty-string
107
+ description: "CI event must have non-empty ci_provider"
108
+
109
+ - id: integration_ci_pipeline_id_non_empty
110
+ scope: ci_event
111
+ path: pipeline_id
112
+ rule: non-empty-string
113
+ description: "CI event must have non-empty pipeline_id"
114
+
115
+ - id: integration_ci_run_id_non_empty
116
+ scope: ci_event
117
+ path: run_id
118
+ rule: non-empty-string
119
+ description: "CI event must have non-empty run_id"
120
+
121
+ - id: integration_ci_status_valid
122
+ scope: ci_event
123
+ path: status
124
+ rule: enum(pending,running,succeeded,failed,cancelled)
125
+ description: "CI event status must be valid enum value"
126
+
127
+ - id: integration_ci_started_at_iso
128
+ scope: ci_event
129
+ path: started_at
130
+ rule: iso-datetime
131
+ description: "If started_at present, must be ISO 8601 datetime"
132
+ note: "Apply only when started_at field exists"
133
+
134
+ - id: integration_ci_completed_at_iso
135
+ scope: ci_event
136
+ path: completed_at
137
+ rule: iso-datetime
138
+ description: "If completed_at present, must be ISO 8601 datetime"
139
+ note: "Apply only when completed_at field exists"