@skillstech/thunderlang 0.1.7 → 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.
@@ -41,7 +41,8 @@
41
41
  "Event",
42
42
  "FailureHandler",
43
43
  "Decision",
44
- "Rule"
44
+ "Rule",
45
+ "Skill"
45
46
  ],
46
47
  "relationshipTypes": [
47
48
  "supported_by",
@@ -63,7 +64,8 @@
63
64
  "blocks",
64
65
  "teaches",
65
66
  "generated_from",
66
- "transitions_to"
67
+ "transitions_to",
68
+ "requires_skill"
67
69
  ],
68
70
  "classifications": [
69
71
  "observed",
@@ -76,6 +78,8 @@
76
78
  ],
77
79
  "diagnostics": [
78
80
  {
81
+ "owner": "IL",
82
+ "phase": "author",
79
83
  "ruleId": "IL-PM-001",
80
84
  "area": "product",
81
85
  "severity": "warning",
@@ -85,6 +89,8 @@
85
89
  "summary": "Metric has no measurement window."
86
90
  },
87
91
  {
92
+ "owner": "IL",
93
+ "phase": "author",
88
94
  "ruleId": "IL-PM-003",
89
95
  "area": "product",
90
96
  "severity": "warning",
@@ -92,6 +98,8 @@
92
98
  "summary": "Outcome has no metric."
93
99
  },
94
100
  {
101
+ "owner": "IL",
102
+ "phase": "author",
95
103
  "ruleId": "IL-EV-001",
96
104
  "area": "evidence",
97
105
  "severity": "info",
@@ -99,6 +107,8 @@
99
107
  "summary": "Evidence has no classification."
100
108
  },
101
109
  {
110
+ "owner": "IL",
111
+ "phase": "author",
102
112
  "ruleId": "IL-EV-002",
103
113
  "area": "evidence",
104
114
  "severity": "warning",
@@ -106,6 +116,8 @@
106
116
  "summary": "Evidence has an unknown classification."
107
117
  },
108
118
  {
119
+ "owner": "IL",
120
+ "phase": "author",
109
121
  "ruleId": "IL-GRAPH-010",
110
122
  "area": "graph",
111
123
  "severity": "blocker",
@@ -115,6 +127,8 @@
115
127
  "summary": "Unresolved unknown blocks a phase."
116
128
  },
117
129
  {
130
+ "owner": "IL",
131
+ "phase": "author",
118
132
  "ruleId": "IL-GRAPH-011",
119
133
  "area": "graph",
120
134
  "severity": "blocker",
@@ -124,6 +138,8 @@
124
138
  "summary": "Open question blocks a phase."
125
139
  },
126
140
  {
141
+ "owner": "IL",
142
+ "phase": "author",
127
143
  "ruleId": "IL-EXP-001",
128
144
  "area": "experience",
129
145
  "severity": "info",
@@ -131,6 +147,8 @@
131
147
  "summary": "Experience declares no states."
132
148
  },
133
149
  {
150
+ "owner": "IL",
151
+ "phase": "author",
134
152
  "ruleId": "IL-EXP-004",
135
153
  "area": "experience",
136
154
  "severity": "blocker",
@@ -141,6 +159,8 @@
141
159
  "summary": "Failure state has no recovery path."
142
160
  },
143
161
  {
162
+ "owner": "IL",
163
+ "phase": "author",
144
164
  "ruleId": "IL-CONFLICT-001",
145
165
  "area": "conflict",
146
166
  "severity": "blocker",
@@ -150,6 +170,8 @@
150
170
  "summary": "Declared conflict is unresolved."
151
171
  },
152
172
  {
173
+ "owner": "IL",
174
+ "phase": "author",
153
175
  "ruleId": "IL-CONFLICT-010",
154
176
  "area": "conflict",
155
177
  "severity": "blocker",
@@ -159,6 +181,8 @@
159
181
  "summary": "Scope includes and excludes the same item."
160
182
  },
161
183
  {
184
+ "owner": "IL",
185
+ "phase": "author",
162
186
  "ruleId": "IL-CONFLICT-011",
163
187
  "area": "conflict",
164
188
  "severity": "info",
@@ -166,6 +190,8 @@
166
190
  "summary": "Redundant constraint from multiple roles."
167
191
  },
168
192
  {
193
+ "owner": "IL",
194
+ "phase": "author",
169
195
  "ruleId": "IL-CONFLICT-012",
170
196
  "area": "conflict",
171
197
  "severity": "blocker",
@@ -175,6 +201,8 @@
175
201
  "summary": "Directly contradictory constraints."
176
202
  },
177
203
  {
204
+ "owner": "IL",
205
+ "phase": "author",
178
206
  "ruleId": "IL-GOV-001",
179
207
  "area": "governance",
180
208
  "severity": "error",
@@ -182,6 +210,8 @@
182
210
  "summary": "Waiver names no diagnostic code."
183
211
  },
184
212
  {
213
+ "owner": "IL",
214
+ "phase": "author",
185
215
  "ruleId": "IL-GOV-002",
186
216
  "area": "governance",
187
217
  "severity": "error",
@@ -189,6 +219,8 @@
189
219
  "summary": "Waiver has no reason."
190
220
  },
191
221
  {
222
+ "owner": "IL",
223
+ "phase": "author",
192
224
  "ruleId": "IL-GOV-003",
193
225
  "area": "governance",
194
226
  "severity": "error",
@@ -196,6 +228,8 @@
196
228
  "summary": "Waiver names no approver."
197
229
  },
198
230
  {
231
+ "owner": "IL",
232
+ "phase": "author",
199
233
  "ruleId": "IL-GOV-004",
200
234
  "area": "governance",
201
235
  "severity": "warning",
@@ -203,6 +237,8 @@
203
237
  "summary": "Waiver matches no current diagnostic (stale)."
204
238
  },
205
239
  {
240
+ "owner": "IL",
241
+ "phase": "author",
206
242
  "ruleId": "IL-GOV-005",
207
243
  "area": "governance",
208
244
  "severity": "error",
@@ -210,6 +246,8 @@
210
246
  "summary": "Waiver has expired."
211
247
  },
212
248
  {
249
+ "owner": "IL",
250
+ "phase": "author",
213
251
  "ruleId": "IL-DATA-001",
214
252
  "area": "privacy",
215
253
  "severity": "blocker",
@@ -219,6 +257,8 @@
219
257
  "summary": "Sensitive data held with no stated purpose."
220
258
  },
221
259
  {
260
+ "owner": "IL",
261
+ "phase": "author",
222
262
  "ruleId": "IL-DATA-002",
223
263
  "area": "privacy",
224
264
  "severity": "warning",
@@ -226,6 +266,8 @@
226
266
  "summary": "Sensitive data has no retention rule."
227
267
  },
228
268
  {
269
+ "owner": "IL",
270
+ "phase": "author",
229
271
  "ruleId": "IL-DATA-003",
230
272
  "area": "privacy",
231
273
  "severity": "blocker",
@@ -235,6 +277,8 @@
235
277
  "summary": "Sensitive data declares no lawful basis."
236
278
  },
237
279
  {
280
+ "owner": "IL",
281
+ "phase": "author",
238
282
  "ruleId": "IL-DATA-004",
239
283
  "area": "privacy",
240
284
  "severity": "warning",
@@ -242,6 +286,8 @@
242
286
  "summary": "Data has an unknown classification."
243
287
  },
244
288
  {
289
+ "owner": "IL",
290
+ "phase": "author",
245
291
  "ruleId": "IL-DATA-005",
246
292
  "area": "privacy",
247
293
  "severity": "warning",
@@ -249,6 +295,8 @@
249
295
  "summary": "Unrecognized lawful basis."
250
296
  },
251
297
  {
298
+ "owner": "IL",
299
+ "phase": "author",
252
300
  "ruleId": "IL-DATA-006",
253
301
  "area": "privacy",
254
302
  "severity": "warning",
@@ -256,6 +304,8 @@
256
304
  "summary": "Sensitive data exposed as output with no guard."
257
305
  },
258
306
  {
307
+ "owner": "IL",
308
+ "phase": "author",
259
309
  "ruleId": "IL-OC-001",
260
310
  "area": "outcome",
261
311
  "severity": "blocker",
@@ -265,6 +315,8 @@
265
315
  "summary": "Outcome contract has no target (cannot be evaluated)."
266
316
  },
267
317
  {
318
+ "owner": "IL",
319
+ "phase": "author",
268
320
  "ruleId": "IL-OC-002",
269
321
  "area": "outcome",
270
322
  "severity": "warning",
@@ -272,6 +324,8 @@
272
324
  "summary": "Outcome contract names no metric."
273
325
  },
274
326
  {
327
+ "owner": "IL",
328
+ "phase": "author",
275
329
  "ruleId": "IL-OC-003",
276
330
  "area": "outcome",
277
331
  "severity": "blocker",
@@ -281,6 +335,8 @@
281
335
  "summary": "Outcome contract has no measurement window."
282
336
  },
283
337
  {
338
+ "owner": "IL",
339
+ "phase": "author",
284
340
  "ruleId": "IL-OC-004",
285
341
  "area": "outcome",
286
342
  "severity": "warning",
@@ -288,6 +344,8 @@
288
344
  "summary": "Outcome contract target is not better than its baseline."
289
345
  },
290
346
  {
347
+ "owner": "IL",
348
+ "phase": "author",
291
349
  "ruleId": "IL-OC-005",
292
350
  "area": "outcome",
293
351
  "severity": "warning",
@@ -295,6 +353,8 @@
295
353
  "summary": "Outcome contract has a target but no guardrails (the target is gameable)."
296
354
  },
297
355
  {
356
+ "owner": "IL",
357
+ "phase": "author",
298
358
  "ruleId": "IL-OC-006",
299
359
  "area": "outcome",
300
360
  "severity": "info",
@@ -302,6 +362,8 @@
302
362
  "summary": "Outcome contract has no attribution (correlation is not causation)."
303
363
  },
304
364
  {
365
+ "owner": "IL",
366
+ "phase": "author",
305
367
  "ruleId": "IL-DEC-001",
306
368
  "area": "decision",
307
369
  "severity": "blocker",
@@ -311,6 +373,8 @@
311
373
  "summary": "Decision has no default (undefined when no rule matches)."
312
374
  },
313
375
  {
376
+ "owner": "IL",
377
+ "phase": "author",
314
378
  "ruleId": "IL-DEC-002",
315
379
  "area": "decision",
316
380
  "severity": "blocker",
@@ -320,6 +384,8 @@
320
384
  "summary": "Two rules fire on the same condition with different results."
321
385
  },
322
386
  {
387
+ "owner": "IL",
388
+ "phase": "author",
323
389
  "ruleId": "IL-DEC-003",
324
390
  "area": "decision",
325
391
  "severity": "info",
@@ -327,6 +393,8 @@
327
393
  "summary": "Redundant rule, identical to another (dead)."
328
394
  },
329
395
  {
396
+ "owner": "IL",
397
+ "phase": "author",
330
398
  "ruleId": "IL-DEC-004",
331
399
  "area": "decision",
332
400
  "severity": "warning",
@@ -334,6 +402,8 @@
334
402
  "summary": "Decision has no rules."
335
403
  },
336
404
  {
405
+ "owner": "IL",
406
+ "phase": "author",
337
407
  "ruleId": "IL-DIST-001",
338
408
  "area": "distributed",
339
409
  "severity": "blocker",
@@ -343,6 +413,8 @@
343
413
  "summary": "Retry without an idempotency key (duplicates work)."
344
414
  },
345
415
  {
416
+ "owner": "IL",
417
+ "phase": "author",
346
418
  "ruleId": "IL-DIST-002",
347
419
  "area": "distributed",
348
420
  "severity": "blocker",
@@ -352,6 +424,8 @@
352
424
  "summary": "Retried or remote command with no timeout."
353
425
  },
354
426
  {
427
+ "owner": "IL",
428
+ "phase": "author",
355
429
  "ruleId": "IL-DIST-003",
356
430
  "area": "distributed",
357
431
  "severity": "blocker",
@@ -361,6 +435,8 @@
361
435
  "summary": "At-least-once delivery without duplicate handling."
362
436
  },
363
437
  {
438
+ "owner": "IL",
439
+ "phase": "author",
364
440
  "ruleId": "IL-DIST-004",
365
441
  "area": "distributed",
366
442
  "severity": "blocker",
@@ -370,6 +446,8 @@
370
446
  "summary": "Permanent failure with no compensation."
371
447
  },
372
448
  {
449
+ "owner": "IL",
450
+ "phase": "author",
373
451
  "ruleId": "IL-DIST-005",
374
452
  "area": "distributed",
375
453
  "severity": "error",
@@ -377,6 +455,8 @@
377
455
  "summary": "Handler references an undeclared event."
378
456
  },
379
457
  {
458
+ "owner": "IL",
459
+ "phase": "author",
380
460
  "ruleId": "IL-LIFE-001",
381
461
  "area": "lifecycle",
382
462
  "severity": "error",
@@ -384,6 +464,8 @@
384
464
  "summary": "Transition references an undefined state."
385
465
  },
386
466
  {
467
+ "owner": "IL",
468
+ "phase": "author",
387
469
  "ruleId": "IL-LIFE-002",
388
470
  "area": "lifecycle",
389
471
  "severity": "warning",
@@ -391,6 +473,8 @@
391
473
  "summary": "Unreachable state."
392
474
  },
393
475
  {
476
+ "owner": "IL",
477
+ "phase": "author",
394
478
  "ruleId": "IL-LIFE-003",
395
479
  "area": "lifecycle",
396
480
  "severity": "warning",
@@ -398,6 +482,8 @@
398
482
  "summary": "Non-terminal dead-end state (no way out)."
399
483
  },
400
484
  {
485
+ "owner": "IL",
486
+ "phase": "author",
401
487
  "ruleId": "IL-LIFE-004",
402
488
  "area": "lifecycle",
403
489
  "severity": "warning",
@@ -405,6 +491,8 @@
405
491
  "summary": "Lifecycle has no initial state."
406
492
  },
407
493
  {
494
+ "owner": "IL",
495
+ "phase": "author",
408
496
  "ruleId": "IL-TEMP-001",
409
497
  "area": "temporal",
410
498
  "severity": "blocker",
@@ -414,6 +502,8 @@
414
502
  "summary": "Eventually with no time bound (cannot be verified)."
415
503
  },
416
504
  {
505
+ "owner": "IL",
506
+ "phase": "author",
417
507
  "ruleId": "IL-STYLE-001",
418
508
  "area": "style",
419
509
  "severity": "warning",
@@ -421,6 +511,8 @@
421
511
  "summary": "Style intent binds a token outside the canonical address space."
422
512
  },
423
513
  {
514
+ "owner": "IL",
515
+ "phase": "author",
424
516
  "ruleId": "IL-STYLE-002",
425
517
  "area": "style",
426
518
  "severity": "warning",
@@ -428,6 +520,8 @@
428
520
  "summary": "Unrecognized accessibility target."
429
521
  },
430
522
  {
523
+ "owner": "IL",
524
+ "phase": "author",
431
525
  "ruleId": "IL-STYLE-003",
432
526
  "area": "style",
433
527
  "severity": "info",
@@ -435,6 +529,8 @@
435
529
  "summary": "Style intent declares no accessibility target (a proposed claim)."
436
530
  },
437
531
  {
532
+ "owner": "IL",
533
+ "phase": "author",
438
534
  "ruleId": "IL-STYLE-004",
439
535
  "area": "style",
440
536
  "severity": "warning",
@@ -442,6 +538,8 @@
442
538
  "summary": "Invalid mode token value."
443
539
  },
444
540
  {
541
+ "owner": "IL",
542
+ "phase": "author",
445
543
  "ruleId": "IL-STYLE-005",
446
544
  "area": "style",
447
545
  "severity": "info",
@@ -449,6 +547,8 @@
449
547
  "summary": "Style intent applies to an undeclared experience."
450
548
  },
451
549
  {
550
+ "owner": "IL",
551
+ "phase": "author",
452
552
  "ruleId": "IL-SEC-001",
453
553
  "area": "security",
454
554
  "severity": "blocker",
@@ -458,6 +558,8 @@
458
558
  "summary": "Secret-typed field travels over the event bus."
459
559
  },
460
560
  {
561
+ "owner": "IL",
562
+ "phase": "author",
461
563
  "ruleId": "IL-SEC-002",
462
564
  "area": "security",
463
565
  "severity": "blocker",
@@ -467,11 +569,130 @@
467
569
  "summary": "API returns a secret with no auth requirement."
468
570
  },
469
571
  {
572
+ "owner": "IL",
573
+ "phase": "author",
470
574
  "ruleId": "IL-TYPE-001",
471
575
  "area": "type",
472
576
  "severity": "info",
473
577
  "blocks": [],
474
578
  "summary": "Field uses an unrecognized (likely mistyped) type."
579
+ },
580
+ {
581
+ "owner": "IL",
582
+ "phase": "author",
583
+ "ruleId": "IL-12F-01",
584
+ "area": "twelve-factor",
585
+ "severity": "info",
586
+ "blocks": [],
587
+ "summary": "F1 Natural language to tool calls: model dispatch as a decision/command."
588
+ },
589
+ {
590
+ "owner": "IL",
591
+ "phase": "author",
592
+ "ruleId": "IL-12F-02",
593
+ "area": "twelve-factor",
594
+ "severity": "info",
595
+ "blocks": [],
596
+ "summary": "F2 Own your prompts: behavior is an owned, guaranteed contract, not a black box."
597
+ },
598
+ {
599
+ "owner": "IL",
600
+ "phase": "author",
601
+ "ruleId": "IL-12F-03",
602
+ "area": "twelve-factor",
603
+ "severity": "info",
604
+ "blocks": [],
605
+ "summary": "F3 Own your context window: declare a scope boundary."
606
+ },
607
+ {
608
+ "owner": "IL",
609
+ "phase": "author",
610
+ "ruleId": "IL-12F-04",
611
+ "area": "twelve-factor",
612
+ "severity": "info",
613
+ "blocks": [],
614
+ "summary": "F4 Tools are structured outputs: typed I/O + discriminated results."
615
+ },
616
+ {
617
+ "owner": "IL",
618
+ "phase": "author",
619
+ "ruleId": "IL-12F-05",
620
+ "area": "twelve-factor",
621
+ "severity": "info",
622
+ "blocks": [],
623
+ "summary": "F5 Unify execution + business state: one lifecycle/state model."
624
+ },
625
+ {
626
+ "owner": "IL",
627
+ "phase": "author",
628
+ "ruleId": "IL-12F-06",
629
+ "area": "twelve-factor",
630
+ "severity": "info",
631
+ "blocks": [],
632
+ "summary": "F6 Launch/pause/resume: a resumable lifecycle with waiting + terminal states."
633
+ },
634
+ {
635
+ "owner": "IL",
636
+ "phase": "author",
637
+ "ruleId": "IL-12F-07",
638
+ "area": "twelve-factor",
639
+ "severity": "info",
640
+ "blocks": [],
641
+ "summary": "F7 Contact humans with tool calls: a structured approval/human-input gate."
642
+ },
643
+ {
644
+ "owner": "IL",
645
+ "phase": "author",
646
+ "ruleId": "IL-12F-08",
647
+ "area": "twelve-factor",
648
+ "severity": "info",
649
+ "blocks": [],
650
+ "summary": "F8 Own your control flow: decisions with an explicit default (total control flow)."
651
+ },
652
+ {
653
+ "owner": "IL",
654
+ "phase": "author",
655
+ "ruleId": "IL-12F-09",
656
+ "area": "twelve-factor",
657
+ "severity": "info",
658
+ "blocks": [],
659
+ "summary": "F9 Compact errors into context: named errors + handlers (bounded retry)."
660
+ },
661
+ {
662
+ "owner": "IL",
663
+ "phase": "author",
664
+ "ruleId": "IL-12F-10",
665
+ "area": "twelve-factor",
666
+ "severity": "info",
667
+ "blocks": [],
668
+ "summary": "F10 Small, focused agents: keep operations within ~10 steps (20 max)."
669
+ },
670
+ {
671
+ "owner": "IL",
672
+ "phase": "author",
673
+ "ruleId": "IL-12F-11",
674
+ "area": "twelve-factor",
675
+ "severity": "info",
676
+ "blocks": [],
677
+ "summary": "F11 Trigger from anywhere: declare event triggers."
678
+ },
679
+ {
680
+ "owner": "IL",
681
+ "phase": "author",
682
+ "ruleId": "IL-12F-12",
683
+ "area": "twelve-factor",
684
+ "severity": "info",
685
+ "blocks": [],
686
+ "summary": "F12 Stateless reducer: pure, replayable decision/lifecycle logic."
687
+ },
688
+ {
689
+ "owner": "IL",
690
+ "phase": "author",
691
+ "ruleId": "IL-12F-13",
692
+ "area": "twelve-factor",
693
+ "severity": "info",
694
+ "blocks": [],
695
+ "summary": "F13 Pre-fetch context: declare inputs so known data is fetched up front."
475
696
  }
476
697
  ],
477
698
  "jsonSchema": {
@@ -561,7 +782,8 @@
561
782
  "Event",
562
783
  "FailureHandler",
563
784
  "Decision",
564
- "Rule"
785
+ "Rule",
786
+ "Skill"
565
787
  ]
566
788
  },
567
789
  "title": {
@@ -674,7 +896,8 @@
674
896
  "blocks",
675
897
  "teaches",
676
898
  "generated_from",
677
- "transitions_to"
899
+ "transitions_to",
900
+ "requires_skill"
678
901
  ]
679
902
  },
680
903
  "to": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillstech/thunderlang",
3
- "version": "0.1.7",
3
+ "version": "0.3.0",
4
4
  "description": "Deterministic ThunderLang compiler, CLI, and Language Server. No AI required. Turns .thunder files into the canonical Intent Graph, docs, and a proof, and EXECUTES the intent: run decisions, simulate lifecycles, and check outcome contracts. Interops with DMN, BPMN, JSON Schema, and OpenAPI.",
5
5
  "type": "module",
6
6
  "main": "./src/index.mjs",