@mc-and-his-agents/loom-installer 0.1.46 → 0.1.47
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 +42 -42
- package/payload/plugin/loom/skills/shared/scripts/loom_check.py +28 -0
- package/payload/plugin/loom/skills/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_init.py +22 -16
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_check.py +28 -0
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_init.py +22 -16
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": "ba078646e22023a81737e6b318f89ce229ea9166",
|
|
6
6
|
"source_ref": "main",
|
|
7
|
-
"built_at": "2026-04-
|
|
7
|
+
"built_at": "2026-04-28T09:51:14+08:00",
|
|
8
8
|
"runtime": {
|
|
9
9
|
"python_minimum": "3.10",
|
|
10
10
|
"python_recommended": "3.11+"
|
|
@@ -633,8 +633,8 @@
|
|
|
633
633
|
},
|
|
634
634
|
{
|
|
635
635
|
"path": "plugin/loom/skills/shared/scripts/loom_check.py",
|
|
636
|
-
"bytes":
|
|
637
|
-
"sha256": "
|
|
636
|
+
"bytes": 361769,
|
|
637
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
638
638
|
},
|
|
639
639
|
{
|
|
640
640
|
"path": "plugin/loom/skills/shared/scripts/loom_flow.py",
|
|
@@ -643,8 +643,8 @@
|
|
|
643
643
|
},
|
|
644
644
|
{
|
|
645
645
|
"path": "plugin/loom/skills/shared/scripts/loom_init.py",
|
|
646
|
-
"bytes":
|
|
647
|
-
"sha256": "
|
|
646
|
+
"bytes": 85991,
|
|
647
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
648
648
|
},
|
|
649
649
|
{
|
|
650
650
|
"path": "plugin/loom/skills/shared/scripts/loom_status.py",
|
|
@@ -1223,8 +1223,8 @@
|
|
|
1223
1223
|
},
|
|
1224
1224
|
{
|
|
1225
1225
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_check.py",
|
|
1226
|
-
"bytes":
|
|
1227
|
-
"sha256": "
|
|
1226
|
+
"bytes": 361769,
|
|
1227
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
1228
1228
|
},
|
|
1229
1229
|
{
|
|
1230
1230
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -1233,8 +1233,8 @@
|
|
|
1233
1233
|
},
|
|
1234
1234
|
{
|
|
1235
1235
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_init.py",
|
|
1236
|
-
"bytes":
|
|
1237
|
-
"sha256": "
|
|
1236
|
+
"bytes": 85991,
|
|
1237
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
1238
1238
|
},
|
|
1239
1239
|
{
|
|
1240
1240
|
"path": "skills/loom-adopt/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -1843,8 +1843,8 @@
|
|
|
1843
1843
|
},
|
|
1844
1844
|
{
|
|
1845
1845
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_check.py",
|
|
1846
|
-
"bytes":
|
|
1847
|
-
"sha256": "
|
|
1846
|
+
"bytes": 361769,
|
|
1847
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
1848
1848
|
},
|
|
1849
1849
|
{
|
|
1850
1850
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -1853,8 +1853,8 @@
|
|
|
1853
1853
|
},
|
|
1854
1854
|
{
|
|
1855
1855
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_init.py",
|
|
1856
|
-
"bytes":
|
|
1857
|
-
"sha256": "
|
|
1856
|
+
"bytes": 85991,
|
|
1857
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
1858
1858
|
},
|
|
1859
1859
|
{
|
|
1860
1860
|
"path": "skills/loom-handoff/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -2463,8 +2463,8 @@
|
|
|
2463
2463
|
},
|
|
2464
2464
|
{
|
|
2465
2465
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_check.py",
|
|
2466
|
-
"bytes":
|
|
2467
|
-
"sha256": "
|
|
2466
|
+
"bytes": 361769,
|
|
2467
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
2468
2468
|
},
|
|
2469
2469
|
{
|
|
2470
2470
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -2473,8 +2473,8 @@
|
|
|
2473
2473
|
},
|
|
2474
2474
|
{
|
|
2475
2475
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_init.py",
|
|
2476
|
-
"bytes":
|
|
2477
|
-
"sha256": "
|
|
2476
|
+
"bytes": 85991,
|
|
2477
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
2478
2478
|
},
|
|
2479
2479
|
{
|
|
2480
2480
|
"path": "skills/loom-init/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -3088,8 +3088,8 @@
|
|
|
3088
3088
|
},
|
|
3089
3089
|
{
|
|
3090
3090
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_check.py",
|
|
3091
|
-
"bytes":
|
|
3092
|
-
"sha256": "
|
|
3091
|
+
"bytes": 361769,
|
|
3092
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
3093
3093
|
},
|
|
3094
3094
|
{
|
|
3095
3095
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -3098,8 +3098,8 @@
|
|
|
3098
3098
|
},
|
|
3099
3099
|
{
|
|
3100
3100
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_init.py",
|
|
3101
|
-
"bytes":
|
|
3102
|
-
"sha256": "
|
|
3101
|
+
"bytes": 85991,
|
|
3102
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
3103
3103
|
},
|
|
3104
3104
|
{
|
|
3105
3105
|
"path": "skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -3708,8 +3708,8 @@
|
|
|
3708
3708
|
},
|
|
3709
3709
|
{
|
|
3710
3710
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_check.py",
|
|
3711
|
-
"bytes":
|
|
3712
|
-
"sha256": "
|
|
3711
|
+
"bytes": 361769,
|
|
3712
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
3713
3713
|
},
|
|
3714
3714
|
{
|
|
3715
3715
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -3718,8 +3718,8 @@
|
|
|
3718
3718
|
},
|
|
3719
3719
|
{
|
|
3720
3720
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_init.py",
|
|
3721
|
-
"bytes":
|
|
3722
|
-
"sha256": "
|
|
3721
|
+
"bytes": 85991,
|
|
3722
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
3723
3723
|
},
|
|
3724
3724
|
{
|
|
3725
3725
|
"path": "skills/loom-pre-review/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -4328,8 +4328,8 @@
|
|
|
4328
4328
|
},
|
|
4329
4329
|
{
|
|
4330
4330
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_check.py",
|
|
4331
|
-
"bytes":
|
|
4332
|
-
"sha256": "
|
|
4331
|
+
"bytes": 361769,
|
|
4332
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
4333
4333
|
},
|
|
4334
4334
|
{
|
|
4335
4335
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -4338,8 +4338,8 @@
|
|
|
4338
4338
|
},
|
|
4339
4339
|
{
|
|
4340
4340
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_init.py",
|
|
4341
|
-
"bytes":
|
|
4342
|
-
"sha256": "
|
|
4341
|
+
"bytes": 85991,
|
|
4342
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
4343
4343
|
},
|
|
4344
4344
|
{
|
|
4345
4345
|
"path": "skills/loom-resume/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -4948,8 +4948,8 @@
|
|
|
4948
4948
|
},
|
|
4949
4949
|
{
|
|
4950
4950
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_check.py",
|
|
4951
|
-
"bytes":
|
|
4952
|
-
"sha256": "
|
|
4951
|
+
"bytes": 361769,
|
|
4952
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
4953
4953
|
},
|
|
4954
4954
|
{
|
|
4955
4955
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -4958,8 +4958,8 @@
|
|
|
4958
4958
|
},
|
|
4959
4959
|
{
|
|
4960
4960
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_init.py",
|
|
4961
|
-
"bytes":
|
|
4962
|
-
"sha256": "
|
|
4961
|
+
"bytes": 85991,
|
|
4962
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
4963
4963
|
},
|
|
4964
4964
|
{
|
|
4965
4965
|
"path": "skills/loom-retire/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -5568,8 +5568,8 @@
|
|
|
5568
5568
|
},
|
|
5569
5569
|
{
|
|
5570
5570
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_check.py",
|
|
5571
|
-
"bytes":
|
|
5572
|
-
"sha256": "
|
|
5571
|
+
"bytes": 361769,
|
|
5572
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
5573
5573
|
},
|
|
5574
5574
|
{
|
|
5575
5575
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -5578,8 +5578,8 @@
|
|
|
5578
5578
|
},
|
|
5579
5579
|
{
|
|
5580
5580
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_init.py",
|
|
5581
|
-
"bytes":
|
|
5582
|
-
"sha256": "
|
|
5581
|
+
"bytes": 85991,
|
|
5582
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
5583
5583
|
},
|
|
5584
5584
|
{
|
|
5585
5585
|
"path": "skills/loom-review/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -6188,8 +6188,8 @@
|
|
|
6188
6188
|
},
|
|
6189
6189
|
{
|
|
6190
6190
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_check.py",
|
|
6191
|
-
"bytes":
|
|
6192
|
-
"sha256": "
|
|
6191
|
+
"bytes": 361769,
|
|
6192
|
+
"sha256": "afdb899f25a4647fd80ae840b8381fc2bdc9c9f3018ddebd985a2e8bd2284a5f"
|
|
6193
6193
|
},
|
|
6194
6194
|
{
|
|
6195
6195
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_flow.py",
|
|
@@ -6198,8 +6198,8 @@
|
|
|
6198
6198
|
},
|
|
6199
6199
|
{
|
|
6200
6200
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_init.py",
|
|
6201
|
-
"bytes":
|
|
6202
|
-
"sha256": "
|
|
6201
|
+
"bytes": 85991,
|
|
6202
|
+
"sha256": "5d6bca788639db8d58548ebf2b0603e4286262d8847003babf817639b5308424"
|
|
6203
6203
|
},
|
|
6204
6204
|
{
|
|
6205
6205
|
"path": "skills/loom-spec-review/.loom-runtime/shared/scripts/loom_status.py",
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|
|
@@ -4039,6 +4039,34 @@ def check_daily_execution_cli(root: Path) -> list[Failure]:
|
|
|
4039
4039
|
allowed_results={"pass"},
|
|
4040
4040
|
)
|
|
4041
4041
|
|
|
4042
|
+
payload, error = load_command_json(
|
|
4043
|
+
root,
|
|
4044
|
+
["python3", ".loom/bin/loom_init.py", "route", "--target", ".", "--task", "inspect adoption carrier"],
|
|
4045
|
+
cwd=bootstrap_target,
|
|
4046
|
+
)
|
|
4047
|
+
if error:
|
|
4048
|
+
failures.append(Failure("daily-execution-cli", f"`bootstrapped loom-init route` failed: {error}"))
|
|
4049
|
+
else:
|
|
4050
|
+
require_route_payload(
|
|
4051
|
+
failures,
|
|
4052
|
+
category="daily-execution-cli",
|
|
4053
|
+
context="`bootstrapped loom-init route`",
|
|
4054
|
+
payload=payload,
|
|
4055
|
+
expected_skill="loom-adopt",
|
|
4056
|
+
expected_mode="implicit",
|
|
4057
|
+
allowed_results={"pass"},
|
|
4058
|
+
)
|
|
4059
|
+
runtime_state = payload.get("runtime_state")
|
|
4060
|
+
if not isinstance(runtime_state, dict) or runtime_state.get("carrier") != "bootstrapped-target-runtime":
|
|
4061
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must use the bootstrapped target runtime carrier"))
|
|
4062
|
+
registry_check = (
|
|
4063
|
+
runtime_state.get("checks", {}).get("registry_contract")
|
|
4064
|
+
if isinstance(runtime_state, dict) and isinstance(runtime_state.get("checks"), dict)
|
|
4065
|
+
else None
|
|
4066
|
+
)
|
|
4067
|
+
if not isinstance(registry_check, dict) or registry_check.get("status") != "not_applicable":
|
|
4068
|
+
failures.append(Failure("daily-execution-cli", "`bootstrapped loom-init route` must not require skills/registry.json"))
|
|
4069
|
+
|
|
4042
4070
|
broken_bootstrap = tmp_root / "broken-bootstrapped-target"
|
|
4043
4071
|
shutil.copytree(example_target, broken_bootstrap)
|
|
4044
4072
|
manifest_path = broken_bootstrap / ".loom" / "bootstrap" / "manifest.json"
|
|
@@ -1955,23 +1955,29 @@ def route(args: argparse.Namespace) -> int:
|
|
|
1955
1955
|
|
|
1956
1956
|
registry_skill_ids, registry_error = load_registry_skill_ids()
|
|
1957
1957
|
if registry_error:
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1958
|
+
if runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1959
|
+
registry_skill_ids = tuple(sorted({"loom-init", *SKILL_SIGNAL_RULES.keys()}))
|
|
1960
|
+
else:
|
|
1961
|
+
print(
|
|
1962
|
+
json.dumps(
|
|
1963
|
+
route_payload(
|
|
1964
|
+
result="block",
|
|
1965
|
+
selected_skill="loom-init",
|
|
1966
|
+
mode="fallback",
|
|
1967
|
+
matched_signals=[],
|
|
1968
|
+
summary=f"cannot route because {registry_error}",
|
|
1969
|
+
missing_inputs=["a valid installed registry"],
|
|
1970
|
+
fallback_to="loom-init",
|
|
1971
|
+
runtime_state=runtime_state,
|
|
1972
|
+
),
|
|
1973
|
+
ensure_ascii=False,
|
|
1974
|
+
indent=2,
|
|
1975
|
+
)
|
|
1972
1976
|
)
|
|
1973
|
-
|
|
1974
|
-
|
|
1977
|
+
return 1
|
|
1978
|
+
|
|
1979
|
+
if registry_error and runtime_state.get("carrier") == "bootstrapped-target-runtime":
|
|
1980
|
+
registry_error = None
|
|
1975
1981
|
|
|
1976
1982
|
known_skills = set(registry_skill_ids or ())
|
|
1977
1983
|
governance_surface: dict[str, object] | None = None
|