@mc-and-his-agents/loom-installer 0.1.35 → 0.1.37
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.
- package/package.json +1 -1
- package/payload/manifest.json +102 -102
- package/payload/plugin/loom/skills/shared/scripts/fact_chain_support.py +2 -2
- package/payload/plugin/loom/skills/shared/scripts/governance_surface.py +21 -9
- package/payload/plugin/loom/skills/shared/scripts/loom_check.py +124 -0
- package/payload/plugin/loom/skills/shared/scripts/loom_flow.py +44 -8
- package/payload/plugin/loom/skills/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/runtime_state.py +36 -5
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/fact_chain_support.py +2 -2
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/governance_surface.py +21 -9
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_check.py +124 -0
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_flow.py +44 -8
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/runtime_state.py +36 -5
package/package.json
CHANGED
package/payload/manifest.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schema_version": "loom-installer-payload/v1",
|
|
3
3
|
"loom_version": "0.4.0",
|
|
4
4
|
"source_repository": "https://github.com/MC-and-his-Agents/Loom",
|
|
5
|
-
"source_commit": "
|
|
5
|
+
"source_commit": "e6175667069a99b5a49ea9758f71ffe4961f899b",
|
|
6
6
|
"source_ref": "main",
|
|
7
|
-
"built_at": "2026-04-27T15:
|
|
7
|
+
"built_at": "2026-04-27T15:59:30+08:00",
|
|
8
8
|
"runtime": {
|
|
9
9
|
"python_minimum": "3.10",
|
|
10
10
|
"python_recommended": "3.11+"
|
|
@@ -623,23 +623,23 @@
|
|
|
623
623
|
},
|
|
624
624
|
{
|
|
625
625
|
"path": "plugin/loom/skills/shared/scripts/fact_chain_support.py",
|
|
626
|
-
"bytes":
|
|
627
|
-
"sha256": "
|
|
626
|
+
"bytes": 21748,
|
|
627
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
628
628
|
},
|
|
629
629
|
{
|
|
630
630
|
"path": "plugin/loom/skills/shared/scripts/governance_surface.py",
|
|
631
|
-
"bytes":
|
|
632
|
-
"sha256": "
|
|
631
|
+
"bytes": 56941,
|
|
632
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
633
633
|
},
|
|
634
634
|
{
|
|
635
635
|
"path": "plugin/loom/skills/shared/scripts/loom_check.py",
|
|
636
|
-
"bytes":
|
|
637
|
-
"sha256": "
|
|
636
|
+
"bytes": 338798,
|
|
637
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
638
638
|
},
|
|
639
639
|
{
|
|
640
640
|
"path": "plugin/loom/skills/shared/scripts/loom_flow.py",
|
|
641
|
-
"bytes":
|
|
642
|
-
"sha256": "
|
|
641
|
+
"bytes": 334363,
|
|
642
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
643
643
|
},
|
|
644
644
|
{
|
|
645
645
|
"path": "plugin/loom/skills/shared/scripts/loom_init.py",
|
|
@@ -658,8 +658,8 @@
|
|
|
658
658
|
},
|
|
659
659
|
{
|
|
660
660
|
"path": "plugin/loom/skills/shared/scripts/runtime_state.py",
|
|
661
|
-
"bytes":
|
|
662
|
-
"sha256": "
|
|
661
|
+
"bytes": 21030,
|
|
662
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
663
663
|
},
|
|
664
664
|
{
|
|
665
665
|
"path": "plugin/loom/skills/upgrade-contract.json",
|
|
@@ -1213,23 +1213,23 @@
|
|
|
1213
1213
|
},
|
|
1214
1214
|
{
|
|
1215
1215
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
1216
|
-
"bytes":
|
|
1217
|
-
"sha256": "
|
|
1216
|
+
"bytes": 21748,
|
|
1217
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
1218
1218
|
},
|
|
1219
1219
|
{
|
|
1220
1220
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/governance_surface.py",
|
|
1221
|
-
"bytes":
|
|
1222
|
-
"sha256": "
|
|
1221
|
+
"bytes": 56941,
|
|
1222
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
1223
1223
|
},
|
|
1224
1224
|
{
|
|
1225
1225
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_check.py",
|
|
1226
|
-
"bytes":
|
|
1227
|
-
"sha256": "
|
|
1226
|
+
"bytes": 338798,
|
|
1227
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
1228
1228
|
},
|
|
1229
1229
|
{
|
|
1230
1230
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_flow.py",
|
|
1231
|
-
"bytes":
|
|
1232
|
-
"sha256": "
|
|
1231
|
+
"bytes": 334363,
|
|
1232
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
1233
1233
|
},
|
|
1234
1234
|
{
|
|
1235
1235
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -1248,8 +1248,8 @@
|
|
|
1248
1248
|
},
|
|
1249
1249
|
{
|
|
1250
1250
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/runtime_state.py",
|
|
1251
|
-
"bytes":
|
|
1252
|
-
"sha256": "
|
|
1251
|
+
"bytes": 21030,
|
|
1252
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
1253
1253
|
},
|
|
1254
1254
|
{
|
|
1255
1255
|
"path": "skills/loom-adopt/.loom-runtime/upgrade-contract.json",
|
|
@@ -1833,23 +1833,23 @@
|
|
|
1833
1833
|
},
|
|
1834
1834
|
{
|
|
1835
1835
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
1836
|
-
"bytes":
|
|
1837
|
-
"sha256": "
|
|
1836
|
+
"bytes": 21748,
|
|
1837
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
1838
1838
|
},
|
|
1839
1839
|
{
|
|
1840
1840
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/governance_surface.py",
|
|
1841
|
-
"bytes":
|
|
1842
|
-
"sha256": "
|
|
1841
|
+
"bytes": 56941,
|
|
1842
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
1843
1843
|
},
|
|
1844
1844
|
{
|
|
1845
1845
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_check.py",
|
|
1846
|
-
"bytes":
|
|
1847
|
-
"sha256": "
|
|
1846
|
+
"bytes": 338798,
|
|
1847
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
1848
1848
|
},
|
|
1849
1849
|
{
|
|
1850
1850
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_flow.py",
|
|
1851
|
-
"bytes":
|
|
1852
|
-
"sha256": "
|
|
1851
|
+
"bytes": 334363,
|
|
1852
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
1853
1853
|
},
|
|
1854
1854
|
{
|
|
1855
1855
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -1868,8 +1868,8 @@
|
|
|
1868
1868
|
},
|
|
1869
1869
|
{
|
|
1870
1870
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/runtime_state.py",
|
|
1871
|
-
"bytes":
|
|
1872
|
-
"sha256": "
|
|
1871
|
+
"bytes": 21030,
|
|
1872
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
1873
1873
|
},
|
|
1874
1874
|
{
|
|
1875
1875
|
"path": "skills/loom-handoff/.loom-runtime/upgrade-contract.json",
|
|
@@ -2453,23 +2453,23 @@
|
|
|
2453
2453
|
},
|
|
2454
2454
|
{
|
|
2455
2455
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
2456
|
-
"bytes":
|
|
2457
|
-
"sha256": "
|
|
2456
|
+
"bytes": 21748,
|
|
2457
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
2458
2458
|
},
|
|
2459
2459
|
{
|
|
2460
2460
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/governance_surface.py",
|
|
2461
|
-
"bytes":
|
|
2462
|
-
"sha256": "
|
|
2461
|
+
"bytes": 56941,
|
|
2462
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
2463
2463
|
},
|
|
2464
2464
|
{
|
|
2465
2465
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_check.py",
|
|
2466
|
-
"bytes":
|
|
2467
|
-
"sha256": "
|
|
2466
|
+
"bytes": 338798,
|
|
2467
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
2468
2468
|
},
|
|
2469
2469
|
{
|
|
2470
2470
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_flow.py",
|
|
2471
|
-
"bytes":
|
|
2472
|
-
"sha256": "
|
|
2471
|
+
"bytes": 334363,
|
|
2472
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
2473
2473
|
},
|
|
2474
2474
|
{
|
|
2475
2475
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -2488,8 +2488,8 @@
|
|
|
2488
2488
|
},
|
|
2489
2489
|
{
|
|
2490
2490
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/runtime_state.py",
|
|
2491
|
-
"bytes":
|
|
2492
|
-
"sha256": "
|
|
2491
|
+
"bytes": 21030,
|
|
2492
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
2493
2493
|
},
|
|
2494
2494
|
{
|
|
2495
2495
|
"path": "skills/loom-init/.loom-runtime/upgrade-contract.json",
|
|
@@ -3078,23 +3078,23 @@
|
|
|
3078
3078
|
},
|
|
3079
3079
|
{
|
|
3080
3080
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
3081
|
-
"bytes":
|
|
3082
|
-
"sha256": "
|
|
3081
|
+
"bytes": 21748,
|
|
3082
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
3083
3083
|
},
|
|
3084
3084
|
{
|
|
3085
3085
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/governance_surface.py",
|
|
3086
|
-
"bytes":
|
|
3087
|
-
"sha256": "
|
|
3086
|
+
"bytes": 56941,
|
|
3087
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
3088
3088
|
},
|
|
3089
3089
|
{
|
|
3090
3090
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_check.py",
|
|
3091
|
-
"bytes":
|
|
3092
|
-
"sha256": "
|
|
3091
|
+
"bytes": 338798,
|
|
3092
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
3093
3093
|
},
|
|
3094
3094
|
{
|
|
3095
3095
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_flow.py",
|
|
3096
|
-
"bytes":
|
|
3097
|
-
"sha256": "
|
|
3096
|
+
"bytes": 334363,
|
|
3097
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
3098
3098
|
},
|
|
3099
3099
|
{
|
|
3100
3100
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -3113,8 +3113,8 @@
|
|
|
3113
3113
|
},
|
|
3114
3114
|
{
|
|
3115
3115
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/runtime_state.py",
|
|
3116
|
-
"bytes":
|
|
3117
|
-
"sha256": "
|
|
3116
|
+
"bytes": 21030,
|
|
3117
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
3118
3118
|
},
|
|
3119
3119
|
{
|
|
3120
3120
|
"path": "skills/loom-merge-ready/.loom-runtime/upgrade-contract.json",
|
|
@@ -3698,23 +3698,23 @@
|
|
|
3698
3698
|
},
|
|
3699
3699
|
{
|
|
3700
3700
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
3701
|
-
"bytes":
|
|
3702
|
-
"sha256": "
|
|
3701
|
+
"bytes": 21748,
|
|
3702
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
3703
3703
|
},
|
|
3704
3704
|
{
|
|
3705
3705
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/governance_surface.py",
|
|
3706
|
-
"bytes":
|
|
3707
|
-
"sha256": "
|
|
3706
|
+
"bytes": 56941,
|
|
3707
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
3708
3708
|
},
|
|
3709
3709
|
{
|
|
3710
3710
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_check.py",
|
|
3711
|
-
"bytes":
|
|
3712
|
-
"sha256": "
|
|
3711
|
+
"bytes": 338798,
|
|
3712
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
3713
3713
|
},
|
|
3714
3714
|
{
|
|
3715
3715
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_flow.py",
|
|
3716
|
-
"bytes":
|
|
3717
|
-
"sha256": "
|
|
3716
|
+
"bytes": 334363,
|
|
3717
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
3718
3718
|
},
|
|
3719
3719
|
{
|
|
3720
3720
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -3733,8 +3733,8 @@
|
|
|
3733
3733
|
},
|
|
3734
3734
|
{
|
|
3735
3735
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/runtime_state.py",
|
|
3736
|
-
"bytes":
|
|
3737
|
-
"sha256": "
|
|
3736
|
+
"bytes": 21030,
|
|
3737
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
3738
3738
|
},
|
|
3739
3739
|
{
|
|
3740
3740
|
"path": "skills/loom-pre-review/.loom-runtime/upgrade-contract.json",
|
|
@@ -4318,23 +4318,23 @@
|
|
|
4318
4318
|
},
|
|
4319
4319
|
{
|
|
4320
4320
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
4321
|
-
"bytes":
|
|
4322
|
-
"sha256": "
|
|
4321
|
+
"bytes": 21748,
|
|
4322
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
4323
4323
|
},
|
|
4324
4324
|
{
|
|
4325
4325
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/governance_surface.py",
|
|
4326
|
-
"bytes":
|
|
4327
|
-
"sha256": "
|
|
4326
|
+
"bytes": 56941,
|
|
4327
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
4328
4328
|
},
|
|
4329
4329
|
{
|
|
4330
4330
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_check.py",
|
|
4331
|
-
"bytes":
|
|
4332
|
-
"sha256": "
|
|
4331
|
+
"bytes": 338798,
|
|
4332
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
4333
4333
|
},
|
|
4334
4334
|
{
|
|
4335
4335
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_flow.py",
|
|
4336
|
-
"bytes":
|
|
4337
|
-
"sha256": "
|
|
4336
|
+
"bytes": 334363,
|
|
4337
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
4338
4338
|
},
|
|
4339
4339
|
{
|
|
4340
4340
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -4353,8 +4353,8 @@
|
|
|
4353
4353
|
},
|
|
4354
4354
|
{
|
|
4355
4355
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/runtime_state.py",
|
|
4356
|
-
"bytes":
|
|
4357
|
-
"sha256": "
|
|
4356
|
+
"bytes": 21030,
|
|
4357
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
4358
4358
|
},
|
|
4359
4359
|
{
|
|
4360
4360
|
"path": "skills/loom-resume/.loom-runtime/upgrade-contract.json",
|
|
@@ -4938,23 +4938,23 @@
|
|
|
4938
4938
|
},
|
|
4939
4939
|
{
|
|
4940
4940
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
4941
|
-
"bytes":
|
|
4942
|
-
"sha256": "
|
|
4941
|
+
"bytes": 21748,
|
|
4942
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
4943
4943
|
},
|
|
4944
4944
|
{
|
|
4945
4945
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/governance_surface.py",
|
|
4946
|
-
"bytes":
|
|
4947
|
-
"sha256": "
|
|
4946
|
+
"bytes": 56941,
|
|
4947
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
4948
4948
|
},
|
|
4949
4949
|
{
|
|
4950
4950
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_check.py",
|
|
4951
|
-
"bytes":
|
|
4952
|
-
"sha256": "
|
|
4951
|
+
"bytes": 338798,
|
|
4952
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
4953
4953
|
},
|
|
4954
4954
|
{
|
|
4955
4955
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_flow.py",
|
|
4956
|
-
"bytes":
|
|
4957
|
-
"sha256": "
|
|
4956
|
+
"bytes": 334363,
|
|
4957
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
4958
4958
|
},
|
|
4959
4959
|
{
|
|
4960
4960
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -4973,8 +4973,8 @@
|
|
|
4973
4973
|
},
|
|
4974
4974
|
{
|
|
4975
4975
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/runtime_state.py",
|
|
4976
|
-
"bytes":
|
|
4977
|
-
"sha256": "
|
|
4976
|
+
"bytes": 21030,
|
|
4977
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
4978
4978
|
},
|
|
4979
4979
|
{
|
|
4980
4980
|
"path": "skills/loom-retire/.loom-runtime/upgrade-contract.json",
|
|
@@ -5558,23 +5558,23 @@
|
|
|
5558
5558
|
},
|
|
5559
5559
|
{
|
|
5560
5560
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
5561
|
-
"bytes":
|
|
5562
|
-
"sha256": "
|
|
5561
|
+
"bytes": 21748,
|
|
5562
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
5563
5563
|
},
|
|
5564
5564
|
{
|
|
5565
5565
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/governance_surface.py",
|
|
5566
|
-
"bytes":
|
|
5567
|
-
"sha256": "
|
|
5566
|
+
"bytes": 56941,
|
|
5567
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
5568
5568
|
},
|
|
5569
5569
|
{
|
|
5570
5570
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_check.py",
|
|
5571
|
-
"bytes":
|
|
5572
|
-
"sha256": "
|
|
5571
|
+
"bytes": 338798,
|
|
5572
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
5573
5573
|
},
|
|
5574
5574
|
{
|
|
5575
5575
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_flow.py",
|
|
5576
|
-
"bytes":
|
|
5577
|
-
"sha256": "
|
|
5576
|
+
"bytes": 334363,
|
|
5577
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
5578
5578
|
},
|
|
5579
5579
|
{
|
|
5580
5580
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -5593,8 +5593,8 @@
|
|
|
5593
5593
|
},
|
|
5594
5594
|
{
|
|
5595
5595
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/runtime_state.py",
|
|
5596
|
-
"bytes":
|
|
5597
|
-
"sha256": "
|
|
5596
|
+
"bytes": 21030,
|
|
5597
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
5598
5598
|
},
|
|
5599
5599
|
{
|
|
5600
5600
|
"path": "skills/loom-review/.loom-runtime/upgrade-contract.json",
|
|
@@ -6178,23 +6178,23 @@
|
|
|
6178
6178
|
},
|
|
6179
6179
|
{
|
|
6180
6180
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/fact_chain_support.py",
|
|
6181
|
-
"bytes":
|
|
6182
|
-
"sha256": "
|
|
6181
|
+
"bytes": 21748,
|
|
6182
|
+
"sha256": "8ec28a37277dbf4e6e0af5965cf98da4ec3e8a0b29cb325309c08b22ab976a91"
|
|
6183
6183
|
},
|
|
6184
6184
|
{
|
|
6185
6185
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/governance_surface.py",
|
|
6186
|
-
"bytes":
|
|
6187
|
-
"sha256": "
|
|
6186
|
+
"bytes": 56941,
|
|
6187
|
+
"sha256": "fcd116cdadbe674f13fbe841e5af86d8bb48fe6c924305949ea1ed1abc955d44"
|
|
6188
6188
|
},
|
|
6189
6189
|
{
|
|
6190
6190
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_check.py",
|
|
6191
|
-
"bytes":
|
|
6192
|
-
"sha256": "
|
|
6191
|
+
"bytes": 338798,
|
|
6192
|
+
"sha256": "6c31df1995034f10c7dd769b5c174a3e580f3078e586d53faa6b9994c3d7bb98"
|
|
6193
6193
|
},
|
|
6194
6194
|
{
|
|
6195
6195
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_flow.py",
|
|
6196
|
-
"bytes":
|
|
6197
|
-
"sha256": "
|
|
6196
|
+
"bytes": 334363,
|
|
6197
|
+
"sha256": "e9b376551600383e95e4f707557bb957edf51cd9ee2263587b8b6109088b737c"
|
|
6198
6198
|
},
|
|
6199
6199
|
{
|
|
6200
6200
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_init.py",
|
|
@@ -6213,8 +6213,8 @@
|
|
|
6213
6213
|
},
|
|
6214
6214
|
{
|
|
6215
6215
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/runtime_state.py",
|
|
6216
|
-
"bytes":
|
|
6217
|
-
"sha256": "
|
|
6216
|
+
"bytes": 21030,
|
|
6217
|
+
"sha256": "3375830ede9bec65083d9ee6cfac5f5a7e3bd781ef90c78a087c39d37f2cfab2"
|
|
6218
6218
|
},
|
|
6219
6219
|
{
|
|
6220
6220
|
"path": "skills/loom-spec-review/.loom-runtime/upgrade-contract.json",
|
|
@@ -195,12 +195,12 @@ def resolve_repo_relative_path(target_root: Path, relative: str, *, label: str)
|
|
|
195
195
|
if candidate_raw.is_absolute():
|
|
196
196
|
return None, [f"{label} must be repo-relative, got absolute path: {locator}"]
|
|
197
197
|
if ".." in candidate_raw.parts:
|
|
198
|
-
return None, [f"{label} must stay inside the target repository: {locator}"]
|
|
198
|
+
return None, [f"{label} must stay inside the target repository and within the target root: {locator}"]
|
|
199
199
|
candidate = (target_root / candidate_raw).resolve()
|
|
200
200
|
try:
|
|
201
201
|
candidate.relative_to(target_root.resolve())
|
|
202
202
|
except ValueError:
|
|
203
|
-
return None, [f"{label} must stay inside the target repository: {locator}"]
|
|
203
|
+
return None, [f"{label} must stay inside the target repository and within the target root: {locator}"]
|
|
204
204
|
return candidate, []
|
|
205
205
|
|
|
206
206
|
|
|
@@ -8,6 +8,7 @@ import re
|
|
|
8
8
|
import subprocess
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import Any
|
|
11
|
+
from urllib.parse import quote
|
|
11
12
|
|
|
12
13
|
from runtime_paths import installed_skill_script
|
|
13
14
|
|
|
@@ -357,7 +358,7 @@ def detect_github_repo(root: Path) -> tuple[str | None, str | None]:
|
|
|
357
358
|
remote = git_remote_origin(root)
|
|
358
359
|
if not remote:
|
|
359
360
|
return None, None
|
|
360
|
-
match = re.search(r"github\.com[:/](?P<owner>[^/]+)/(?P<repo>[
|
|
361
|
+
match = re.search(r"github\.com[:/](?P<owner>[^/]+)/(?P<repo>[^/]+?)(?:\.git)?$", remote)
|
|
361
362
|
if not match:
|
|
362
363
|
return None, None
|
|
363
364
|
return match.group("owner"), match.group("repo")
|
|
@@ -474,6 +475,16 @@ def relative_locator_from_value(root: Path, raw_locator: object) -> str | None:
|
|
|
474
475
|
return str(locator_path)
|
|
475
476
|
|
|
476
477
|
|
|
478
|
+
def locator_boundary_error(raw_locator: object, *, label: str) -> str:
|
|
479
|
+
if not isinstance(raw_locator, str) or not raw_locator.strip():
|
|
480
|
+
return f"{label} must be a non-empty string"
|
|
481
|
+
locator = raw_locator.strip()
|
|
482
|
+
locator_path = Path(locator)
|
|
483
|
+
if locator_path.is_absolute() or ".." in locator_path.parts:
|
|
484
|
+
return f"{label} must stay within the repository root: {locator}"
|
|
485
|
+
return f"{label} must stay within the repository root: {locator}"
|
|
486
|
+
|
|
487
|
+
|
|
477
488
|
def resolve_locator(root: Path, raw_locator: object) -> tuple[str | None, Path | None]:
|
|
478
489
|
locator = relative_locator_from_value(root, raw_locator)
|
|
479
490
|
if locator is None:
|
|
@@ -494,7 +505,7 @@ def locator_status_entry(
|
|
|
494
505
|
) -> tuple[dict[str, str], str | None]:
|
|
495
506
|
locator, target = resolve_locator(root, raw_locator)
|
|
496
507
|
if locator is None or target is None:
|
|
497
|
-
return carrier_entry("missing", "unknown", source),
|
|
508
|
+
return carrier_entry("missing", "unknown", source), locator_boundary_error(raw_locator, label=source)
|
|
498
509
|
if not target.exists():
|
|
499
510
|
return carrier_entry("missing", locator, source), f"{source} points to missing path `{locator}`"
|
|
500
511
|
return carrier_entry("present", locator, source), None
|
|
@@ -520,7 +531,7 @@ def validate_repo_specific_requirement(
|
|
|
520
531
|
missing_inputs.append(f"{prefix} enforcement must be `blocking` or `advisory`")
|
|
521
532
|
locator, target = resolve_locator(root, entry.get("locator"))
|
|
522
533
|
if locator is None or target is None:
|
|
523
|
-
missing_inputs.append(f"{prefix} locator
|
|
534
|
+
missing_inputs.append(locator_boundary_error(entry.get("locator"), label=f"{prefix} locator"))
|
|
524
535
|
elif not target.exists():
|
|
525
536
|
missing_inputs.append(f"{prefix} locator points to missing path `{locator}`")
|
|
526
537
|
return missing_inputs
|
|
@@ -542,7 +553,7 @@ def validate_specialized_gate(
|
|
|
542
553
|
missing_inputs.append(f"{prefix} missing `{field}`")
|
|
543
554
|
locator, target = resolve_locator(root, entry.get("locator"))
|
|
544
555
|
if locator is None or target is None:
|
|
545
|
-
missing_inputs.append(f"{prefix} locator
|
|
556
|
+
missing_inputs.append(locator_boundary_error(entry.get("locator"), label=f"{prefix} locator"))
|
|
546
557
|
elif not target.exists():
|
|
547
558
|
missing_inputs.append(f"{prefix} locator points to missing path `{locator}`")
|
|
548
559
|
gate_type = entry.get("gate_type")
|
|
@@ -582,7 +593,7 @@ def validate_metadata_contract(
|
|
|
582
593
|
for locator_field in ("applicability_locator", "authority_locator"):
|
|
583
594
|
locator, target = resolve_locator(root, field.get(locator_field))
|
|
584
595
|
if locator is None or target is None:
|
|
585
|
-
missing_inputs.append(f"{field_prefix} `{locator_field}`
|
|
596
|
+
missing_inputs.append(locator_boundary_error(field.get(locator_field), label=f"{field_prefix} `{locator_field}`"))
|
|
586
597
|
elif not target.exists():
|
|
587
598
|
missing_inputs.append(f"{field_prefix} `{locator_field}` points to missing path `{locator}`")
|
|
588
599
|
return missing_inputs
|
|
@@ -616,7 +627,7 @@ def validate_context_schema(
|
|
|
616
627
|
missing_inputs.append(f"{field_prefix} `required` must be a boolean")
|
|
617
628
|
locator, target = resolve_locator(root, field.get("mapping_rule_locator"))
|
|
618
629
|
if locator is None or target is None:
|
|
619
|
-
missing_inputs.append(f"{field_prefix} `mapping_rule_locator`
|
|
630
|
+
missing_inputs.append(locator_boundary_error(field.get("mapping_rule_locator"), label=f"{field_prefix} `mapping_rule_locator`"))
|
|
620
631
|
elif not target.exists():
|
|
621
632
|
missing_inputs.append(f"{field_prefix} `mapping_rule_locator` points to missing path `{locator}`")
|
|
622
633
|
return missing_inputs
|
|
@@ -648,7 +659,7 @@ def validate_repo_interop_collection_entry(
|
|
|
648
659
|
)
|
|
649
660
|
locator, target = resolve_locator(root, entry.get("locator"))
|
|
650
661
|
if locator is None or target is None:
|
|
651
|
-
missing_inputs.append(f"{prefix} locator
|
|
662
|
+
missing_inputs.append(locator_boundary_error(entry.get("locator"), label=f"{prefix} locator"))
|
|
652
663
|
elif not target.exists():
|
|
653
664
|
missing_inputs.append(f"{prefix} locator points to missing path `{locator}`")
|
|
654
665
|
return missing_inputs
|
|
@@ -670,7 +681,7 @@ def validate_shadow_surface(
|
|
|
670
681
|
for locator_field in ("loom_locator", "repo_locator"):
|
|
671
682
|
locator, target = resolve_locator(root, entry.get(locator_field))
|
|
672
683
|
if locator is None or target is None:
|
|
673
|
-
missing_inputs.append(f"{prefix} `{locator_field}`
|
|
684
|
+
missing_inputs.append(locator_boundary_error(entry.get(locator_field), label=f"{prefix} `{locator_field}`"))
|
|
674
685
|
elif not target.exists():
|
|
675
686
|
missing_inputs.append(f"{prefix} `{locator_field}` points to missing path `{locator}`")
|
|
676
687
|
return missing_inputs
|
|
@@ -1089,7 +1100,8 @@ def detect_github_control_plane(root: Path) -> tuple[dict[str, Any], list[str]]:
|
|
|
1089
1100
|
missing_inputs.append("github control plane: default branch is unavailable")
|
|
1090
1101
|
return surface, missing_inputs
|
|
1091
1102
|
|
|
1092
|
-
|
|
1103
|
+
encoded_branch = quote(str(surface["default_branch"]), safe="")
|
|
1104
|
+
branch_payload, branch_errors = gh_json(root, ["api", f"repos/{owner}/{repo}/branches/{encoded_branch}"])
|
|
1093
1105
|
if branch_errors or branch_payload is None:
|
|
1094
1106
|
missing_inputs.extend(f"github control plane: {message}" for message in branch_errors)
|
|
1095
1107
|
return surface, missing_inputs
|