probatio 0.1.3 → 0.3.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 (55) hide show
  1. package/README.md +93 -8
  2. package/dist/cli.js +136 -6
  3. package/dist/contract.js +2 -1
  4. package/dist/golden/record.js +395 -0
  5. package/dist/golden/recorder.mjs +78 -0
  6. package/dist/ledger/build.js +21 -0
  7. package/dist/ledger/check.js +133 -0
  8. package/dist/mcp.js +76 -27
  9. package/dist/mutate/child-lines.mjs +23 -18
  10. package/dist/mutate/fail-reporter.mjs +21 -0
  11. package/dist/mutate/find.js +3 -3
  12. package/dist/mutate/generate.js +5 -2
  13. package/dist/mutate/load-failure.mjs +40 -0
  14. package/dist/mutate/mocha-coverage.cjs +7 -1
  15. package/dist/mutate/node-batch-loader.mjs +15 -1
  16. package/dist/mutate/node-batch.mjs +40 -3
  17. package/dist/mutate/node-coverage.mjs +7 -32
  18. package/dist/mutate/operators.js +60 -1
  19. package/dist/mutate/patch.js +2 -1
  20. package/dist/mutate/precise-lines.mjs +147 -31
  21. package/dist/mutate/probatio-jacoco-run.java +2 -2
  22. package/dist/mutate/project-config.js +58 -0
  23. package/dist/mutate/run.js +100 -19
  24. package/dist/mutate/sealed.js +54 -0
  25. package/dist/mutate/suite-decision.js +2 -1
  26. package/dist/mutate/suites.js +87 -155
  27. package/dist/mutate/tally.js +54 -26
  28. package/dist/mutate/text-operators.js +92 -2
  29. package/dist/swarm/check-kill.js +14 -7
  30. package/dist/verify/change.js +1 -1
  31. package/package.json +8 -4
  32. package/schemas/check-kill.schema.json +93 -0
  33. package/schemas/findings.add.schema.json +53 -0
  34. package/schemas/gap.fix.schema.json +53 -0
  35. package/schemas/gap.revert.schema.json +53 -0
  36. package/schemas/golden.check.schema.json +89 -0
  37. package/schemas/golden.compare.schema.json +151 -0
  38. package/schemas/golden.record.schema.json +126 -0
  39. package/schemas/guard.check.schema.json +53 -0
  40. package/schemas/ledger.build.schema.json +132 -0
  41. package/schemas/ledger.check.schema.json +143 -0
  42. package/schemas/matrix.report.schema.json +129 -0
  43. package/schemas/mcp.schema.json +53 -0
  44. package/schemas/mutate.generate.schema.json +127 -0
  45. package/schemas/mutate.help.schema.json +53 -0
  46. package/schemas/mutate.run.schema.json +272 -0
  47. package/schemas/mutate.sealed.schema.json +53 -0
  48. package/schemas/mutate.tally.schema.json +137 -0
  49. package/schemas/queue.claim.schema.json +53 -0
  50. package/schemas/queue.reap.schema.json +71 -0
  51. package/schemas/queue.seed.schema.json +71 -0
  52. package/schemas/schema.schema.json +74 -0
  53. package/schemas/seal.schema.json +69 -0
  54. package/schemas/status.schema.json +103 -0
  55. package/schemas/verify-change.schema.json +222 -0
@@ -0,0 +1,127 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/mutate.generate.schema.json",
4
+ "title": "probatio mutate.generate",
5
+ "description": "Writes operator mutants as forward patches. Strings and comments are never mutated. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "ok",
10
+ "command",
11
+ "summary",
12
+ "next",
13
+ "nextCall"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 2
18
+ },
19
+ "ok": {
20
+ "type": "boolean"
21
+ },
22
+ "command": {
23
+ "const": "mutate.generate"
24
+ },
25
+ "summary": {
26
+ "type": "string"
27
+ },
28
+ "next": {
29
+ "type": "string"
30
+ },
31
+ "nextCall": {
32
+ "oneOf": [
33
+ {
34
+ "type": "null"
35
+ },
36
+ {
37
+ "type": "object",
38
+ "properties": {
39
+ "argv": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "argv"
48
+ ]
49
+ }
50
+ ]
51
+ },
52
+ "mutantCount": {
53
+ "type": "integer",
54
+ "minimum": 0
55
+ },
56
+ "operators": {
57
+ "enum": [
58
+ "core",
59
+ "wide"
60
+ ]
61
+ },
62
+ "stringLiteralMutants": {
63
+ "type": "integer",
64
+ "minimum": 0
65
+ },
66
+ "filesVisited": {
67
+ "type": "integer",
68
+ "minimum": 0
69
+ },
70
+ "budgetHit": {
71
+ "type": "boolean"
72
+ },
73
+ "mutants": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "object",
77
+ "properties": {
78
+ "id": {
79
+ "type": "string"
80
+ },
81
+ "file": {
82
+ "type": "string"
83
+ },
84
+ "line": {
85
+ "type": "integer",
86
+ "minimum": 0
87
+ },
88
+ "op": {
89
+ "type": "string"
90
+ }
91
+ },
92
+ "required": [
93
+ "id",
94
+ "file",
95
+ "line",
96
+ "op"
97
+ ]
98
+ }
99
+ },
100
+ "rest": {
101
+ "type": "integer",
102
+ "minimum": 0
103
+ },
104
+ "full": {
105
+ "type": "string"
106
+ }
107
+ },
108
+ "if": {
109
+ "properties": {
110
+ "ok": {
111
+ "const": true
112
+ }
113
+ }
114
+ },
115
+ "then": {
116
+ "required": [
117
+ "mutantCount",
118
+ "operators",
119
+ "stringLiteralMutants",
120
+ "filesVisited",
121
+ "budgetHit",
122
+ "mutants",
123
+ "rest",
124
+ "full"
125
+ ]
126
+ }
127
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/mutate.help.schema.json",
4
+ "title": "probatio mutate.help",
5
+ "description": "Usage, or a command that could not be parsed. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "ok",
10
+ "command",
11
+ "summary",
12
+ "next",
13
+ "nextCall"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 2
18
+ },
19
+ "ok": {
20
+ "type": "boolean"
21
+ },
22
+ "command": {
23
+ "const": "mutate.help"
24
+ },
25
+ "summary": {
26
+ "type": "string"
27
+ },
28
+ "next": {
29
+ "type": "string"
30
+ },
31
+ "nextCall": {
32
+ "oneOf": [
33
+ {
34
+ "type": "null"
35
+ },
36
+ {
37
+ "type": "object",
38
+ "properties": {
39
+ "argv": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "argv"
48
+ ]
49
+ }
50
+ ]
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,272 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/mutate.run.schema.json",
4
+ "title": "probatio mutate.run",
5
+ "description": "Scores a batch of mutants against the project's own suite. mutate sealed prints this shape too, with fixEdited and olderTestCatch. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "ok",
10
+ "command",
11
+ "summary",
12
+ "next",
13
+ "nextCall"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 2
18
+ },
19
+ "ok": {
20
+ "type": "boolean"
21
+ },
22
+ "command": {
23
+ "const": "mutate.run"
24
+ },
25
+ "summary": {
26
+ "type": "string"
27
+ },
28
+ "next": {
29
+ "type": "string"
30
+ },
31
+ "nextCall": {
32
+ "oneOf": [
33
+ {
34
+ "type": "null"
35
+ },
36
+ {
37
+ "type": "object",
38
+ "properties": {
39
+ "argv": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "argv"
48
+ ]
49
+ }
50
+ ]
51
+ },
52
+ "killed": {
53
+ "type": "integer",
54
+ "minimum": 0
55
+ },
56
+ "unviable": {
57
+ "type": "integer",
58
+ "minimum": 0
59
+ },
60
+ "unviableIds": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "string"
64
+ }
65
+ },
66
+ "survived": {
67
+ "type": "integer",
68
+ "minimum": 0
69
+ },
70
+ "flaky": {
71
+ "type": "integer",
72
+ "minimum": 0
73
+ },
74
+ "timeouts": {
75
+ "type": "integer",
76
+ "minimum": 0
77
+ },
78
+ "errors": {
79
+ "type": "integer",
80
+ "minimum": 0
81
+ },
82
+ "noCoverage": {
83
+ "type": "integer",
84
+ "minimum": 0
85
+ },
86
+ "notStarted": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "string"
90
+ }
91
+ },
92
+ "suiteCommand": {
93
+ "type": "string"
94
+ },
95
+ "baselineMs": {
96
+ "type": [
97
+ "number",
98
+ "null"
99
+ ]
100
+ },
101
+ "commands": {
102
+ "type": "array",
103
+ "items": {
104
+ "type": "object",
105
+ "properties": {
106
+ "id": {
107
+ "type": "string"
108
+ },
109
+ "outcome": {
110
+ "type": "string"
111
+ },
112
+ "command": {
113
+ "type": "string"
114
+ },
115
+ "wholeSuite": {
116
+ "type": "boolean"
117
+ },
118
+ "reused": {
119
+ "type": "boolean"
120
+ },
121
+ "cause": {
122
+ "enum": [
123
+ null,
124
+ "test",
125
+ "build"
126
+ ]
127
+ },
128
+ "next": {
129
+ "type": "string"
130
+ }
131
+ },
132
+ "required": [
133
+ "id",
134
+ "outcome",
135
+ "command"
136
+ ]
137
+ }
138
+ },
139
+ "gaps": {
140
+ "type": "array",
141
+ "items": {
142
+ "type": "object",
143
+ "properties": {
144
+ "id": {
145
+ "type": "string"
146
+ },
147
+ "file": {
148
+ "type": "string"
149
+ },
150
+ "line": {
151
+ "type": "integer",
152
+ "minimum": 0
153
+ },
154
+ "op": {
155
+ "type": "string"
156
+ }
157
+ },
158
+ "required": [
159
+ "id",
160
+ "file",
161
+ "line"
162
+ ]
163
+ }
164
+ },
165
+ "rest": {
166
+ "type": "integer",
167
+ "minimum": 0
168
+ },
169
+ "flakyIds": {
170
+ "type": "array",
171
+ "items": {
172
+ "type": "string"
173
+ }
174
+ },
175
+ "budgetHit": {
176
+ "type": "boolean"
177
+ },
178
+ "commit": {
179
+ "type": "string"
180
+ },
181
+ "runId": {
182
+ "type": "string"
183
+ },
184
+ "kills": {
185
+ "type": "array",
186
+ "items": {
187
+ "type": "object",
188
+ "properties": {
189
+ "id": {
190
+ "type": "string"
191
+ },
192
+ "cause": {
193
+ "enum": [
194
+ "test",
195
+ "build"
196
+ ]
197
+ },
198
+ "killedBy": {
199
+ "type": "array",
200
+ "items": {
201
+ "type": "string"
202
+ }
203
+ },
204
+ "next": {
205
+ "type": "string"
206
+ },
207
+ "files": {
208
+ "type": "array",
209
+ "items": {
210
+ "type": "object",
211
+ "properties": {
212
+ "file": {
213
+ "type": "string"
214
+ },
215
+ "line": {
216
+ "type": "integer",
217
+ "minimum": 0
218
+ }
219
+ },
220
+ "required": [
221
+ "file",
222
+ "line"
223
+ ]
224
+ }
225
+ }
226
+ },
227
+ "required": [
228
+ "id",
229
+ "killedBy"
230
+ ]
231
+ }
232
+ },
233
+ "full": {
234
+ "type": "string"
235
+ },
236
+ "fixEdited": {
237
+ "type": "array",
238
+ "items": {
239
+ "type": "string"
240
+ }
241
+ },
242
+ "olderTestCatch": {
243
+ "type": "boolean"
244
+ }
245
+ },
246
+ "if": {
247
+ "properties": {
248
+ "ok": {
249
+ "const": true
250
+ }
251
+ }
252
+ },
253
+ "then": {
254
+ "required": [
255
+ "killed",
256
+ "unviable",
257
+ "unviableIds",
258
+ "survived",
259
+ "flaky",
260
+ "timeouts",
261
+ "errors",
262
+ "noCoverage",
263
+ "notStarted",
264
+ "gaps",
265
+ "rest",
266
+ "kills",
267
+ "commit",
268
+ "runId",
269
+ "full"
270
+ ]
271
+ }
272
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/mutate.sealed.schema.json",
4
+ "title": "probatio mutate.sealed",
5
+ "description": "Printed instead of the run report when the sealed label leaked into it. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "ok",
10
+ "command",
11
+ "summary",
12
+ "next",
13
+ "nextCall"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 2
18
+ },
19
+ "ok": {
20
+ "type": "boolean"
21
+ },
22
+ "command": {
23
+ "const": "mutate.sealed"
24
+ },
25
+ "summary": {
26
+ "type": "string"
27
+ },
28
+ "next": {
29
+ "type": "string"
30
+ },
31
+ "nextCall": {
32
+ "oneOf": [
33
+ {
34
+ "type": "null"
35
+ },
36
+ {
37
+ "type": "object",
38
+ "properties": {
39
+ "argv": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "argv"
48
+ ]
49
+ }
50
+ ]
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,137 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/mutate.tally.schema.json",
4
+ "title": "probatio mutate.tally",
5
+ "description": "Reads a finished run: tests to keep, tests that saw no kill in this batch, and one gap per survivor. Never deletes a test. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "ok",
10
+ "command",
11
+ "summary",
12
+ "next",
13
+ "nextCall"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 2
18
+ },
19
+ "ok": {
20
+ "type": "boolean"
21
+ },
22
+ "command": {
23
+ "const": "mutate.tally"
24
+ },
25
+ "summary": {
26
+ "type": "string"
27
+ },
28
+ "next": {
29
+ "type": "string"
30
+ },
31
+ "nextCall": {
32
+ "oneOf": [
33
+ {
34
+ "type": "null"
35
+ },
36
+ {
37
+ "type": "object",
38
+ "properties": {
39
+ "argv": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "argv"
48
+ ]
49
+ }
50
+ ]
51
+ },
52
+ "keep": {
53
+ "type": "array",
54
+ "items": {
55
+ "type": "string"
56
+ }
57
+ },
58
+ "noKillsYet": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "string"
62
+ }
63
+ },
64
+ "gaps": {
65
+ "type": "array",
66
+ "items": {
67
+ "type": "object",
68
+ "properties": {
69
+ "id": {
70
+ "type": "string"
71
+ },
72
+ "file": {
73
+ "type": "string"
74
+ },
75
+ "line": {
76
+ "type": "integer",
77
+ "minimum": 0
78
+ },
79
+ "outcome": {
80
+ "const": "survived"
81
+ }
82
+ },
83
+ "required": [
84
+ "id",
85
+ "file",
86
+ "line",
87
+ "outcome"
88
+ ]
89
+ }
90
+ },
91
+ "rest": {
92
+ "type": "integer",
93
+ "minimum": 0
94
+ },
95
+ "pruning": {
96
+ "type": "object",
97
+ "properties": {
98
+ "mode": {
99
+ "const": "advisory"
100
+ },
101
+ "deletedTests": {
102
+ "const": 0
103
+ },
104
+ "advice": {
105
+ "type": "array",
106
+ "items": {
107
+ "type": "string"
108
+ }
109
+ }
110
+ },
111
+ "required": [
112
+ "mode",
113
+ "deletedTests"
114
+ ]
115
+ },
116
+ "full": {
117
+ "type": "string"
118
+ }
119
+ },
120
+ "if": {
121
+ "properties": {
122
+ "ok": {
123
+ "const": true
124
+ }
125
+ }
126
+ },
127
+ "then": {
128
+ "required": [
129
+ "keep",
130
+ "noKillsYet",
131
+ "gaps",
132
+ "rest",
133
+ "pruning",
134
+ "full"
135
+ ]
136
+ }
137
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/queue.claim.schema.json",
4
+ "title": "probatio queue.claim",
5
+ "description": "Claims a queue item with a lease, by atomic rename. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "ok",
10
+ "command",
11
+ "summary",
12
+ "next",
13
+ "nextCall"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 2
18
+ },
19
+ "ok": {
20
+ "type": "boolean"
21
+ },
22
+ "command": {
23
+ "const": "queue.claim"
24
+ },
25
+ "summary": {
26
+ "type": "string"
27
+ },
28
+ "next": {
29
+ "type": "string"
30
+ },
31
+ "nextCall": {
32
+ "oneOf": [
33
+ {
34
+ "type": "null"
35
+ },
36
+ {
37
+ "type": "object",
38
+ "properties": {
39
+ "argv": {
40
+ "type": "array",
41
+ "items": {
42
+ "type": "string"
43
+ }
44
+ }
45
+ },
46
+ "required": [
47
+ "argv"
48
+ ]
49
+ }
50
+ ]
51
+ }
52
+ }
53
+ }