@mc-and-his-agents/loom-installer 0.1.113 → 0.1.115
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 +421 -421
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-adopt/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-build/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-handoff/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-init/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-resume/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-retire/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-review/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/loom-story/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/plugin/loom/skills/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/plugin/loom/skills/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/plugin/loom/skills/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/plugin/loom/skills/shared/scripts/governance_surface.py +0 -3
- package/payload/plugin/loom/skills/shared/scripts/loom_check.py +130 -2
- package/payload/plugin/loom/skills/shared/scripts/loom_flow.py +0 -52
- package/payload/plugin/loom/skills/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-adopt/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-adopt/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-adopt/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-adopt/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-adopt/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-adopt/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-build/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-build/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-build/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-build/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-build/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-build/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-build/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-build/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-build/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-handoff/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-handoff/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-handoff/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-handoff/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-handoff/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-handoff/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-init/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-init/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-init/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-init/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-init/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-init/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-merge-ready/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-merge-ready/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-merge-ready/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-pre-review/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-pre-review/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-pre-review/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-pre-review/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-pre-review/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-pre-review/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-resume/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-resume/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-resume/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-resume/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-resume/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-resume/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-retire/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-retire/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-retire/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-retire/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-retire/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-retire/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-review/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-review/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-review/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-review/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-review/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-review/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-spec-review/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-spec-review/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-spec-review/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-spec-review/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-spec-review/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-spec-review/.loom-runtime/shared/scripts/loom_init.py +105 -103
- package/payload/skills/loom-story/.loom-runtime/loom-init/SKILL.md +5 -3
- package/payload/skills/loom-story/.loom-runtime/loom-init/references/intake-signals.md +5 -5
- package/payload/skills/loom-story/.loom-runtime/shared/references/adoption/lightweight-retrofit-default.md +11 -3
- package/payload/skills/loom-story/.loom-runtime/shared/references/adoption/repo-companion-contract.md +4 -7
- package/payload/skills/loom-story/.loom-runtime/shared/references/adoption/target-repo-version-contract.md +3 -1
- package/payload/skills/loom-story/.loom-runtime/shared/scripts/governance_surface.py +0 -3
- package/payload/skills/loom-story/.loom-runtime/shared/scripts/loom_check.py +130 -2
- package/payload/skills/loom-story/.loom-runtime/shared/scripts/loom_flow.py +0 -52
- package/payload/skills/loom-story/.loom-runtime/shared/scripts/loom_init.py +105 -103
|
@@ -4336,6 +4336,17 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4336
4336
|
if pr_template:
|
|
4337
4337
|
(target / ".github" / "PULL_REQUEST_TEMPLATE.md").write_text("## Summary\n", encoding="utf-8")
|
|
4338
4338
|
|
|
4339
|
+
def write_small_existing_repo(target: Path, *, pr_template: bool = False) -> None:
|
|
4340
|
+
(target / ".github" / "workflows").mkdir(parents=True, exist_ok=True)
|
|
4341
|
+
(target / "src").mkdir(parents=True, exist_ok=True)
|
|
4342
|
+
(target / "README.md").write_text("# Small Existing Repo\n", encoding="utf-8")
|
|
4343
|
+
(target / "AGENTS.md").write_text("# Root Rules\n", encoding="utf-8")
|
|
4344
|
+
(target / "src" / "main.py").write_text("print('ok')\n", encoding="utf-8")
|
|
4345
|
+
(target / ".github" / "workflows" / "ci.yml").write_text("name: ci\n", encoding="utf-8")
|
|
4346
|
+
(target / "Makefile").write_text("check:\n\t@echo ok\n", encoding="utf-8")
|
|
4347
|
+
if pr_template:
|
|
4348
|
+
(target / ".github" / "PULL_REQUEST_TEMPLATE.md").write_text("## Summary\n", encoding="utf-8")
|
|
4349
|
+
|
|
4339
4350
|
attach_only_forbidden_patterns = (
|
|
4340
4351
|
".loom/work-items/**",
|
|
4341
4352
|
".loom/progress/**",
|
|
@@ -4343,6 +4354,15 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4343
4354
|
".loom/reviews/**",
|
|
4344
4355
|
".loom/specs/**",
|
|
4345
4356
|
)
|
|
4357
|
+
default_release_paths = (
|
|
4358
|
+
".loom/companion/releases/changelog.md",
|
|
4359
|
+
".loom/companion/releases/release-notes.md",
|
|
4360
|
+
".loom/companion/releases/migration-notes.md",
|
|
4361
|
+
".loom/companion/releases/rollback.md",
|
|
4362
|
+
".loom/companion/releases/catalog.json",
|
|
4363
|
+
".loom/companion/releases/current.json",
|
|
4364
|
+
".loom/companion/releases/status.json",
|
|
4365
|
+
)
|
|
4346
4366
|
|
|
4347
4367
|
def matches_forbidden(path: str, pattern: str) -> bool:
|
|
4348
4368
|
if pattern.endswith("/**"):
|
|
@@ -4358,6 +4378,50 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4358
4378
|
return pattern
|
|
4359
4379
|
return None
|
|
4360
4380
|
|
|
4381
|
+
def assert_no_default_release_target(target: Path, payload: dict[str, object], context: str) -> None:
|
|
4382
|
+
planned = payload.get("planned_writes")
|
|
4383
|
+
planned_paths = {item.get("path") for item in planned if isinstance(item, dict)} if isinstance(planned, list) else set()
|
|
4384
|
+
initial = payload.get("initial_artifacts")
|
|
4385
|
+
initial_paths = {item.get("path") for item in initial if isinstance(item, dict)} if isinstance(initial, list) else set()
|
|
4386
|
+
absent = payload.get("intentionally_absent")
|
|
4387
|
+
absent_paths = {item.get("path") for item in absent if isinstance(item, dict)} if isinstance(absent, list) else set()
|
|
4388
|
+
serialized = json.dumps(payload, ensure_ascii=False)
|
|
4389
|
+
for release_path in default_release_paths:
|
|
4390
|
+
if release_path in planned_paths:
|
|
4391
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must not plan default release target `{release_path}`"))
|
|
4392
|
+
if release_path in initial_paths:
|
|
4393
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must not declare default release target `{release_path}`"))
|
|
4394
|
+
if (target / release_path).exists():
|
|
4395
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must not generate default release target `{release_path}`"))
|
|
4396
|
+
if ".loom/companion/releases/**" not in absent_paths:
|
|
4397
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must mark release targets intentionally absent by default"))
|
|
4398
|
+
if "bootstrap-v0.1.0" in serialized:
|
|
4399
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must not mention placeholder release id `bootstrap-v0.1.0`"))
|
|
4400
|
+
repo_interface_path = target / ".loom/companion/repo-interface.json"
|
|
4401
|
+
if repo_interface_path.exists():
|
|
4402
|
+
repo_interface = json.loads(repo_interface_path.read_text(encoding="utf-8"))
|
|
4403
|
+
if "release_targets" in repo_interface:
|
|
4404
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` repo-interface must not declare release_targets without release target intent"))
|
|
4405
|
+
surface = build_governance_surface(target)
|
|
4406
|
+
repo_interface_surface = surface.get("repo_interface") if isinstance(surface, dict) else None
|
|
4407
|
+
release_targets = repo_interface_surface.get("release_targets") if isinstance(repo_interface_surface, dict) else None
|
|
4408
|
+
require_release_targets_surface_payload(
|
|
4409
|
+
failures,
|
|
4410
|
+
category="deep-existing-bootstrap",
|
|
4411
|
+
context=f"`{context}` absent release targets",
|
|
4412
|
+
payload=release_targets,
|
|
4413
|
+
)
|
|
4414
|
+
target_release = release_targets.get("target_release") if isinstance(release_targets, dict) else None
|
|
4415
|
+
if not isinstance(release_targets, dict) or release_targets.get("availability") != "absent":
|
|
4416
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must report release_targets availability absent by default"))
|
|
4417
|
+
if not isinstance(target_release, dict) or target_release.get("result") != "not_applicable":
|
|
4418
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must report target_release not_applicable when release targets are absent"))
|
|
4419
|
+
if isinstance(release_targets, dict):
|
|
4420
|
+
for surface_key in ("catalog", "current_target", "status"):
|
|
4421
|
+
surface_entry = release_targets.get(surface_key)
|
|
4422
|
+
if isinstance(surface_entry, dict) and surface_entry.get("status") == "present":
|
|
4423
|
+
failures.append(Failure("deep-existing-bootstrap", f"`{context}` must not report absent release target `{surface_key}` as present"))
|
|
4424
|
+
|
|
4361
4425
|
deep_target = tmp_root / "deep-existing"
|
|
4362
4426
|
write_repo(deep_target, validation_entry=True, pr_template=True, workflow_doc=True)
|
|
4363
4427
|
deep_dry_payload, deep_dry_error = load_command_json(
|
|
@@ -4404,6 +4468,7 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4404
4468
|
failures.append(Failure("deep-existing-bootstrap", "`deep-existing dry-run` must report detected repository mode"))
|
|
4405
4469
|
if not isinstance(write, dict) or write.get("enabled") is not False:
|
|
4406
4470
|
failures.append(Failure("deep-existing-bootstrap", "`deep-existing dry-run` must keep write.enabled = false"))
|
|
4471
|
+
assert_no_default_release_target(deep_target, deep_dry_payload, "deep-existing dry-run")
|
|
4407
4472
|
|
|
4408
4473
|
deep_payload, deep_error = load_command_json(
|
|
4409
4474
|
root,
|
|
@@ -4463,6 +4528,7 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4463
4528
|
host_truth = repo_interface.get("host_truth_locators")
|
|
4464
4529
|
if not isinstance(host_truth, dict) or set(host_truth.keys()) != {"work_item", "project_status", "review", "closeout"}:
|
|
4465
4530
|
failures.append(Failure("deep-existing-bootstrap", "`deep-existing bootstrap` repo-interface must declare attach-only host truth locators"))
|
|
4531
|
+
assert_no_default_release_target(deep_target, deep_payload, "deep-existing bootstrap")
|
|
4466
4532
|
|
|
4467
4533
|
poisoned_files_target = tmp_root / "deep-existing-poison-files"
|
|
4468
4534
|
if deep_target.exists() and (deep_target / ".loom/bin/loom_init.py").exists():
|
|
@@ -4583,6 +4649,10 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4583
4649
|
intent = explicit_payload.get("adoption_intent")
|
|
4584
4650
|
recommended = explicit_payload.get("recommended_adoption")
|
|
4585
4651
|
profile = explicit_payload.get("scaffold_profile")
|
|
4652
|
+
planned = explicit_payload.get("planned_writes")
|
|
4653
|
+
planned_paths = {item.get("path") for item in planned if isinstance(item, dict)} if isinstance(planned, list) else set()
|
|
4654
|
+
initial = explicit_payload.get("initial_artifacts")
|
|
4655
|
+
initial_paths = {item.get("path") for item in initial if isinstance(item, dict)} if isinstance(initial, list) else set()
|
|
4586
4656
|
if not isinstance(intent, dict) or intent.get("effective") != "execution-control":
|
|
4587
4657
|
failures.append(Failure("deep-existing-bootstrap", "explicit full-bootstrap sample must report `adoption_intent.effective = execution-control`"))
|
|
4588
4658
|
if not isinstance(recommended, dict) or recommended.get("path") != "full-bootstrap":
|
|
@@ -4595,12 +4665,17 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4595
4665
|
".loom/status/current.md",
|
|
4596
4666
|
".loom/reviews/INIT-0001.json",
|
|
4597
4667
|
".loom/specs/INIT-0001/spec.md",
|
|
4668
|
+
".loom/specs/INIT-0001/plan.md",
|
|
4669
|
+
".loom/specs/INIT-0001/implementation-contract.md",
|
|
4598
4670
|
):
|
|
4599
4671
|
if not (explicit_full_target / required).exists():
|
|
4600
4672
|
failures.append(Failure("deep-existing-bootstrap", f"`explicit execution-control bootstrap sample` must generate `{required}`"))
|
|
4673
|
+
if required not in planned_paths or required not in initial_paths:
|
|
4674
|
+
failures.append(Failure("deep-existing-bootstrap", f"`explicit execution-control bootstrap sample` must declare `{required}` in planned_writes and initial_artifacts"))
|
|
4675
|
+
assert_no_default_release_target(explicit_full_target, explicit_payload, "explicit execution-control bootstrap sample")
|
|
4601
4676
|
|
|
4602
4677
|
light_target = tmp_root / "light-governance"
|
|
4603
|
-
|
|
4678
|
+
write_small_existing_repo(light_target)
|
|
4604
4679
|
light_payload, light_error = load_command_json(
|
|
4605
4680
|
root,
|
|
4606
4681
|
[
|
|
@@ -4620,23 +4695,76 @@ def check_deep_existing_repo_bootstrap(root: Path) -> list[Failure]:
|
|
|
4620
4695
|
if light_error:
|
|
4621
4696
|
failures.append(Failure("deep-existing-bootstrap", f"`light-governance bootstrap sample` failed: {light_error}"))
|
|
4622
4697
|
else:
|
|
4698
|
+
run = light_payload.get("run")
|
|
4699
|
+
recommended = light_payload.get("recommended_adoption")
|
|
4623
4700
|
profile = light_payload.get("scaffold_profile")
|
|
4701
|
+
intentionally_absent = light_payload.get("intentionally_absent")
|
|
4702
|
+
absent_paths = (
|
|
4703
|
+
{item.get("path") for item in intentionally_absent if isinstance(item, dict)}
|
|
4704
|
+
if isinstance(intentionally_absent, list)
|
|
4705
|
+
else set()
|
|
4706
|
+
)
|
|
4707
|
+
if not isinstance(run, dict) or run.get("scenario_key") != "small-existing" or run.get("recovery_mode") != "checkpoint-lite":
|
|
4708
|
+
failures.append(Failure("deep-existing-bootstrap", "light-governance sample must model small-existing checkpoint-lite adoption"))
|
|
4709
|
+
if not isinstance(recommended, dict) or recommended.get("path") != "lightweight-retrofit":
|
|
4710
|
+
failures.append(Failure("deep-existing-bootstrap", "light-governance sample must select `recommended_adoption.path = lightweight-retrofit`"))
|
|
4624
4711
|
if not isinstance(profile, dict) or profile.get("name") != "light-governance":
|
|
4625
4712
|
failures.append(Failure("deep-existing-bootstrap", "light-governance sample must report `scaffold_profile.name = light-governance`"))
|
|
4713
|
+
if not isinstance(profile, dict) or profile.get("writes_work_item_carriers") is not False:
|
|
4714
|
+
failures.append(Failure("deep-existing-bootstrap", "light-governance sample must report `writes_work_item_carriers = false`"))
|
|
4626
4715
|
if not isinstance(light_payload.get("upgrade_triggers"), list) or not light_payload["upgrade_triggers"]:
|
|
4627
4716
|
failures.append(Failure("deep-existing-bootstrap", "light-governance sample must report top-level upgrade_triggers"))
|
|
4717
|
+
deferred_text = json.dumps(light_payload.get("deferred_capabilities", []), ensure_ascii=False)
|
|
4718
|
+
if "spec" not in deferred_text or "execution-control" not in deferred_text:
|
|
4719
|
+
failures.append(Failure("deep-existing-bootstrap", "light-governance sample must defer Loom-owned spec carriers to execution-control"))
|
|
4628
4720
|
planned = light_payload.get("planned_writes")
|
|
4629
4721
|
planned_paths = {item.get("path") for item in planned if isinstance(item, dict)} if isinstance(planned, list) else set()
|
|
4630
|
-
for required in (".loom/reviews/INIT-0001.json", ".loom/
|
|
4722
|
+
for required in (".loom/reviews/INIT-0001.json", ".loom/reviews/INIT-0001.spec.json", ".github/PULL_REQUEST_TEMPLATE.md"):
|
|
4631
4723
|
if required not in planned_paths or not (light_target / required).exists():
|
|
4632
4724
|
failures.append(Failure("deep-existing-bootstrap", f"`light-governance bootstrap sample` must generate `{required}`"))
|
|
4725
|
+
for absent in (".loom/work-items/**", ".loom/progress/**", ".loom/status/current.md", ".loom/specs/**"):
|
|
4726
|
+
if absent not in absent_paths:
|
|
4727
|
+
failures.append(Failure("deep-existing-bootstrap", f"`light-governance bootstrap sample` must mark `{absent}` intentionally absent"))
|
|
4633
4728
|
for forbidden in (
|
|
4634
4729
|
".loom/work-items/INIT-0001.md",
|
|
4635
4730
|
".loom/progress/INIT-0001.md",
|
|
4636
4731
|
".loom/status/current.md",
|
|
4732
|
+
".loom/specs/INIT-0001/spec.md",
|
|
4733
|
+
".loom/specs/INIT-0001/plan.md",
|
|
4734
|
+
".loom/specs/INIT-0001/implementation-contract.md",
|
|
4637
4735
|
):
|
|
4638
4736
|
if forbidden in planned_paths or (light_target / forbidden).exists():
|
|
4639
4737
|
failures.append(Failure("deep-existing-bootstrap", f"`light-governance bootstrap sample` must not generate `{forbidden}`"))
|
|
4738
|
+
assert_no_default_release_target(light_target, light_payload, "light-governance bootstrap sample")
|
|
4739
|
+
readme_text = (light_target / ".loom/README.md").read_text(encoding="utf-8") if (light_target / ".loom/README.md").exists() else ""
|
|
4740
|
+
if ".loom/specs" in readme_text or "Spec suite" in readme_text:
|
|
4741
|
+
failures.append(Failure("deep-existing-bootstrap", "`light-governance bootstrap sample` must not declare a spec suite in `.loom/README.md`"))
|
|
4742
|
+
spec_review_text = (light_target / ".loom/reviews/INIT-0001.spec.json").read_text(encoding="utf-8") if (light_target / ".loom/reviews/INIT-0001.spec.json").exists() else ""
|
|
4743
|
+
if "formal spec path" in spec_review_text:
|
|
4744
|
+
failures.append(Failure("deep-existing-bootstrap", "`light-governance spec review placeholder` must not tell operators to consume a formal spec path"))
|
|
4745
|
+
if (light_target / ".loom/bin/loom_init.py").exists():
|
|
4746
|
+
poisoned_light_target = tmp_root / "light-governance-poison-specs"
|
|
4747
|
+
shutil.copytree(light_target, poisoned_light_target)
|
|
4748
|
+
(poisoned_light_target / ".loom/specs/INIT-0001").mkdir(parents=True, exist_ok=True)
|
|
4749
|
+
(poisoned_light_target / ".loom/specs/INIT-0001/spec.md").write_text("# Unexpected Spec\n", encoding="utf-8")
|
|
4750
|
+
poisoned_payload, poisoned_error = load_command_json(
|
|
4751
|
+
root,
|
|
4752
|
+
[
|
|
4753
|
+
"python3",
|
|
4754
|
+
str(poisoned_light_target / ".loom/bin/loom_init.py"),
|
|
4755
|
+
"verify",
|
|
4756
|
+
"--target",
|
|
4757
|
+
str(poisoned_light_target),
|
|
4758
|
+
],
|
|
4759
|
+
)
|
|
4760
|
+
if poisoned_error:
|
|
4761
|
+
failures.append(Failure("deep-existing-bootstrap", f"`light-governance forbidden spec verify` failed: {poisoned_error}"))
|
|
4762
|
+
else:
|
|
4763
|
+
errors_text = json.dumps(poisoned_payload.get("errors", []), ensure_ascii=False) if poisoned_payload else ""
|
|
4764
|
+
if poisoned_payload.get("ok") is not False:
|
|
4765
|
+
failures.append(Failure("deep-existing-bootstrap", "`light-governance forbidden spec verify` must fail closed"))
|
|
4766
|
+
if ".loom/specs/INIT-0001/spec.md" not in errors_text:
|
|
4767
|
+
failures.append(Failure("deep-existing-bootstrap", "`light-governance forbidden spec verify` must name the unexpected spec carrier"))
|
|
4640
4768
|
return failures
|
|
4641
4769
|
|
|
4642
4770
|
|
|
@@ -3172,12 +3172,6 @@ def default_repo_interface() -> dict[str, Any]:
|
|
|
3172
3172
|
"dynamic_tool_locators": [],
|
|
3173
3173
|
"policy_locators": [],
|
|
3174
3174
|
"hook_locators": [],
|
|
3175
|
-
"release_targets": {
|
|
3176
|
-
"catalog_locator": ".loom/companion/releases/catalog.json",
|
|
3177
|
-
"current_target_locator": ".loom/companion/releases/current.json",
|
|
3178
|
-
"enforcement": "blocking",
|
|
3179
|
-
"status_locator": ".loom/companion/releases/status.json",
|
|
3180
|
-
},
|
|
3181
3175
|
}
|
|
3182
3176
|
|
|
3183
3177
|
|
|
@@ -3237,10 +3231,6 @@ def companion_text_payloads() -> dict[str, str]:
|
|
|
3237
3231
|
".loom/companion/merge-ready.md": "# Companion Merge-Ready Surface\n",
|
|
3238
3232
|
".loom/companion/closeout.md": "# Companion Closeout Surface\n",
|
|
3239
3233
|
".loom/companion/checkpoints.md": "# Companion Checkpoints\n",
|
|
3240
|
-
".loom/companion/releases/changelog.md": "# Changelog\n\n- Bootstrap release intake example.\n",
|
|
3241
|
-
".loom/companion/releases/release-notes.md": "# Release Notes\n\n- Bootstrap release target is ready for Loom-derived status consumption.\n",
|
|
3242
|
-
".loom/companion/releases/migration-notes.md": "# Migration Notes\n\n- not_applicable\n",
|
|
3243
|
-
".loom/companion/releases/rollback.md": "# Rollback Basis\n\n- Revert the companion-owned release target declaration and rerun Loom checks.\n",
|
|
3244
3234
|
}
|
|
3245
3235
|
|
|
3246
3236
|
|
|
@@ -3249,48 +3239,6 @@ def companion_json_payloads() -> dict[str, dict[str, Any]]:
|
|
|
3249
3239
|
".loom/companion/manifest.json": default_companion_manifest(),
|
|
3250
3240
|
".loom/companion/repo-interface.json": default_repo_interface(),
|
|
3251
3241
|
".loom/companion/interop.json": default_repo_interop(),
|
|
3252
|
-
".loom/companion/releases/catalog.json": {
|
|
3253
|
-
"schema_version": "loom-target-release-catalog/v1",
|
|
3254
|
-
"current_release_id": "bootstrap-v0.1.0",
|
|
3255
|
-
"releases": [
|
|
3256
|
-
{
|
|
3257
|
-
"release_id": "bootstrap-v0.1.0",
|
|
3258
|
-
"locator": ".loom/companion/releases/current.json",
|
|
3259
|
-
}
|
|
3260
|
-
],
|
|
3261
|
-
},
|
|
3262
|
-
".loom/companion/releases/current.json": {
|
|
3263
|
-
"schema_version": "loom-target-release/v1",
|
|
3264
|
-
"release_id": "bootstrap-v0.1.0",
|
|
3265
|
-
"display_name": "Bootstrap v0.1.0",
|
|
3266
|
-
"target_branch": "main",
|
|
3267
|
-
"release_goal": "Bootstrap the first executable Loom path for this repository.",
|
|
3268
|
-
"status": "unreleased",
|
|
3269
|
-
"included_scope": {
|
|
3270
|
-
"phase": [{"id": "bootstrap-phase", "locator": ".loom/companion/checkpoints.md", "delivery_status": "planned"}],
|
|
3271
|
-
"fr": [],
|
|
3272
|
-
"work_item": [{"id": "INIT-0001", "locator": ".loom/work-items/INIT-0001.md", "delivery_status": "unmerged"}],
|
|
3273
|
-
"implementation_pr": [],
|
|
3274
|
-
"merge_commit": [],
|
|
3275
|
-
},
|
|
3276
|
-
"evidence": {
|
|
3277
|
-
"changelog_locator": ".loom/companion/releases/changelog.md",
|
|
3278
|
-
"release_notes_locator": ".loom/companion/releases/release-notes.md",
|
|
3279
|
-
"migration_notes_locator": ".loom/companion/releases/migration-notes.md",
|
|
3280
|
-
"tag_or_artifact_locator": ".loom/companion/README.md",
|
|
3281
|
-
"rollback_basis_locator": ".loom/companion/releases/rollback.md",
|
|
3282
|
-
},
|
|
3283
|
-
"authority": {
|
|
3284
|
-
"owner": "repo-companion",
|
|
3285
|
-
"source_kind": "repo_owned_locator",
|
|
3286
|
-
"source_locator": ".loom/companion/releases/current.json",
|
|
3287
|
-
},
|
|
3288
|
-
},
|
|
3289
|
-
".loom/companion/releases/status.json": {
|
|
3290
|
-
"schema_version": "loom-target-release-status/v1",
|
|
3291
|
-
"result": "pass",
|
|
3292
|
-
"summary": "repo-owned release status example is readable.",
|
|
3293
|
-
},
|
|
3294
3242
|
}
|
|
3295
3243
|
|
|
3296
3244
|
|