@1aboveio/skills 0.20.1 → 0.20.3

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 (94) hide show
  1. package/README.md +12 -5
  2. package/package.json +1 -1
  3. package/runtime/skills/distribution/generated/recipes.json +220 -25
  4. package/runtime/skills/distribution/scripts/bundles.mjs +49 -5
  5. package/runtime/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -0
  6. package/runtime/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
  7. package/skills/cicd-pipeline/cloud-build/SKILL.md +6 -6
  8. package/skills/compliance/compliance-audit/LICENSE +3 -0
  9. package/skills/compliance/compliance-audit/SKILL.md +466 -0
  10. package/skills/compliance/compliance-audit/references/findings-schema.md +290 -0
  11. package/skills/compliance/compliance-audit/references/vars-checklist.md +1068 -0
  12. package/skills/compliance/compliance-audit/references/vars-findings-schema.md +395 -0
  13. package/skills/compliance/compliance-audit/scripts/reconcile_tracker.py +454 -0
  14. package/skills/compliance/compliance-audit/scripts/test_validate_tracker.py +90 -0
  15. package/skills/compliance/compliance-audit/scripts/validate_tracker.py +752 -0
  16. package/skills/compliance/doc-authenticity/LICENSE +3 -0
  17. package/skills/compliance/doc-authenticity/SKILL.md +158 -0
  18. package/skills/compliance/doc-authenticity/references/agreement.md +66 -0
  19. package/skills/compliance/doc-authenticity/references/bank-statement.md +150 -0
  20. package/skills/compliance/doc-authenticity/references/forensic-signals.md +157 -0
  21. package/skills/compliance/doc-authenticity/references/image-signals.md +114 -0
  22. package/skills/compliance/doc-authenticity/references/invoice.md +66 -0
  23. package/skills/compliance/doc-authenticity/references/issuer-profiles.md +86 -0
  24. package/skills/compliance/doc-authenticity/references/verdict-and-report.md +95 -0
  25. package/skills/compliance/doc-authenticity/references/verdict.schema.json +81 -0
  26. package/skills/compliance/doc-authenticity/scripts/image_forensics.py +294 -0
  27. package/skills/compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
  28. package/skills/compliance/doc-authenticity/scripts/validate_codes.py +224 -0
  29. package/skills/compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
  30. package/skills/compliance/report-writing/LICENSE +3 -0
  31. package/skills/compliance/report-writing/SKILL.md +206 -0
  32. package/skills/compliance/report-writing/references/audit-report-template.md +121 -0
  33. package/skills/compliance/report-writing/references/external-assessment-template.md +167 -0
  34. package/skills/compliance/report-writing/references/management-report-template.md +145 -0
  35. package/skills/compliance/report-writing/references/vars-report-template.md +224 -0
  36. package/skills/document-utils/doc-to-md/LICENSE +3 -0
  37. package/skills/document-utils/doc-to-md/SKILL.md +77 -0
  38. package/skills/document-utils/doc-to-md/scripts/convert.py +157 -0
  39. package/skills/document-utils/reg-parser/LICENSE +3 -0
  40. package/skills/document-utils/reg-parser/SKILL.md +201 -0
  41. package/skills/document-utils/reg-parser/references/checklist-schema.md +223 -0
  42. package/skills/document-utils/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
  43. package/skills/document-utils/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
  44. package/skills/document-utils/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
  45. package/skills/document-utils/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
  46. package/skills/document-utils/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
  47. package/skills/document-utils/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
  48. package/skills/document-utils/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
  49. package/skills/document-utils/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
  50. package/skills/document-utils/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
  51. package/skills/document-utils/reg-parser/references/mandates/visa-vars.md +205 -0
  52. package/skills/document-utils/reg-parser/scripts/compare_checklist.py +228 -0
  53. package/skills/document-utils/reg-parser/scripts/dump_checklist.py +348 -0
  54. package/skills/document-utils/reg-parser/scripts/preprocess-mandate.sh +171 -0
  55. package/skills/document-utils/reg-parser/scripts/test_quarantine.sh +102 -0
  56. package/skills/document-utils/reg-parser/scripts/validate_checklist.py +532 -0
  57. package/skills/document-utils/reg-parser/scripts/validate_mandate.py +242 -0
  58. package/skills/engineering/engineering-runtime/coherence/workflow.json +17 -17
  59. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -0
  60. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
  61. package/skills/engineering/rush-release/SKILL.md +46 -25
  62. package/skills/engineering/rush-release/references/cut.md +21 -4
  63. package/skills/engineering/rush-release/references/preflight.md +25 -6
  64. package/skills/engineering/rush-release/references/promotion.md +70 -0
  65. package/skills/engineering/rush-release/references/publish.md +49 -16
  66. package/skills/engineering/rush-release/scripts/plan.mjs +33 -7
  67. package/skills/engineering/smoke/SKILL.md +4 -4
  68. package/skills/engineering/smoke/references/manifest.md +3 -3
  69. package/skills/payment/similar-domain/LICENSE +3 -0
  70. package/skills/payment/similar-domain/SKILL.md +178 -0
  71. package/skills/payment/similar-domain/references/entities.md +58 -0
  72. package/skills/payment/similar-domain/references/fingerprints.md +82 -0
  73. package/skills/payment/similar-domain/references/pivots.md +66 -0
  74. package/skills/payment/similar-domain/references/report-template.md +76 -0
  75. package/skills/payment/similar-domain/references/scoring.md +61 -0
  76. package/skills/payment/similar-domain/references/terminology.md +37 -0
  77. package/skills/payment/similar-domain/references/workflow.md +79 -0
  78. package/skills/payment/tld-detection/SKILL.md +76 -21
  79. package/skills/payment/tld-detection/references/clean.md +1 -1
  80. package/skills/payment/tld-detection/references/clustering.md +21 -6
  81. package/skills/payment/tld-detection/references/decision.md +7 -2
  82. package/skills/payment/tld-detection/references/fx-conversion.md +229 -0
  83. package/skills/payment/tld-detection/references/report-template.md +63 -27
  84. package/skills/payment/tld-detection/references/streams.md +90 -0
  85. package/skills/payment/tld-detection/references/terminology.md +15 -7
  86. package/skills/payment/tld-detection/references/workflow.md +1 -1
  87. package/skills/payment/tld-detection/scripts/detect_streams.py +542 -0
  88. package/skills/engineering/ensure-coverage/evals/evals.json +0 -125
  89. package/skills/engineering/rush-issues/evals/evals.json +0 -65
  90. package/skills/engineering/rush-release/evals/evals.json +0 -44
  91. package/skills/fullstack/shadcn/evals/evals.json +0 -90
  92. package/skills/payment/fraud-analysis/evals/evals.json +0 -40
  93. package/skills/payment/tld-detection/evals/evals.json +0 -107
  94. package/skills/payment/tld-detection/tests/test_detect_ladders.py +0 -132
package/README.md CHANGED
@@ -57,8 +57,8 @@ Running `install` with no `--group` opens the interactive bundle picker; `update
57
57
  - `--disable-tdd` — keep TDD installed but allow only explicit user invocation.
58
58
 
59
59
  Selecting several groups (interactive picker, repeated `--group`, or `--all`) installs their
60
- members as one native `skills add` per skill from the unpacked package, so one skill's failure is
61
- reported by name and never aborts the rest of the selection. Every native add uses `--yes` because
60
+ members as one native `skills add` per skill from the unpacked package. A failure is reported by
61
+ name, blocks only transitive dependents, and never aborts unrelated skills. Every native add uses `--yes` because
62
62
  `skills@1.5.22` has no independent `--symlink` flag: this selects the default canonical store plus
63
63
  per-harness symlinks without an installation-method prompt, and also confirms replacement of each
64
64
  planned same-named skill. The coordinator still owns group and new-member consent before planning.
@@ -69,7 +69,9 @@ planned same-named skill. The coordinator still owns group and new-member consen
69
69
  - `delivery-infrastructure` — Delivery Infrastructure: cloud-build, cloud-debug, cloud-deploy, docker, google-cloud, mergify, podman
70
70
  - `backend` — Backend: app-debug, python-backend
71
71
  - `data-science` — Data Science: airflow, pyspark
72
- - `payment` — Payment: fraud-analysis, payment-analysis, tld-detection
72
+ - `payment` — Payment: fraud-analysis, payment-analysis, tld-detection, similar-domain
73
+ - `document-utilities` — Document Utilities: doc-to-md, reg-parser (required: reg-parser -> doc-to-md)
74
+ - `compliance` — Compliance: compliance-audit, doc-authenticity, report-writing (required: compliance-audit -> doc-to-md; optional: compliance-audit -> reg-parser)
73
75
  - `fullstack` — Fullstack: better-auth, monorepo, nextjs-fullstack, prisma-setup, shadcn, zod-v4
74
76
 
75
77
  Internal dependencies, installed with the groups above and not selectable on their own: `harness-runtime`.
@@ -102,7 +104,8 @@ copy. The default is No; `--yes` accepts archival non-interactively. Removal is
102
104
  same pinned native Skills CLI, only after the declared replacement is installed or already current.
103
105
  Declined or failed archival remains in selection memory so a later update offers it again.
104
106
 
105
- Install and update are best-effort per skill: they continue after a single skill failure, summarize
107
+ Install and update are best-effort per skill: they continue after a single skill failure except for
108
+ skills whose required dependency is unavailable, summarize
106
109
  every skill as succeeded, unchanged, declined, or failed, and exit non-zero if anything failed. There
107
110
  is no rollback or transactional group update; the native CLI remains the sole filesystem write
108
111
  authority. Selection memory follows the same per-skill rule: it is rewritten when
@@ -130,7 +133,11 @@ npx skills@1.5.22 remove --global --agent universal claude-code --skill app-debu
130
133
  # Data Science
131
134
  npx skills@1.5.22 remove --global --agent universal claude-code --skill airflow pyspark
132
135
  # Payment
133
- npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis tld-detection
136
+ npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis tld-detection similar-domain
137
+ # Document Utilities
138
+ npx skills@1.5.22 remove --global --agent universal claude-code --skill doc-to-md reg-parser
139
+ # Compliance
140
+ npx skills@1.5.22 remove --global --agent universal claude-code --skill compliance-audit doc-authenticity report-writing
134
141
  # Fullstack
135
142
  npx skills@1.5.22 remove --global --agent universal claude-code --skill better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4
136
143
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1aboveio/skills",
3
- "version": "0.20.1",
3
+ "version": "0.20.3",
4
4
  "description": "Install the 1AboveIO first-party skill groups through the native Skills CLI.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -24,7 +24,7 @@
24
24
  "id": "first-party",
25
25
  "type": "first-party",
26
26
  "package": "@1aboveio/skills",
27
- "version": "0.20.1",
27
+ "version": "0.20.3",
28
28
  "updatePolicy": "pinned-npm-version",
29
29
  "members": [
30
30
  {
@@ -159,6 +159,51 @@
159
159
  "role": "skill",
160
160
  "licenseResponsibility": "1aboveio-mit"
161
161
  },
162
+ {
163
+ "installName": "similar-domain",
164
+ "path": "skills/payment/similar-domain",
165
+ "role": "skill",
166
+ "licenseResponsibility": "1aboveio-mit"
167
+ },
168
+ {
169
+ "installName": "doc-to-md",
170
+ "path": "skills/document-utils/doc-to-md",
171
+ "role": "skill",
172
+ "licenseResponsibility": "1aboveio-mit"
173
+ },
174
+ {
175
+ "installName": "reg-parser",
176
+ "path": "skills/document-utils/reg-parser",
177
+ "role": "skill",
178
+ "licenseResponsibility": "1aboveio-mit",
179
+ "requires": [
180
+ "doc-to-md"
181
+ ]
182
+ },
183
+ {
184
+ "installName": "compliance-audit",
185
+ "path": "skills/compliance/compliance-audit",
186
+ "role": "skill",
187
+ "licenseResponsibility": "1aboveio-mit",
188
+ "requires": [
189
+ "doc-to-md"
190
+ ],
191
+ "optionalRequires": [
192
+ "reg-parser"
193
+ ]
194
+ },
195
+ {
196
+ "installName": "doc-authenticity",
197
+ "path": "skills/compliance/doc-authenticity",
198
+ "role": "skill",
199
+ "licenseResponsibility": "1aboveio-mit"
200
+ },
201
+ {
202
+ "installName": "report-writing",
203
+ "path": "skills/compliance/report-writing",
204
+ "role": "skill",
205
+ "licenseResponsibility": "1aboveio-mit"
206
+ },
162
207
  {
163
208
  "installName": "better-auth",
164
209
  "path": "skills/fullstack/better-auth",
@@ -218,7 +263,7 @@
218
263
  "sourceId": "first-party",
219
264
  "sourceType": "first-party",
220
265
  "package": "@1aboveio/skills",
221
- "version": "0.20.1",
266
+ "version": "0.20.3",
222
267
  "installPath": null,
223
268
  "members": [
224
269
  "harness-runtime",
@@ -252,7 +297,7 @@
252
297
  "sourceId": "first-party",
253
298
  "sourceType": "first-party",
254
299
  "package": "@1aboveio/skills",
255
- "version": "0.20.1",
300
+ "version": "0.20.3",
256
301
  "installPath": null,
257
302
  "members": [
258
303
  "harness-runtime",
@@ -296,7 +341,7 @@
296
341
  "sourceId": "first-party",
297
342
  "sourceType": "first-party",
298
343
  "package": "@1aboveio/skills",
299
- "version": "0.20.1",
344
+ "version": "0.20.3",
300
345
  "installPath": null,
301
346
  "members": [
302
347
  "harness-runtime",
@@ -329,7 +374,7 @@
329
374
  "sourceId": "first-party",
330
375
  "sourceType": "first-party",
331
376
  "package": "@1aboveio/skills",
332
- "version": "0.20.1",
377
+ "version": "0.20.3",
333
378
  "installPath": null,
334
379
  "members": [
335
380
  "harness-runtime",
@@ -372,7 +417,7 @@
372
417
  "sourceId": "first-party",
373
418
  "sourceType": "first-party",
374
419
  "package": "@1aboveio/skills",
375
- "version": "0.20.1",
420
+ "version": "0.20.3",
376
421
  "installPath": null,
377
422
  "members": [
378
423
  "harness-runtime",
@@ -400,7 +445,7 @@
400
445
  "sourceId": "first-party",
401
446
  "sourceType": "first-party",
402
447
  "package": "@1aboveio/skills",
403
- "version": "0.20.1",
448
+ "version": "0.20.3",
404
449
  "installPath": null,
405
450
  "members": [
406
451
  "harness-runtime",
@@ -438,7 +483,7 @@
438
483
  "sourceId": "first-party",
439
484
  "sourceType": "first-party",
440
485
  "package": "@1aboveio/skills",
441
- "version": "0.20.1",
486
+ "version": "0.20.3",
442
487
  "installPath": null,
443
488
  "members": [
444
489
  "harness-runtime",
@@ -466,7 +511,7 @@
466
511
  "sourceId": "first-party",
467
512
  "sourceType": "first-party",
468
513
  "package": "@1aboveio/skills",
469
- "version": "0.20.1",
514
+ "version": "0.20.3",
470
515
  "installPath": null,
471
516
  "members": [
472
517
  "harness-runtime",
@@ -504,18 +549,19 @@
504
549
  "sourceId": "first-party",
505
550
  "sourceType": "first-party",
506
551
  "package": "@1aboveio/skills",
507
- "version": "0.20.1",
552
+ "version": "0.20.3",
508
553
  "installPath": null,
509
554
  "members": [
510
555
  "harness-runtime",
511
556
  "fraud-analysis",
512
557
  "payment-analysis",
513
- "tld-detection"
558
+ "tld-detection",
559
+ "similar-domain"
514
560
  ],
515
561
  "commands": [
516
562
  {
517
563
  "transport": "local",
518
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis tld-detection"
564
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis tld-detection similar-domain"
519
565
  }
520
566
  ],
521
567
  "onFailure": {
@@ -533,18 +579,155 @@
533
579
  "sourceId": "first-party",
534
580
  "sourceType": "first-party",
535
581
  "package": "@1aboveio/skills",
536
- "version": "0.20.1",
582
+ "version": "0.20.3",
537
583
  "installPath": null,
538
584
  "members": [
539
585
  "harness-runtime",
540
586
  "fraud-analysis",
541
587
  "payment-analysis",
542
- "tld-detection"
588
+ "tld-detection",
589
+ "similar-domain"
590
+ ],
591
+ "commands": [
592
+ {
593
+ "transport": "local",
594
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis tld-detection similar-domain"
595
+ }
596
+ ],
597
+ "onFailure": {
598
+ "action": "stop",
599
+ "message": "Source first-party fetch failed; stop this recipe before running another source."
600
+ }
601
+ }
602
+ ]
603
+ },
604
+ "uninstall": {
605
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis tld-detection similar-domain",
606
+ "removesDependencies": false
607
+ }
608
+ },
609
+ {
610
+ "id": "document-utilities",
611
+ "displayName": "Document Utilities",
612
+ "dependsOn": [
613
+ "harness-runtime"
614
+ ],
615
+ "install": {
616
+ "stopOnFailure": true,
617
+ "steps": [
618
+ {
619
+ "sourceId": "first-party",
620
+ "sourceType": "first-party",
621
+ "package": "@1aboveio/skills",
622
+ "version": "0.20.3",
623
+ "installPath": null,
624
+ "members": [
625
+ "harness-runtime",
626
+ "doc-to-md",
627
+ "reg-parser"
628
+ ],
629
+ "commands": [
630
+ {
631
+ "transport": "local",
632
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime doc-to-md reg-parser"
633
+ }
634
+ ],
635
+ "onFailure": {
636
+ "action": "stop",
637
+ "message": "Source first-party fetch failed; stop this recipe before running another source."
638
+ }
639
+ }
640
+ ]
641
+ },
642
+ "update": {
643
+ "mode": "rerun-install-recipe",
644
+ "stopOnFailure": true,
645
+ "steps": [
646
+ {
647
+ "sourceId": "first-party",
648
+ "sourceType": "first-party",
649
+ "package": "@1aboveio/skills",
650
+ "version": "0.20.3",
651
+ "installPath": null,
652
+ "members": [
653
+ "harness-runtime",
654
+ "doc-to-md",
655
+ "reg-parser"
656
+ ],
657
+ "commands": [
658
+ {
659
+ "transport": "local",
660
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime doc-to-md reg-parser"
661
+ }
662
+ ],
663
+ "onFailure": {
664
+ "action": "stop",
665
+ "message": "Source first-party fetch failed; stop this recipe before running another source."
666
+ }
667
+ }
668
+ ]
669
+ },
670
+ "uninstall": {
671
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill doc-to-md reg-parser",
672
+ "removesDependencies": false
673
+ }
674
+ },
675
+ {
676
+ "id": "compliance",
677
+ "displayName": "Compliance",
678
+ "dependsOn": [
679
+ "harness-runtime"
680
+ ],
681
+ "install": {
682
+ "stopOnFailure": true,
683
+ "steps": [
684
+ {
685
+ "sourceId": "first-party",
686
+ "sourceType": "first-party",
687
+ "package": "@1aboveio/skills",
688
+ "version": "0.20.3",
689
+ "installPath": null,
690
+ "members": [
691
+ "harness-runtime",
692
+ "doc-to-md",
693
+ "compliance-audit",
694
+ "doc-authenticity",
695
+ "report-writing"
696
+ ],
697
+ "commands": [
698
+ {
699
+ "transport": "local",
700
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime doc-to-md compliance-audit doc-authenticity report-writing"
701
+ }
702
+ ],
703
+ "onFailure": {
704
+ "action": "stop",
705
+ "message": "Source first-party fetch failed; stop this recipe before running another source."
706
+ }
707
+ }
708
+ ]
709
+ },
710
+ "update": {
711
+ "mode": "rerun-install-recipe",
712
+ "stopOnFailure": true,
713
+ "steps": [
714
+ {
715
+ "sourceId": "first-party",
716
+ "sourceType": "first-party",
717
+ "package": "@1aboveio/skills",
718
+ "version": "0.20.3",
719
+ "installPath": null,
720
+ "members": [
721
+ "harness-runtime",
722
+ "doc-to-md",
723
+ "compliance-audit",
724
+ "doc-authenticity",
725
+ "report-writing"
543
726
  ],
544
727
  "commands": [
545
728
  {
546
729
  "transport": "local",
547
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime fraud-analysis payment-analysis tld-detection"
730
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime doc-to-md compliance-audit doc-authenticity report-writing"
548
731
  }
549
732
  ],
550
733
  "onFailure": {
@@ -555,7 +738,7 @@
555
738
  ]
556
739
  },
557
740
  "uninstall": {
558
- "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill fraud-analysis payment-analysis tld-detection",
741
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill compliance-audit doc-authenticity report-writing",
559
742
  "removesDependencies": false
560
743
  }
561
744
  },
@@ -572,7 +755,7 @@
572
755
  "sourceId": "first-party",
573
756
  "sourceType": "first-party",
574
757
  "package": "@1aboveio/skills",
575
- "version": "0.20.1",
758
+ "version": "0.20.3",
576
759
  "installPath": null,
577
760
  "members": [
578
761
  "harness-runtime",
@@ -604,7 +787,7 @@
604
787
  "sourceId": "first-party",
605
788
  "sourceType": "first-party",
606
789
  "package": "@1aboveio/skills",
607
- "version": "0.20.1",
790
+ "version": "0.20.3",
608
791
  "installPath": null,
609
792
  "members": [
610
793
  "harness-runtime",
@@ -644,7 +827,7 @@
644
827
  "sourceId": "first-party",
645
828
  "sourceType": "first-party",
646
829
  "package": "@1aboveio/skills",
647
- "version": "0.20.1",
830
+ "version": "0.20.3",
648
831
  "installPath": null,
649
832
  "members": [
650
833
  "harness-runtime"
@@ -670,7 +853,7 @@
670
853
  "sourceId": "first-party",
671
854
  "sourceType": "first-party",
672
855
  "package": "@1aboveio/skills",
673
- "version": "0.20.1",
856
+ "version": "0.20.3",
674
857
  "installPath": null,
675
858
  "members": [
676
859
  "harness-runtime"
@@ -702,7 +885,7 @@
702
885
  "sourceId": "first-party",
703
886
  "sourceType": "first-party",
704
887
  "package": "@1aboveio/skills",
705
- "version": "0.20.1",
888
+ "version": "0.20.3",
706
889
  "installPath": null,
707
890
  "members": [
708
891
  "harness-runtime",
@@ -728,6 +911,12 @@
728
911
  "fraud-analysis",
729
912
  "payment-analysis",
730
913
  "tld-detection",
914
+ "similar-domain",
915
+ "doc-to-md",
916
+ "reg-parser",
917
+ "compliance-audit",
918
+ "doc-authenticity",
919
+ "report-writing",
731
920
  "better-auth",
732
921
  "monorepo",
733
922
  "nextjs-fullstack",
@@ -738,7 +927,7 @@
738
927
  "commands": [
739
928
  {
740
929
  "transport": "local",
741
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
930
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection similar-domain doc-to-md reg-parser compliance-audit doc-authenticity report-writing better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
742
931
  }
743
932
  ],
744
933
  "onFailure": {
@@ -756,7 +945,7 @@
756
945
  "sourceId": "first-party",
757
946
  "sourceType": "first-party",
758
947
  "package": "@1aboveio/skills",
759
- "version": "0.20.1",
948
+ "version": "0.20.3",
760
949
  "installPath": null,
761
950
  "members": [
762
951
  "harness-runtime",
@@ -782,6 +971,12 @@
782
971
  "fraud-analysis",
783
972
  "payment-analysis",
784
973
  "tld-detection",
974
+ "similar-domain",
975
+ "doc-to-md",
976
+ "reg-parser",
977
+ "compliance-audit",
978
+ "doc-authenticity",
979
+ "report-writing",
785
980
  "better-auth",
786
981
  "monorepo",
787
982
  "nextjs-fullstack",
@@ -792,7 +987,7 @@
792
987
  "commands": [
793
988
  {
794
989
  "transport": "local",
795
- "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
990
+ "command": "npx skills@1.5.22 add . --global --agent universal claude-code --skill harness-runtime e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection similar-domain doc-to-md reg-parser compliance-audit doc-authenticity report-writing better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 && npm --prefix \"$(realpath \"$HOME/.agents/skills/engineering-runtime/scripts\")\" ci --ignore-scripts"
796
991
  }
797
992
  ],
798
993
  "onFailure": {
@@ -803,7 +998,7 @@
803
998
  ]
804
999
  },
805
1000
  "uninstall": {
806
- "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 harness-runtime"
1001
+ "command": "npx skills@1.5.22 remove --global --agent universal claude-code --skill e2e-test ensure-coverage implement-and-pr rush-issues rush-release review-pr smoke engineering-runtime cloud-build cloud-debug cloud-deploy docker google-cloud mergify podman app-debug python-backend airflow pyspark fraud-analysis payment-analysis tld-detection similar-domain doc-to-md reg-parser compliance-audit doc-authenticity report-writing better-auth monorepo nextjs-fullstack prisma-setup shadcn zod-v4 harness-runtime"
807
1002
  }
808
1003
  }
809
1004
  }
@@ -354,6 +354,9 @@ export function planBundleCommands(action, groupIds, {
354
354
  const recipes = readRecipes(recipesPath);
355
355
  assertLocalRoot(localRoot);
356
356
  const groups = new Map(recipes.groups.map((group) => [group.id, group]));
357
+ const memberMetadata = new Map((recipes.sources ?? [])
358
+ .flatMap((source) => source.members ?? [])
359
+ .map((member) => [member.installName, member]));
357
360
  const requested = [];
358
361
  for (const groupId of groupIds) {
359
362
  if (!groups.has(groupId) || SUPPORT_GROUPS.has(groupId)) throw new Error(`Unknown bundle: ${groupId}`);
@@ -409,6 +412,9 @@ export function planBundleCommands(action, groupIds, {
409
412
  command: skillCommand,
410
413
  cwd: localRoot,
411
414
  failureMessage: step.onFailure.message,
415
+ ...(memberMetadata.get(skill)?.requires?.length > 0
416
+ ? { requires: memberMetadata.get(skill).requires }
417
+ : {}),
412
418
  };
413
419
  plannedByMember.set(skill, entry);
414
420
  planned.push(entry);
@@ -419,20 +425,27 @@ export function planBundleCommands(action, groupIds, {
419
425
  return planned;
420
426
  }
421
427
 
422
- // Continue-on-failure (#1129): every planned per-skill add is attempted in dependency order; a
423
- // failed skill is recorded (its recipe failure message goes to stderr) and the run proceeds to the
424
- // remaining skills. Nothing here stops early the caller summarizes the buckets and decides the
425
- // exit status, and selection persistence sees exactly which members succeeded.
428
+ // Continue-on-failure (#1129): planned per-skill adds run in dependency order. A failed skill blocks
429
+ // only members that require it; unrelated later skills still run. The caller summarizes the buckets,
430
+ // decides the exit status, and persists only members whose required closure is ready.
426
431
  export function runBundleCommands(commands, {
427
432
  execute = (command, cwd) => spawnSync('/bin/bash', ['-lc', command], { cwd, stdio: 'inherit' }),
428
433
  applyPolicy = applyInvocationPolicy,
429
434
  skillsRoot,
430
435
  stdout = process.stdout,
431
436
  stderr = process.stderr,
437
+ satisfiedMembers = [],
432
438
  } = {}) {
433
439
  const succeeded = [];
434
440
  const failed = [];
441
+ const available = new Set(satisfiedMembers);
435
442
  for (const planned of commands) {
443
+ const blockedBy = (planned.requires ?? []).filter((dependency) => !available.has(dependency));
444
+ if (blockedBy.length > 0) {
445
+ stderr.write(`Dependency failed for ${planned.member}: ${blockedBy.join(', ')} is not available\n`);
446
+ failed.push({ planned, status: 1, blockedBy });
447
+ continue;
448
+ }
436
449
  stdout.write(`\nInstalling ${planned.member} (${planned.sourceId})...\n`);
437
450
  const result = execute(planned.command, planned.cwd);
438
451
  if (result.status === 0) {
@@ -445,6 +458,7 @@ export function runBundleCommands(commands, {
445
458
  });
446
459
  }
447
460
  succeeded.push(planned);
461
+ available.add(planned.member);
448
462
  continue;
449
463
  } catch (error) {
450
464
  stderr.write(`Invocation policy failed for ${planned.member}: ${error.message}\n`);
@@ -458,6 +472,25 @@ export function runBundleCommands(commands, {
458
472
  return { succeeded, failed };
459
473
  }
460
474
 
475
+ export function enforceReadyDependencies(readyMembers, records, stderr = process.stderr) {
476
+ const metadata = new Map(records.map((record) => [record.member, record]));
477
+ const blocked = [];
478
+ let changed = true;
479
+ while (changed) {
480
+ changed = false;
481
+ for (const member of [...readyMembers]) {
482
+ const record = metadata.get(member);
483
+ const blockedBy = (record?.requires ?? []).filter((dependency) => !readyMembers.has(dependency));
484
+ if (blockedBy.length === 0) continue;
485
+ readyMembers.delete(member);
486
+ blocked.push({ planned: record, status: 1, blockedBy });
487
+ stderr.write(`Dependency unavailable for ${member}: ${blockedBy.join(', ')} is not ready\n`);
488
+ changed = true;
489
+ }
490
+ }
491
+ return blocked;
492
+ }
493
+
461
494
  // The four run buckets, printed after every non-dry run. `unchanged` (digest-identical skip, #1127)
462
495
  // and `declined` (new-member consent, #1128) render from empty lists until those units land — the
463
496
  // summary contract is stable from here on, so both buckets are always shown.
@@ -508,7 +541,12 @@ export function expectedMemberDigest(source, member, { localRoot }) {
508
541
  // installed store (`~/.agents/skills`); the member lives under it by installName.
509
542
  export function classifyInstalledMember(source, member, { enableTdd = true, localRoot, skillsRoot }) {
510
543
  const directory = join(skillsRoot, member.installName);
511
- const entry = { member: member.installName, sourceId: source?.id ?? null, directory };
544
+ const entry = {
545
+ member: member.installName,
546
+ sourceId: source?.id ?? null,
547
+ directory,
548
+ ...(member.requires?.length > 0 ? { requires: member.requires } : {}),
549
+ };
512
550
  if (!statSync(directory, { throwIfNoEntry: false })?.isDirectory()) {
513
551
  return { ...entry, status: 'missing' };
514
552
  }
@@ -952,11 +990,17 @@ export async function runCli(args, {
952
990
  skillsRoot,
953
991
  stdout,
954
992
  stderr,
993
+ satisfiedMembers: buckets?.unchanged.map((entry) => entry.member),
955
994
  });
956
995
  const readyMembers = new Set([
957
996
  ...succeeded.map((planned) => planned.member),
958
997
  ...(buckets?.unchanged.map((entry) => entry.member) ?? []),
959
998
  ]);
999
+ failed.push(...enforceReadyDependencies(
1000
+ readyMembers,
1001
+ [...commands, ...(buckets?.unchanged ?? [])],
1002
+ stderr,
1003
+ ));
960
1004
  const archives = runArchiveCommands(
961
1005
  archiveCandidates.filter((candidate) => !declinedArchives.has(candidate.installName)),
962
1006
  readyMembers,
@@ -154,6 +154,10 @@ const TEST_FIXTURE = /\.fixtures?\.[^.]+$/;
154
154
  export function publishedContentExcluded(name) {
155
155
  return name.startsWith('.')
156
156
  || name === 'node_modules'
157
+ || name === '__pycache__'
158
+ || name === 'evals'
159
+ || name === 'samples'
160
+ || name === 'tests'
157
161
  || name.endsWith('-workspace')
158
162
  || name.endsWith('.test.mjs')
159
163
  || TEST_FIXTURE.test(name);
@@ -86,7 +86,7 @@ export const WORKFLOW_TRUSTED_SOURCES = deepFreeze({
86
86
  id: 'first-party',
87
87
  type: 'first-party',
88
88
  package: '@1aboveio/skills',
89
- version: '0.20.1',
89
+ version: '0.20.3',
90
90
  },
91
91
  matt: {
92
92
  id: 'matt-pocock',