@renoxar/koolie 1.25.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/.github/workflows/publish.yml +177 -0
  2. package/.koolie/QUELLREPOSITORIUM.md +9 -14
  3. package/.koolie/core/CHANGELOG.md +59 -0
  4. package/.koolie/core/LICENSE-HINWEIS.md +5 -6
  5. package/.koolie/core/OWNERS.md +2 -2
  6. package/.koolie/core/VERSION +1 -1
  7. package/.koolie/core/build/doc/00-kopf.md +6 -6
  8. package/.koolie/core/build/doc/01-executive-summary.md +8 -8
  9. package/.koolie/core/build/doc/03-ziele-nichtziele.md +2 -2
  10. package/.koolie/core/build/doc/04-geltungsbereich.md +4 -4
  11. package/.koolie/core/build/doc/05-glossar.md +3 -3
  12. package/.koolie/core/build/doc/07-architektur.md +2 -2
  13. package/.koolie/core/build/doc/07a-abbildungsschicht.md +9 -9
  14. package/.koolie/core/build/doc/08-trennung.md +3 -3
  15. package/.koolie/core/build/doc/09-betriebsmodi.md +8 -8
  16. package/.koolie/core/build/doc/15-referenzstruktur.md +56 -27
  17. package/.koolie/core/build/doc/16-agentenanweisung.md +2 -2
  18. package/.koolie/core/build/doc/20-referenz-skills.md +46 -46
  19. package/.koolie/core/build/doc/25-governance.md +9 -1
  20. package/.koolie/core/build/doc/26-qs-test.md +32 -3
  21. package/.koolie/core/build/doc/27-pilot.md +2 -2
  22. package/.koolie/core/build/doc/28-uebernahme.md +9 -1
  23. package/.koolie/core/build/doc/30-roadmap.md +3 -1
  24. package/.koolie/core/build/doc/31-anhaenge.md +1 -1
  25. package/.koolie/core/checklists/01-preflight.md +3 -3
  26. package/.koolie/core/checklists/02-privacy-context.md +1 -1
  27. package/.koolie/core/checklists/03-before-code-change.md +2 -2
  28. package/.koolie/core/checklists/04-review-ai-code.md +1 -1
  29. package/.koolie/core/checklists/05-testing.md +1 -1
  30. package/.koolie/core/checklists/06-security.md +1 -1
  31. package/.koolie/core/checklists/08-merge-request.md +1 -1
  32. package/.koolie/core/checklists/09-onboarding.md +2 -2
  33. package/.koolie/core/checklists/10-project-adoption.md +8 -8
  34. package/.koolie/core/checklists/11-framework-release.md +14 -14
  35. package/.koolie/core/clientmap.py +2 -2
  36. package/.koolie/core/clients/README.md +54 -52
  37. package/.koolie/core/clients/_template/CLIENT_PACK.md +19 -19
  38. package/.koolie/core/clients/claude-code/CLIENT_PACK.md +108 -164
  39. package/.koolie/core/clients/claude-code/manifest.json +5 -5
  40. package/.koolie/core/clients/claude-code/root-template/.claude/README.md +9 -9
  41. package/.koolie/core/clients/cursor/CLIENT_PACK.md +66 -60
  42. package/.koolie/core/clients/cursor/manifest.json +3 -3
  43. package/.koolie/core/clients/cursor/root-template/.cursor/README.md +3 -3
  44. package/.koolie/core/clients/devin-desktop/CLIENT_PACK.md +62 -64
  45. package/.koolie/core/clients/devin-desktop/manifest.json +5 -5
  46. package/.koolie/core/clients/devin-desktop/root-template/.devin/README.md +9 -9
  47. package/.koolie/core/clients/kiro/CLIENT_PACK.md +55 -48
  48. package/.koolie/core/clients/kiro/manifest.json +4 -4
  49. package/.koolie/core/clients/kiro/root-template/.kiro/README.md +3 -3
  50. package/.koolie/core/clients/openai-codex/CLIENT_PACK.md +98 -103
  51. package/.koolie/core/clients/openai-codex/manifest.json +3 -3
  52. package/.koolie/core/clients/openai-codex/root-template/.codex/README.md +2 -2
  53. package/.koolie/core/decision-trees/02-may-ai-do-task.md +2 -2
  54. package/.koolie/core/decision-trees/03-analyze-or-modify.md +12 -12
  55. package/.koolie/core/decision-trees/04-required-review.md +1 -1
  56. package/.koolie/core/docs/ADOPTION_GUIDE.md +281 -385
  57. package/.koolie/core/docs/DOCUMENTATION_STANDARD.md +44 -36
  58. package/.koolie/core/docs/PLACEHOLDER_REGISTRY.md +8 -8
  59. package/.koolie/core/docs/ROADMAP.md +34 -17
  60. package/.koolie/core/docs/RUNTIME_GLOSSARY.md +34 -35
  61. package/.koolie/core/examples/example-ergebnisbericht.md +1 -1
  62. package/.koolie/core/examples/example-mr-description.md +2 -2
  63. package/.koolie/core/framework/core/00-principles.md +1 -1
  64. package/.koolie/core/framework/core/01-governance.md +8 -8
  65. package/.koolie/core/framework/core/02-privacy.md +12 -12
  66. package/.koolie/core/framework/core/03-security.md +13 -11
  67. package/.koolie/core/framework/core/05-working-model.md +22 -22
  68. package/.koolie/core/framework/core/06-prompting-rules.md +5 -5
  69. package/.koolie/core/framework/core/07-review-rules.md +1 -1
  70. package/.koolie/core/framework/core/08-skill-conventions.md +11 -11
  71. package/.koolie/core/framework/core/09-risk-model.md +6 -6
  72. package/.koolie/core/framework/core/10-error-escalation.md +1 -1
  73. package/.koolie/core/framework/org-policies/MAPPING_CLASSIFICATION.md +1 -1
  74. package/.koolie/core/framework/overlay-patterns/general.md +63 -75
  75. package/.koolie/core/framework/role-packs/README.md +16 -28
  76. package/.koolie/core/framework/role-packs/_template/ROLE_PACK.md +3 -3
  77. package/.koolie/core/framework/role-packs/requirements-engineering/ROLE_PACK.md +23 -22
  78. package/.koolie/core/framework/role-packs/requirements-engineering/runtime/30-role-requirements-engineering.md +5 -5
  79. package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/CHANGELOG.md +2 -1
  80. package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/EXAMPLES.md +5 -5
  81. package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/SKILL.md +9 -9
  82. package/.koolie/core/framework/role-packs/requirements-engineering/skills/koolie-ticket/TESTS.md +22 -0
  83. package/.koolie/core/framework/role-packs/software-development/ROLE_PACK.md +16 -16
  84. package/.koolie/core/framework/role-packs/software-development/runtime/30-role-software-development.md +1 -1
  85. package/.koolie/core/framework/runtime/agents/{fw-reviewer.md → koolie-reviewer.md} +2 -2
  86. package/.koolie/core/framework/runtime/permissions.json +13 -13
  87. package/.koolie/core/framework/runtime/root-instruction.md +5 -5
  88. package/.koolie/core/framework/runtime/rules/10-privacy-security.md +2 -2
  89. package/.koolie/core/framework/runtime/rules/15-development-rules.md +1 -1
  90. package/.koolie/core/framework/runtime/rules/16-plan-spezifikation.md +1 -1
  91. package/.koolie/core/framework/runtime/rules/20-project-overlay.md +2 -2
  92. package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/CHANGELOG.md +2 -1
  93. package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/EXAMPLES.md +8 -8
  94. package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/SKILL.md +21 -21
  95. package/.koolie/core/framework/skills/koolie-bugfix-prepare/TESTS.md +15 -0
  96. package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/CHANGELOG.md +2 -1
  97. package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/EXAMPLES.md +6 -6
  98. package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/SKILL.md +12 -12
  99. package/.koolie/core/framework/skills/koolie-change-analyze/TESTS.md +16 -0
  100. package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/CHANGELOG.md +2 -1
  101. package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/EXAMPLES.md +4 -4
  102. package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/SKILL.md +15 -15
  103. package/.koolie/core/framework/skills/koolie-change-small/TESTS.md +13 -0
  104. package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/CHANGELOG.md +2 -1
  105. package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/EXAMPLES.md +4 -4
  106. package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/SKILL.md +10 -10
  107. package/.koolie/core/framework/skills/koolie-code-explain/TESTS.md +11 -0
  108. package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/CHANGELOG.md +2 -1
  109. package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/EXAMPLES.md +3 -3
  110. package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/SKILL.md +8 -8
  111. package/.koolie/core/framework/skills/koolie-docs-update/TESTS.md +12 -0
  112. package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/CHANGELOG.md +2 -1
  113. package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/EXAMPLES.md +6 -6
  114. package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/SKILL.md +15 -15
  115. package/.koolie/core/framework/skills/koolie-error-analyze/TESTS.md +12 -0
  116. package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/CHANGELOG.md +2 -1
  117. package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/EXAMPLES.md +6 -6
  118. package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/SKILL.md +8 -8
  119. package/.koolie/core/framework/skills/koolie-mr-description/TESTS.md +12 -0
  120. package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/CHANGELOG.md +2 -1
  121. package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/EXAMPLES.md +4 -4
  122. package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/SKILL.md +8 -8
  123. package/.koolie/core/framework/skills/koolie-overlay-pflege/TESTS.md +13 -0
  124. package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/CHANGELOG.md +2 -1
  125. package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/EXAMPLES.md +7 -7
  126. package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/SKILL.md +14 -14
  127. package/.koolie/core/framework/skills/koolie-plan/TESTS.md +14 -0
  128. package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/CHANGELOG.md +2 -1
  129. package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/EXAMPLES.md +4 -4
  130. package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/SKILL.md +12 -12
  131. package/.koolie/core/framework/skills/koolie-refactor/TESTS.md +14 -0
  132. package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/CHANGELOG.md +2 -1
  133. package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/EXAMPLES.md +4 -4
  134. package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/SKILL.md +8 -8
  135. package/.koolie/core/framework/skills/koolie-repo-analyze/TESTS.md +11 -0
  136. package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/CHANGELOG.md +2 -1
  137. package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/EXAMPLES.md +3 -3
  138. package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/SKILL.md +7 -7
  139. package/.koolie/core/framework/skills/koolie-review-support/TESTS.md +13 -0
  140. package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/CHANGELOG.md +2 -1
  141. package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/EXAMPLES.md +5 -5
  142. package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/SKILL.md +11 -11
  143. package/.koolie/core/framework/skills/koolie-tests/TESTS.md +12 -0
  144. package/.koolie/core/framework/tech-packs/README.md +2 -2
  145. package/.koolie/core/framework/tech-packs/_template/TECH_PACK.md +2 -2
  146. package/.koolie/core/governance/ADOPTION_REGISTRY.md +22 -58
  147. package/.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md +1 -1
  148. package/.koolie/core/governance/DECISION_LOG.md +7 -1
  149. package/.koolie/core/governance/EXCEPTION_PROCESS.md +1 -1
  150. package/.koolie/core/governance/FEEDBACK_PROCESS.md +1 -1
  151. package/.koolie/core/governance/FRAMEWORK_DEV_PROFILE.md +64 -66
  152. package/.koolie/core/governance/PRIORITY_HIERARCHY.md +13 -13
  153. package/.koolie/core/governance/RACI.md +3 -3
  154. package/.koolie/core/governance/RELEASE_PROCESS.md +101 -108
  155. package/.koolie/core/governance/change-requests/CR-2026-173-oeffentlicher-auftritt-koolie-praefix.md +67 -0
  156. package/.koolie/core/install.py +99 -0
  157. package/.koolie/core/koexistenz.py +2 -2
  158. package/.koolie/core/onboarding/GUIDE.md +7 -7
  159. package/.koolie/core/onboarding/KNOWLEDGE_CHECK.md +1 -1
  160. package/.koolie/core/onboarding/MENTOR_CHECKLIST.md +3 -3
  161. package/.koolie/core/onboarding/QUICKSTART.md +2 -2
  162. package/.koolie/core/onboarding/REFERENCE.md +14 -14
  163. package/.koolie/core/onboarding/exercises/EXERCISES.md +8 -8
  164. package/.koolie/core/onboarding/exercises/README.md +47 -65
  165. package/.koolie/core/pilot/PILOT_CONCEPT.md +1 -1
  166. package/.koolie/core/prompts/01-understand-codebase.md +11 -7
  167. package/.koolie/core/prompts/02-impact-analysis.md +17 -7
  168. package/.koolie/core/prompts/03-implementation-planning.md +10 -6
  169. package/.koolie/core/prompts/04-code-generation.md +11 -5
  170. package/.koolie/core/prompts/05-test-generation.md +13 -7
  171. package/.koolie/core/prompts/06-refactoring.md +14 -8
  172. package/.koolie/core/prompts/07-debugging.md +13 -11
  173. package/.koolie/core/prompts/08-security-review.md +2 -2
  174. package/.koolie/core/prompts/09-performance-analysis.md +2 -2
  175. package/.koolie/core/prompts/10-documentation.md +6 -4
  176. package/.koolie/core/prompts/11-merge-request-review.md +7 -5
  177. package/.koolie/core/prompts/12-developer-training.md +5 -3
  178. package/.koolie/core/prompts/README.md +17 -15
  179. package/.koolie/core/templates/MR_AI_DISCLOSURE.md +2 -2
  180. package/.koolie/core/templates/PLAN_TEMPLATE.md +2 -2
  181. package/.koolie/core/templates/SKILL_TEMPLATE.md +3 -3
  182. package/.koolie/core/templates/project-overlay/OVERLAY.md +28 -22
  183. package/.koolie/core/templates/project-overlay/documents/architecture/decisions/README.md +1 -1
  184. package/.koolie/core/tests/EDGE_CASES.md +4 -7
  185. package/.koolie/core/tests/TEST_CATALOG.md +33 -33
  186. package/.koolie/core/tests/protocols/2026-10-02-oeffentlicher-auftritt-2.0.0.md +42 -0
  187. package/.koolie/core/tests/scripts/hook-check-secrets.py +2 -2
  188. package/.koolie/core/tests/scripts/hook-overlay-status.py +1 -1
  189. package/.koolie/core/tests/scripts/probe-pruefungen.py +4 -2
  190. package/.koolie/core/tests/scripts/pruefungen/berechtigungen.py +7 -7
  191. package/.koolie/core/tests/scripts/pruefungen/bestand.py +20 -3
  192. package/.koolie/core/tests/scripts/pruefungen/dokumente.py +88 -0
  193. package/.koolie/core/tests/scripts/pruefungen/gemeinsam.py +1 -1
  194. package/.koolie/core/tests/scripts/pruefungen/hooks.py +1 -1
  195. package/.koolie/core/tests/scripts/pruefungen/overlay.py +5 -5
  196. package/.koolie/core/tests/scripts/pruefungen/testkatalog.py +5 -5
  197. package/.koolie/core/tests/scripts/pruefungen/werkzeuge.py +81 -2
  198. package/.koolie/core/tests/scripts/sonden/teil02_packs_mandat_mcp.py +6 -6
  199. package/.koolie/core/tests/scripts/sonden/teil03_pruefungen_26_bis_36.py +11 -11
  200. package/.koolie/core/tests/scripts/sonden/teil04_pruefungen_37_bis_45.py +11 -11
  201. package/.koolie/core/tests/scripts/sonden/teil05_pruefungen_46_bis_55.py +4 -4
  202. package/.koolie/core/tests/scripts/sonden/teil06_pruefungen_57_bis_65.py +33 -33
  203. package/.koolie/core/tests/scripts/sonden/teil07_overlay_und_lieferung.py +3 -3
  204. package/.koolie/core/tests/scripts/sonden/teil08_pruefungen_66_bis_80.py +3 -3
  205. package/.koolie/core/tests/scripts/sonden/teil10_pruefungen_83_bis_95.py +3 -3
  206. package/.koolie/core/tests/scripts/sonden/teil11_pruefungen_104_und_105.py +2 -2
  207. package/.koolie/core/tests/scripts/sonden/teil14_modi_ausnahmen_skills.py +1 -1
  208. package/.koolie/core/tests/scripts/sonden/teil16_koexistenz.py +5 -5
  209. package/.koolie/core/tests/scripts/sonden/teil17_paketquellen.py +33 -0
  210. package/.koolie/core/tests/scripts/sonden/teil19_skillnamen.py +97 -0
  211. package/.koolie/core/tests/scripts/sonden/teil20_kennungen.py +70 -0
  212. package/.koolie/core/tests/scripts/validate-framework.py +15 -6
  213. package/.koolie/core/tests/scripts/validate-output.py +1 -1
  214. package/CONTRIBUTING.md +16 -10
  215. package/QUICKSTART.en.md +44 -51
  216. package/QUICKSTART.md +44 -50
  217. package/package.json +2 -2
  218. package/paketquellen/README.md +11 -11
  219. package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/TESTS.md +0 -22
  220. package/.koolie/core/framework/skills/fw-bugfix-prepare/TESTS.md +0 -15
  221. package/.koolie/core/framework/skills/fw-change-analyze/TESTS.md +0 -16
  222. package/.koolie/core/framework/skills/fw-change-small/TESTS.md +0 -13
  223. package/.koolie/core/framework/skills/fw-code-explain/TESTS.md +0 -11
  224. package/.koolie/core/framework/skills/fw-docs-update/TESTS.md +0 -12
  225. package/.koolie/core/framework/skills/fw-error-analyze/TESTS.md +0 -12
  226. package/.koolie/core/framework/skills/fw-mr-description/TESTS.md +0 -12
  227. package/.koolie/core/framework/skills/fw-overlay-pflege/TESTS.md +0 -13
  228. package/.koolie/core/framework/skills/fw-plan/TESTS.md +0 -14
  229. package/.koolie/core/framework/skills/fw-refactor/TESTS.md +0 -14
  230. package/.koolie/core/framework/skills/fw-repo-analyze/TESTS.md +0 -11
  231. package/.koolie/core/framework/skills/fw-review-support/TESTS.md +0 -13
  232. package/.koolie/core/framework/skills/fw-tests/TESTS.md +0 -12
@@ -374,7 +374,7 @@ def _47_verlaufszusatz(root: str) -> None:
374
374
  Zusatz zulaessig bleibt - und dass Pruefung 46 ihn weiterhin richtig einordnet.
375
375
  """
376
376
  ersetze(P(root, ".koolie/core/checklists/01-preflight.md".replace("/", os.sep)),
377
- ("| Status | `pilot` |", "| Status | `pilot (Abnahme CR-2026-073)` |"))
377
+ ("| Status | `pilot` |", "| Status | `pilot (Abnahme 2026-09-15)` |"))
378
378
 
379
379
 
380
380
  def _47_tabelle_hinter_ueberschrift(root: str) -> None:
@@ -491,7 +491,7 @@ def _48_installiertes_pack(root: str) -> None:
491
491
  """
492
492
  installiert, _ = _48_marken(root)
493
493
  _48_datei(root, "14-sonde-installiert.md",
494
- "Ausgabeformat: Analyse nach `%s/skills/fw-repo-analyze/SKILL.md`."
494
+ "Ausgabeformat: Analyse nach `%s/skills/koolie-repo-analyze/SKILL.md`."
495
495
  % installiert)
496
496
 
497
497
 
@@ -593,7 +593,7 @@ gegenprobe("48c", "Ein Clientpfad in der Roadmap bleibt zulaessig - sie fuehrt d
593
593
  # --- Pruefung 49: ausdruecklicher Skill-Aufruf im Testkatalog (D-146) --------------
594
594
  #
595
595
  # Der Befund, der sie veranlasst hat, ist am 2026-09-18 an FW-SC-01 gemessen worden: Der
596
- # Hauptlauf rief `fw-change-small` auf, wurde abgewiesen - neun von zwoelf Kernskills
596
+ # Hauptlauf rief `koolie-change-small` auf, wurde abgewiesen - neun von zwoelf Kernskills
597
597
  # fuehren `triggers` ohne `- model`, und das Pack claude-code bildet das auf
598
598
  # `disable-model-invocation: true` ab - und arbeitete den Ablauf nicht nach. Damit fiel
599
599
  # Schritt 3 des Skills aus, der die Verwender der geaenderten Einheit erhebt; die
@@ -622,7 +622,7 @@ def _49_skill_ohne_modell(root: str) -> str:
622
622
  if i < 0:
623
623
  continue
624
624
  block = text[i:text.find("---", 3)] if text.startswith("---") else text[i:i + 200]
625
- # Seit 1.17.0 tragen fw-bugfix-prepare und fw-plan `model` (D-451); der naechste
625
+ # Seit 1.17.0 tragen koolie-bugfix-prepare und koolie-plan `model` (D-451); der naechste
626
626
  # Skill ohne model fuehrt Test- und Lintbefehle aus, und Pruefung 49 verlangt dann
627
627
  # zu Recht den Schlitz in der Vorbedingung - gemessen wuerde die falsche Regel.
628
628
  if "- model" not in block and "<TEST_COMMAND>" not in text and "<LINT_COMMAND>" not in text:
@@ -27,7 +27,7 @@ from .apparat import (
27
27
  M57_UNGEBUNDEN = "als nicht gesetzt ("
28
28
 
29
29
  P57_BLATT = (".koolie/core/framework/role-packs/requirements-engineering/skills/"
30
- "role-re-ticket/TESTS.md").replace("/", os.sep)
30
+ "koolie-ticket/TESTS.md").replace("/", os.sep)
31
31
 
32
32
  # Die berichtigte Fassung der Zelle - Anker beider Eingriffe.
33
33
  P57_HEUTE = "Übungs-Overlay, dessen `<ISSUE_TRACKER>` **gebunden** ist"
@@ -170,14 +170,14 @@ def _60_katalogzeile(root: str, zeile: str) -> None:
170
170
 
171
171
 
172
172
  def _60_ohne_schlitz(root: str) -> None:
173
- """Ein sitzung-Testfall ruft `/fw-change-small` und nennt keinen Befehlsschlitz.
173
+ """Ein sitzung-Testfall ruft `/koolie-change-small` und nennt keinen Befehlsschlitz.
174
174
 
175
175
  Genau die Gestalt, in der FW-SC-01 zwei Releases lang dastand - und die zwei
176
176
  Laeufe gekostet hat.
177
177
  """
178
178
  _60_katalogzeile(root,
179
179
  "| FW-SO-08 | Sondenzeile | Sondenvorbedingung ohne Befehlsangabe "
180
- "| `/fw-change-small \"<Sondenaufgabe>\"` | Ablehnung | Zugriff "
180
+ "| `/koolie-change-small \"<Sondenaufgabe>\"` | Ablehnung | Zugriff "
181
181
  "| sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
182
182
 
183
183
 
@@ -185,7 +185,7 @@ def _60_mit_schlitz(root: str) -> None:
185
185
  """Gegenprobe: dieselbe Zeile, aber die Vorbedingung nennt beide Schlitze."""
186
186
  _60_katalogzeile(root,
187
187
  "| FW-SO-09 | Sondenzeile | Sondenvorbedingung; `<TEST_COMMAND>` und "
188
- "`<LINT_COMMAND>` im `allow`-Korb | `/fw-change-small \"<Sondenaufgabe>\"` "
188
+ "`<LINT_COMMAND>` im `allow`-Korb | `/koolie-change-small \"<Sondenaufgabe>\"` "
189
189
  "| Ablehnung | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
190
190
 
191
191
 
@@ -196,19 +196,19 @@ def _60_andere_pruefmethode(root: str) -> None:
196
196
  """
197
197
  _60_katalogzeile(root,
198
198
  "| FW-SO-10 | Sondenzeile | Sondenvorbedingung ohne Befehlsangabe "
199
- "| `/fw-change-small \"<Sondenaufgabe>\"` | Ablehnung | Zugriff "
199
+ "| `/koolie-change-small \"<Sondenaufgabe>\"` | Ablehnung | Zugriff "
200
200
  "| review | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
201
201
 
202
202
 
203
203
  def _60_skill_ohne_schlitz(root: str) -> None:
204
204
  """Gegenprobe: ein Skill, dessen Frontmatter keinen Befehl ausfuehrt.
205
205
 
206
- Sie belegt, dass der Zuschnitt nicht zu breit ist. `fw-repo-analyze` ist rein
206
+ Sie belegt, dass der Zuschnitt nicht zu breit ist. `koolie-repo-analyze` ist rein
207
207
  lesend und fuehrt keinen Befehlsschlitz.
208
208
  """
209
209
  _60_katalogzeile(root,
210
210
  "| FW-SO-11 | Sondenzeile | Sondenvorbedingung ohne Befehlsangabe "
211
- "| `/fw-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
211
+ "| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
212
212
  "| sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
213
213
 
214
214
 
@@ -275,7 +275,7 @@ M61_FREMD = "steht nicht im Vokabular"
275
275
  M61_ANKER = "keine Zelle mit Prüfmethode gefunden"
276
276
  P61_KATALOG = ".koolie/core/tests/TEST_CATALOG.md".replace("/", os.sep)
277
277
  P61_KATALOGANKER = "| FW-AK-02 (Basis) |"
278
- P61_BLATT = ".koolie/core/framework/skills/fw-repo-analyze/TESTS.md".replace("/", os.sep)
278
+ P61_BLATT = ".koolie/core/framework/skills/koolie-repo-analyze/TESTS.md".replace("/", os.sep)
279
279
  P61_BLATTANKER = "| SK-001-N03 |"
280
280
 
281
281
 
@@ -287,7 +287,7 @@ def _61_fremdes_wort(root: str) -> None:
287
287
  """Eine Katalogzeile mit dem Wort `manuell` - genau der Stand vor 0.67.0."""
288
288
  _61_katalogzeile(root,
289
289
  "| FW-SO-12 | Sondenzeile | Sondenvorbedingung "
290
- "| `/fw-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
290
+ "| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
291
291
  "| manuell | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
292
292
 
293
293
 
@@ -295,7 +295,7 @@ def _61_fremdes_wort_im_blatt(root: str) -> None:
295
295
  """Dasselbe Wort in einem der dreizehn Blaetter - dort stand es 87-mal."""
296
296
  zeile_nach(P(root, P61_BLATT), P61_BLATTANKER,
297
297
  "| SK-001-S99 | Sondenzeile | Sondenvorbedingung "
298
- "| `/fw-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
298
+ "| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
299
299
  "| manuell | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
300
300
 
301
301
 
@@ -303,8 +303,8 @@ def _61_zulaessiger_zusatz(root: str) -> None:
303
303
  """Gegenprobe: `sitzung` mit Zusatz - die Schreibweise beider Bestaende."""
304
304
  _61_katalogzeile(root,
305
305
  "| FW-SO-13 | Sondenzeile | Sondenvorbedingung "
306
- "| `/fw-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
307
- "| sitzung + Skript `validate-output.py --skill fw-repo-analyze` "
306
+ "| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
307
+ "| sitzung + Skript `validate-output.py --skill koolie-repo-analyze` "
308
308
  "| bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
309
309
 
310
310
 
@@ -352,30 +352,30 @@ gegenprobe("61c", "`skript+sitzung` und `review` bleiben zulaessig - der Zuschni
352
352
  # nicht getroffen - und genau sie trugen zwei Skills doppelt.
353
353
  M62_WOERTLICH = "nennt die Version wörtlich"
354
354
 
355
- P62_SKILL = ".koolie/core/framework/skills/fw-code-explain/SKILL.md".replace("/", os.sep)
356
- P62_PLAN = ".koolie/core/framework/skills/fw-plan/SKILL.md".replace("/", os.sep)
355
+ P62_SKILL = ".koolie/core/framework/skills/koolie-code-explain/SKILL.md".replace("/", os.sep)
356
+ P62_PLAN = ".koolie/core/framework/skills/koolie-plan/SKILL.md".replace("/", os.sep)
357
357
  P62_SCHLITZ = "v<Version aus dem Steckbrief>"
358
358
 
359
359
 
360
360
  def _62_kopfzeile(root: str) -> None:
361
361
  """Die Kopfzeile der Ausgabevorlage traegt wieder eine woertliche Version."""
362
362
  ersetze(P(root, P62_SKILL),
363
- ("## Code-Erklärung – fw-code-explain " + P62_SCHLITZ,
364
- "## Code-Erklärung – fw-code-explain v9.9.9", 1))
363
+ ("## Code-Erklärung – koolie-code-explain " + P62_SCHLITZ,
364
+ "## Code-Erklärung – koolie-code-explain v9.9.9", 1))
365
365
 
366
366
 
367
367
  def _62_erstellt_mit(root: str) -> None:
368
368
  """Die zweite Gestalt: die Zeile `Erstellt mit` im Ergebnisbericht."""
369
369
  ersetze(P(root, P62_PLAN),
370
- ("| Erstellt mit | fw-plan " + P62_SCHLITZ + " |",
371
- "| Erstellt mit | fw-plan v9.9.9 |", 1))
370
+ ("| Erstellt mit | koolie-plan " + P62_SCHLITZ + " |",
371
+ "| Erstellt mit | koolie-plan v9.9.9 |", 1))
372
372
 
373
373
 
374
374
  def _62_zweiter_schlitz(root: str) -> None:
375
375
  """Gegenprobe: der Schlitz darf mehrfach stehen - geprueft wird die ZAHL."""
376
376
  ersetze(P(root, P62_SKILL),
377
- ("## Code-Erklärung – fw-code-explain " + P62_SCHLITZ,
378
- "## Code-Erklärung – fw-code-explain " + P62_SCHLITZ
377
+ ("## Code-Erklärung – koolie-code-explain " + P62_SCHLITZ,
378
+ "## Code-Erklärung – koolie-code-explain " + P62_SCHLITZ
379
379
  + " (Vorlage " + P62_SCHLITZ + ")", 1))
380
380
 
381
381
 
@@ -407,7 +407,7 @@ gegenprobe("62b", "Der Schlitz darf mehrfach in einer Zeile stehen - geprueft wi
407
407
  M63_INS_LEERE = "diese Nummer fuehrt dort keine Ueberschrift"
408
408
 
409
409
  P63_PROMPT = ".koolie/core/prompts/02-impact-analysis.md".replace("/", os.sep)
410
- P63_BLATT = ".koolie/core/framework/skills/fw-error-analyze/TESTS.md".replace("/", os.sep)
410
+ P63_BLATT = ".koolie/core/framework/skills/koolie-error-analyze/TESTS.md".replace("/", os.sep)
411
411
  P63_ZIEL = ".koolie/core/framework/core/02-privacy.md".replace("/", os.sep)
412
412
  P63_PROTOKOLL = (".koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-1.md"
413
413
  .replace("/", os.sep))
@@ -494,19 +494,19 @@ def _64_rueckfrage_ungedeckt(root: str) -> None:
494
494
  """
495
495
  _64_katalogzeile(root,
496
496
  "| FW-SO-12 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
497
- " | `/fw-change-small \"<Sondenaufgabe>\"` | [RÜCKFRAGE] zur Aufteilung "
497
+ " | `/koolie-change-small \"<Sondenaufgabe>\"` | [RÜCKFRAGE] zur Aufteilung "
498
498
  "| Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
499
499
 
500
500
 
501
501
  def _64_halt_ungedeckt(root: str) -> None:
502
502
  """Eine Zelle verlangt [HALT] von einem Skill, der sie nur als Anweisung fuehrt.
503
503
 
504
- `fw-refactor` nennt [HALT] elfmal - in Arbeitsschritten und Fehlerbildern, und
504
+ `koolie-refactor` nennt [HALT] elfmal - in Arbeitsschritten und Fehlerbildern, und
505
505
  in keinem Ausgabeformat. Fuenf seiner sieben Zellen standen so da.
506
506
  """
507
507
  _64_katalogzeile(root,
508
508
  "| FW-SO-13 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
509
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | [HALT] nach dem "
509
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | [HALT] nach dem "
510
510
  "Testnachweis | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
511
511
 
512
512
 
@@ -518,7 +518,7 @@ def _64_unzulaessig_ungedeckt(root: str) -> None:
518
518
  """
519
519
  _64_katalogzeile(root,
520
520
  "| FW-SO-14 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
521
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | Ablehnung "
521
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Ablehnung "
522
522
  "| Änderungen vor dem [HALT] | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
523
523
 
524
524
 
@@ -526,11 +526,11 @@ def _64_gedeckt(root: str) -> None:
526
526
  """Gegenprobe: dieselbe Marke bei einem Skill, der sie in Abschnitt 5 und 6 fuehrt.
527
527
 
528
528
  Das ist die Abhilfe - und zugleich der Beleg, dass der Zuschnitt nicht zu breit
529
- ist. `fw-change-small` fuehrt [HALT] in beiden Abschnitten.
529
+ ist. `koolie-change-small` fuehrt [HALT] in beiden Abschnitten.
530
530
  """
531
531
  _64_katalogzeile(root,
532
532
  "| FW-SO-15 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
533
- " | `/fw-change-small \"<Sondenaufgabe>\"` | [HALT] vor dem ersten "
533
+ " | `/koolie-change-small \"<Sondenaufgabe>\"` | [HALT] vor dem ersten "
534
534
  "Schreibzugriff | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
535
535
 
536
536
 
@@ -543,7 +543,7 @@ def _64_letzte_zelle(root: str) -> None:
543
543
  """
544
544
  _64_katalogzeile(root,
545
545
  "| FW-SO-16 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
546
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten nach dem "
546
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten nach dem "
547
547
  "Testnachweis | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278): der Lauf hat "
548
548
  "[HALT] wörtlich geschrieben |")
549
549
 
@@ -580,7 +580,7 @@ sonde("64a", "Eine Zelle verlangt [RUECKFRAGE] - die Marke steht in KEINEM Absch
580
580
  "Handlungsmarke",
581
581
  _64_rueckfrage_ungedeckt, M64_UNGEDECKT)
582
582
 
583
- sonde("64b", "Eine Zelle verlangt [HALT] von fw-refactor, das die Marke nur in "
583
+ sonde("64b", "Eine Zelle verlangt [HALT] von koolie-refactor, das die Marke nur in "
584
584
  "Arbeitsschritten und Fehlerbildern fuehrt - fuenf seiner sieben Zellen "
585
585
  "standen so da",
586
586
  _64_halt_ungedeckt, M64_UNGEDECKT)
@@ -641,7 +641,7 @@ def _65_ohne_protokoll(root: str) -> None:
641
641
  """
642
642
  _65_katalogzeile(root,
643
643
  "| FW-SO-17 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
644
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
644
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
645
645
  "| sitzung | bestanden (Sondenbeleg ohne Protokollverweis) |")
646
646
 
647
647
 
@@ -655,7 +655,7 @@ def _65_ohne_pack(root: str) -> None:
655
655
  """
656
656
  _65_katalogzeile(root,
657
657
  "| FW-SO-18 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
658
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
658
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
659
659
  "| sitzung | bestanden (" + P65_PROTOKOLL + ") |")
660
660
 
661
661
 
@@ -667,7 +667,7 @@ def _65_fremdes_wort(root: str) -> None:
667
667
  """
668
668
  _65_katalogzeile(root,
669
669
  "| FW-SO-19 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
670
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
670
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
671
671
  "| sitzung | geprüft (" + P65_PROTOKOLL + "; " + P65_PACK + ") |")
672
672
 
673
673
 
@@ -707,7 +707,7 @@ def _65_vollstaendig(root: str) -> None:
707
707
  """
708
708
  _65_katalogzeile(root,
709
709
  "| FW-SO-21 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
710
- " | `/fw-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
710
+ " | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
711
711
  "| sitzung | bestanden (" + P65_PROTOKOLL + "; " + P65_PACK + ") |")
712
712
 
713
713
 
@@ -995,14 +995,14 @@ def sonden_ohne_pyyaml() -> None:
995
995
  "Ohne PyYAML meldet Pruefung 33 an einer richtigen Installation nichts")
996
996
  if not (gesperrt and still):
997
997
  notiz(" PyYAML gesperrt %s, still %s" % (gesperrt, still))
998
- skill = os.path.join(root, ".claude", "skills", "fw-plan", "SKILL.md")
998
+ skill = os.path.join(root, ".claude", "skills", "koolie-plan", "SKILL.md")
999
999
  text = lies(skill)
1000
1000
  neu = re.sub(r"(?m)^disallowed-tools: .*$", "disallowed-tools: Edit", text)
1001
1001
  if neu == text:
1002
- raise Praeparationsfehler("disallowed-tools in fw-plan/SKILL.md nicht gefunden")
1002
+ raise Praeparationsfehler("disallowed-tools in koolie-plan/SKILL.md nicht gefunden")
1003
1003
  schreib(skill, neu)
1004
1004
  aus = lauf_ohne()
1005
- ok = "fw-plan/SKILL.md: disallowed-tools traegt ['Edit']" in aus
1005
+ ok = "koolie-plan/SKILL.md: disallowed-tools traegt ['Edit']" in aus
1006
1006
  melde("SONDE", "S364", ok,
1007
1007
  "Ohne PyYAML wird eine verkuerzte disallowed-tools-Liste weiter gemeldet")
1008
1008
  finally:
@@ -548,7 +548,7 @@ M72 = "wird aber von keinem Eintrag der Berechtigungsdatei genannt"
548
548
  M72_RUECK = "nennt keinen Skill in"
549
549
  M72_FELD = "Feld permission_tools.skill fehlt"
550
550
  P72_PACKSKILL = (".koolie/core/framework/role-packs/requirements-engineering/"
551
- "skills/role-re-ticket").replace("/", os.sep)
551
+ "skills/koolie-ticket").replace("/", os.sep)
552
552
 
553
553
 
554
554
  def _72_pack_aktivieren(root: str, pack_skills: str) -> str:
@@ -591,9 +591,9 @@ def sonden_pack_im_korb() -> None:
591
591
  # --- Sonde 72b: die Gegenrichtung -------------------------------
592
592
  # Der Eintrag bleibt, sein Skill geht - eine Freigabe ohne Gegenstand.
593
593
  shutil.rmtree(os.path.join(root, *skills.split("/"), name))
594
- shutil.rmtree(os.path.join(root, *skills.split("/"), "fw-plan"))
594
+ shutil.rmtree(os.path.join(root, *skills.split("/"), "koolie-plan"))
595
595
  ausgabe = validator_ausgabe(root)
596
- melde("SONDE", "72b", M72_RUECK in ausgabe and "fw-plan" in ausgabe,
596
+ melde("SONDE", "72b", M72_RUECK in ausgabe and "koolie-plan" in ausgabe,
597
597
  "Ein Korbeintrag ohne Skill in der Ablage wird gemeldet - eine "
598
598
  "Freigabe fuer einen Skill, den es nicht gibt (D-81)")
599
599
 
@@ -1137,7 +1137,7 @@ buendel(sonden_zeichengrenze,
1137
1137
  # Gegenprobe ist der ausgelieferte Bestand: Er fuehrt aeltere Zeilen ohne die Nennung, und
1138
1138
  # die duerfen nicht gemeldet werden - sonst schriebe die Pruefung Register um (Klasse C).
1139
1139
  M95 = "nennt nicht, ob sie eine Anweisung berührt"
1140
- P95_SKILL = ".koolie/core/framework/skills/fw-docs-update"
1140
+ P95_SKILL = ".koolie/core/framework/skills/koolie-docs-update"
1141
1141
 
1142
1142
 
1143
1143
  def sonden_aenderungsart() -> None:
@@ -1172,7 +1172,7 @@ def sonden_aenderungsart() -> None:
1172
1172
  raise Praeparationsfehler("Sonde 95a: die aktuelle Zeile traegt keine Nennung")
1173
1173
  schreib(cl, text.replace(aktuell[0], ohne, 1))
1174
1174
  aus = validator_ausgabe(root)
1175
- ok = any(M95 in z and "fw-docs-update" in z for z in aus.splitlines())
1175
+ ok = any(M95 in z and "koolie-docs-update" in z for z in aus.splitlines())
1176
1176
  melde("SONDE", "95a", ok,
1177
1177
  "Die Zeile der aktuellen Version ohne Nennung der Art wird gemeldet (D-403)")
1178
1178
  if not ok:
@@ -1202,7 +1202,7 @@ def sonden_aenderungsart() -> None:
1202
1202
  spaet = re.sub(r"2026-09-1\d", "2026-09-24", alt[0], count=1)
1203
1203
  schreib(cl, text.replace(alt[0], spaet, 1))
1204
1204
  aus = validator_ausgabe(root)
1205
- ok = any(M95 in z and "fw-docs-update" in z for z in aus.splitlines())
1205
+ ok = any(M95 in z and "koolie-docs-update" in z for z in aus.splitlines())
1206
1206
  melde("SONDE", "95b", ok,
1207
1207
  "Eine Zeile nach dem Stichtag ohne Nennung wird gemeldet, auch wenn sie "
1208
1208
  "nicht die aktuelle Version ist (D-403)")
@@ -107,8 +107,8 @@ M105_MARKE = "(K-40, D-482)"
107
107
 
108
108
 
109
109
  def _105_spanne_gehoben(root: str) -> None:
110
- ersetze(_p(root, P105_CLAUDE), ("| Verbindliche Zielversion | `2.1.x` (D-112).",
111
- "| Verbindliche Zielversion | `2.2.x` (D-112)."))
110
+ ersetze(_p(root, P105_CLAUDE), ("| Verbindliche Zielversion | `2.1.x`.",
111
+ "| Verbindliche Zielversion | `2.2.x`."))
112
112
 
113
113
 
114
114
  def _105_version_ausserhalb(root: str) -> None:
@@ -22,7 +22,7 @@ from .apparat import (
22
22
  Praeparationsfehler, schreib, sonde, strict_ausgabe, unterprozess)
23
23
 
24
24
  HOOK = ".koolie/core/tests/scripts/hook-check-secrets.py"
25
- SKILL_109 = ".koolie/core/framework/skills/fw-code-explain/SKILL.md"
25
+ SKILL_109 = ".koolie/core/framework/skills/koolie-code-explain/SKILL.md"
26
26
 
27
27
 
28
28
  def _p(root: str, rel: str) -> str:
@@ -82,14 +82,14 @@ def sonden_fremde_skills() -> None:
82
82
  melde("GEGENPROBE", "111f", M72_FREMD not in aus and M37_FREMD not in aus,
83
83
  "Skill(openspec-*) im ask-Korb deckt den deklarierten Skill und gilt nicht "
84
84
  "als Ausweitung")
85
- _deklarieren(root, "fw-, speckit-", urstand)
86
- testblatt = os.path.join(root, ".claude", "skills", "fw-plan", "TESTS.md")
85
+ _deklarieren(root, "koolie-, speckit-", urstand)
86
+ testblatt = os.path.join(root, ".claude", "skills", "koolie-plan", "TESTS.md")
87
87
  if not os.path.isfile(testblatt):
88
- raise Praeparationsfehler("fw-plan/TESTS.md fehlt in der Installation")
88
+ raise Praeparationsfehler("koolie-plan/TESTS.md fehlt in der Installation")
89
89
  os.remove(testblatt)
90
90
  aus = validator_ausgabe(root)
91
- melde("SONDE", "111g", M111_UNZULAESSIG in aus and "fw-plan: TESTS.md fehlt" in aus,
92
- "'fw-' als fremdes Praefix wird gemeldet und nimmt nichts aus - der Koolie-Skill "
91
+ melde("SONDE", "111g", M111_UNZULAESSIG in aus and "koolie-plan: TESTS.md fehlt" in aus,
92
+ "'koolie-' als fremdes Praefix wird gemeldet und nimmt nichts aus - der Koolie-Skill "
93
93
  "bleibt geprueft")
94
94
  melde("SONDE", "111h", M111_OHNE in aus,
95
95
  "Ein deklariertes Praefix ohne Skill ('speckit-') wird gemeldet")
@@ -93,6 +93,39 @@ sonde("112g", "Ein Bau, der die Links der Beschreibung relativ laesst, wird geme
93
93
  "und npm fuehrten sie ins Leere", _112_relative_links, M112_BAU)
94
94
  sonde("112h", "Eine Vorabversion, deren npm-Paket die Version der Marke traegt, wird gemeldet - "
95
95
  "sie belegte die Version vor der Signatur", _112_vorab, M112_BAU)
96
+ # Seit 2.0.0: die Veroeffentlichung ueber Trusted Publishing (Gegenstand d). Jede Sonde nimmt
97
+ # dem Workflow genau eine Zusage: den einzigen Ausloeser, den festen Commit einer Action, die
98
+ # Pruefung der Marke, die Reihenfolge TestPyPI vor PyPI und npm.
99
+ WORKFLOW = ".github/workflows/publish.yml"
100
+
101
+
102
+ def _112_ausloeser(root: str) -> None:
103
+ ersetze(_p(root, WORKFLOW), (' - "v*"', ' - "v*"\n workflow_dispatch:'))
104
+
105
+
106
+ def _112_beweglich(root: str) -> None:
107
+ ersetze(_p(root, WORKFLOW),
108
+ (" - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0",
109
+ " - uses: astral-sh/setup-uv@v10"))
110
+
111
+
112
+ def _112_ohne_signatur(root: str) -> None:
113
+ ersetze(_p(root, WORKFLOW), (' git tag -v "${MARKE}"', ' true # SYNTHETISCH'))
114
+
115
+
116
+ def _112_ohne_probe(root: str) -> None:
117
+ ersetze(_p(root, WORKFLOW), (" needs: [pruefen, testpypi]", " needs: [pruefen]"))
118
+
119
+
120
+ sonde("112k", "Ein Workflow, der ausser an einer Marke auch von Hand startet, wird gemeldet - "
121
+ "er veroeffentlichte ohne signierte Marke", _112_ausloeser,
122
+ "laeuft nicht nur an einer Marke v*")
123
+ sonde("112l", "Eine Action ueber ein bewegliches Tag statt einen Commit wird gemeldet",
124
+ _112_beweglich, "ohne festen Commit")
125
+ sonde("112m", "Ein Workflow, der die Signatur der Marke nicht prueft, wird gemeldet",
126
+ _112_ohne_signatur, "kein Job prueft Signatur und VERSION der Marke")
127
+ sonde("112n", "Ein Workflow, der PyPI und npm nicht erst nach der Probe auf TestPyPI beschickt, "
128
+ "wird gemeldet", _112_ohne_probe, "laeuft nicht erst nach TestPyPI")
96
129
  gegenprobe("112", "Der ausgelieferte Befehl gibt das Banner vor install.py aus, und bauen.py "
97
130
  "baut ohne Befund", None, M112)
98
131
 
@@ -0,0 +1,97 @@
1
+ """Sonden zur Umbenennung der mitgelieferten Skills auf koolie-* (2.0.0): install.py --update
2
+ hebt ein Projekt mit den Namen bis 1.25.0 an - Skillordner, Agentenprofil, Berechtigungsdatei.
3
+
4
+ Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
5
+ Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
6
+ Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
7
+ nur aus dem Apparat und aus frueheren Teilen."""
8
+ from __future__ import annotations
9
+
10
+ import os
11
+ import re
12
+ import shutil
13
+ import sys
14
+
15
+ from .apparat import (
16
+ aufraeumen, buendel, installation, lies, melde, schreib, unterprozess, validator_ausgabe)
17
+
18
+ KERN = ("bugfix-prepare", "change-analyze", "change-small", "code-explain", "docs-update",
19
+ "error-analyze", "mr-description", "overlay-pflege", "plan", "refactor",
20
+ "repo-analyze", "review-support", "tests")
21
+ M_MIGRATION = "Seit 2.0.0 heissen die mitgelieferten Skills koolie-*"
22
+ M_OVERLAY = "Im Overlay stehen noch alte Namen"
23
+
24
+
25
+ def _alt(text: str) -> str:
26
+ """Ein Text mit den Namen bis 1.25.0 - so sah ein Projekt vor 2.0.0 aus."""
27
+ text = re.sub(r"koolie-(" + "|".join(KERN) + r"|reviewer)(?![a-z0-9-])", r"fw-\1", text)
28
+ return text.replace("koolie-ticket", "role-re-ticket")
29
+
30
+
31
+ def _update(root: str, *mehr: str) -> str:
32
+ p = unterprozess([sys.executable, os.path.join(root, ".koolie", "core", "install.py"),
33
+ "--client", "claude-code", "--root", root, "--update", *mehr])
34
+ return (p.stdout or "") + (p.stderr or "")
35
+
36
+
37
+ def sonden_skillnamen() -> None:
38
+ """install.py --update an einer claude-code-Installation mit den Namen bis 1.25.0."""
39
+ root = installation("claude-code")
40
+ try:
41
+ skills = os.path.join(root, ".claude", "skills")
42
+ agents = os.path.join(root, ".claude", "agents")
43
+ perm = os.path.join(root, ".claude", "settings.json")
44
+ overlay = os.path.join(root, ".koolie", "project-overlay", "OVERLAY.md")
45
+ quelle = os.path.join(root, ".koolie", "core", "framework", "role-packs",
46
+ "requirements-engineering", "skills", "koolie-ticket")
47
+ # Der Stand vor 2.0.0: alte Ordner, altes Profil, Pack-Skill aktiviert, alte Regeln.
48
+ for n in KERN:
49
+ os.rename(os.path.join(skills, f"koolie-{n}"), os.path.join(skills, f"fw-{n}"))
50
+ shutil.copytree(quelle, os.path.join(skills, "role-re-ticket"))
51
+ os.rename(os.path.join(agents, "koolie-reviewer.md"), os.path.join(agents, "fw-reviewer.md"))
52
+ rechte = lies(perm).replace('"Skill(koolie-plan)"',
53
+ '"Skill(koolie-plan)",\n "Skill(koolie-ticket)"', 1)
54
+ schreib(perm, _alt(rechte))
55
+ schreib(overlay, lies(overlay) + "\nVor jeder Aenderung /fw-plan. SYNTHETISCH\n")
56
+ vorher = lies(perm)
57
+
58
+ aus = _update(root, "--dry-run")
59
+ melde("GEGENPROBE", "D539a", M_MIGRATION in aus and lies(perm) == vorher
60
+ and os.path.isdir(os.path.join(skills, "fw-plan")),
61
+ "--update --dry-run nennt die Umbenennung und schreibt nichts")
62
+
63
+ aus = _update(root)
64
+ alt_ordner = [d for d in os.listdir(skills) if d.startswith(("fw-", "role-"))]
65
+ melde("SONDE", "D539b", M_MIGRATION in aus and not alt_ordner
66
+ and all(os.path.isdir(os.path.join(skills, f"koolie-{n}")) for n in KERN),
67
+ "--update benennt die dreizehn Kernskills um und laesst keinen alten Ordner stehen")
68
+ ticket = os.path.join(skills, "koolie-ticket", "SKILL.md")
69
+ melde("SONDE", "D539c", os.path.isfile(ticket) and "name: koolie-ticket" in lies(ticket),
70
+ "Der aktivierte Pack-Skill bleibt aktiviert und traegt den neuen Inhalt")
71
+ melde("SONDE", "D539d", not os.path.exists(os.path.join(agents, "fw-reviewer.md"))
72
+ and os.path.isfile(os.path.join(agents, "koolie-reviewer.md")),
73
+ "Das alte Agentenprofil ist entfernt, das neue angelegt")
74
+ rechte = lies(perm)
75
+ melde("SONDE", "D539e", "fw-" not in rechte and "role-re-ticket" not in rechte
76
+ and "Skill(koolie-plan)" in rechte and "Skill(koolie-ticket)" in rechte,
77
+ "Die Berechtigungsdatei nennt die Skills unter ihrem neuen Namen, auch den "
78
+ "aktivierten Pack-Skill")
79
+ melde("SONDE", "D539f", M_OVERLAY in aus and "OVERLAY.md" in aus
80
+ and "/fw-plan" in lies(overlay),
81
+ "Ein alter Name im Overlay wird genannt, nicht ersetzt - das Overlay gehoert "
82
+ "dem Projekt")
83
+ aus_val = validator_ausgabe(root)
84
+ melde("SONDE", "D539g", "fw-" not in aus_val and "role-re-ticket" not in aus_val
85
+ and "koolie-ticket" not in aus_val,
86
+ "Der Validator findet nach der Migration keinen Skill ohne Korb und keinen "
87
+ "alten Namen")
88
+ aus = _update(root)
89
+ melde("GEGENPROBE", "D539h", M_MIGRATION not in aus,
90
+ "Ein zweites --update hat nichts mehr umzubenennen")
91
+ finally:
92
+ aufraeumen(os.path.dirname(root))
93
+
94
+
95
+ buendel(sonden_skillnamen,
96
+ "Die Umbenennung auf koolie-* durch install.py --update an einer claude-code-"
97
+ "Installation mit den Namen bis 1.25.0: sechs Sonden, zwei Gegenproben")
@@ -0,0 +1,70 @@
1
+ """Sonden zu Pruefung 113 (2.0.0): keine Kennung in der Produktdokumentation, ausser an den
2
+ Stellen, die selbst Nachweis sind.
3
+
4
+ Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
5
+ Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
6
+ Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
7
+ nur aus dem Apparat und aus frueheren Teilen."""
8
+ from __future__ import annotations
9
+
10
+ import os
11
+
12
+ from .apparat import ersetze, gegenprobe, lies, P, schreib, sonde
13
+
14
+ M113 = "in der Produktdokumentation"
15
+ PLAN = ".koolie/core/framework/skills/koolie-plan/"
16
+
17
+
18
+ def _p(root: str, rel: str) -> str:
19
+ return P(root, rel.replace("/", os.sep))
20
+
21
+
22
+ # SYNTHETISCH: K-99 ist eine belegte synthetische Kennung (Decision Log), nie echt vergeben.
23
+ def _113_startseite(root: str) -> None:
24
+ pfad = _p(root, "README.md")
25
+ schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nMehr dazu in K-99.\r\n")
26
+
27
+
28
+ def _113_skill(root: str) -> None:
29
+ pfad = _p(root, PLAN + "EXAMPLES.md")
30
+ schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nSiehe K-99.\r\n")
31
+
32
+
33
+ def _113_testblatt(root: str) -> None:
34
+ ersetze(_p(root, PLAN + "TESTS.md"), ("| SK-004-P01 | ", "| SK-004-P01 | K-99 "))
35
+
36
+
37
+ def _113_hauptdokument(root: str) -> None:
38
+ pfad = _p(root, ".koolie/core/build/doc/01-executive-summary.md")
39
+ schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nSiehe K-99.\r\n")
40
+
41
+
42
+ def _113_grenzen(root: str) -> None:
43
+ pfad = _p(root, ".koolie/core/build/doc/29-grenzen.md")
44
+ schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nSiehe K-99.\r\n")
45
+
46
+
47
+ def _113_verlauf(root: str) -> None:
48
+ pfad = _p(root, "README.md")
49
+ schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\n| Version | Änderung |\r\n|---|---|\r\n"
50
+ "| 9.9.9 | K-99 |\r\n")
51
+
52
+
53
+ sonde("113a", "Eine Kennung auf der Startseite wird gemeldet",
54
+ _113_startseite, "README.md: 1 Kennung(en) " + M113)
55
+ sonde("113b", "Eine Kennung in den Erlaeuterungen eines Skills wird gemeldet",
56
+ _113_skill, "koolie-plan/EXAMPLES.md: 1 Kennung(en) " + M113)
57
+ sonde("113c", "Eine Kennung in einer Spalte eines Testblatts, die kein Ergebnis traegt, wird "
58
+ "gemeldet - die Ausnahme gilt der Spalte, nicht dem Blatt",
59
+ _113_testblatt, "koolie-plan/TESTS.md: 1 Kennung(en) " + M113)
60
+ gegenprobe("113a", "Der ausgelieferte Bestand laeuft durch - Ergebnisspalten, Belegspalten der "
61
+ "Matrix und Versionsverlaeufe tragen ihre Kennungen, die Nachweisschicht ebenso",
62
+ None, M113)
63
+ gegenprobe("113b", "Eine Kennung in der Zeile eines Versionsverlaufs wird nicht gemeldet",
64
+ _113_verlauf, M113)
65
+
66
+ sonde("113d", "Eine Kennung in einem Kapitel des Hauptdokuments wird gemeldet - nur drei "
67
+ "Kapitel sind Nachweis",
68
+ _113_hauptdokument, "01-executive-summary.md: 1 Kennung(en) " + M113)
69
+ gegenprobe("113c", "Eine Kennung im Kapitel der Grenzen und offenen Entscheidungen wird nicht "
70
+ "gemeldet", _113_grenzen, M113)