@renoxar/koolie 1.25.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 (693) hide show
  1. package/.gitattributes +16 -0
  2. package/.gitignore +51 -0
  3. package/.koolie/QUELLREPOSITORIUM.md +18 -0
  4. package/.koolie/core/CHANGELOG.md +11832 -0
  5. package/.koolie/core/LICENSE +674 -0
  6. package/.koolie/core/LICENSE-HINWEIS.md +98 -0
  7. package/.koolie/core/OWNERS.md +36 -0
  8. package/.koolie/core/VERSION +1 -0
  9. package/.koolie/core/banner.py +397 -0
  10. package/.koolie/core/build/README.md +34 -0
  11. package/.koolie/core/build/assemble.py +354 -0
  12. package/.koolie/core/build/build-docx.py +194 -0
  13. package/.koolie/core/build/doc/00-kopf.md +18 -0
  14. package/.koolie/core/build/doc/01-executive-summary.md +24 -0
  15. package/.koolie/core/build/doc/02-zielbild.md +13 -0
  16. package/.koolie/core/build/doc/03-ziele-nichtziele.md +28 -0
  17. package/.koolie/core/build/doc/04-geltungsbereich.md +25 -0
  18. package/.koolie/core/build/doc/05-glossar.md +47 -0
  19. package/.koolie/core/build/doc/06-leitprinzipien.md +5 -0
  20. package/.koolie/core/build/doc/07-architektur.md +60 -0
  21. package/.koolie/core/build/doc/07a-abbildungsschicht.md +66 -0
  22. package/.koolie/core/build/doc/08-trennung.md +24 -0
  23. package/.koolie/core/build/doc/09-betriebsmodi.md +18 -0
  24. package/.koolie/core/build/doc/10-arbeitsablauf.md +5 -0
  25. package/.koolie/core/build/doc/11-datenschutz.md +5 -0
  26. package/.koolie/core/build/doc/12-sicherheit.md +5 -0
  27. package/.koolie/core/build/doc/13-risiko.md +5 -0
  28. package/.koolie/core/build/doc/14-rollen.md +9 -0
  29. package/.koolie/core/build/doc/15-referenzstruktur.md +124 -0
  30. package/.koolie/core/build/doc/16-agentenanweisung.md +8 -0
  31. package/.koolie/core/build/doc/17-overlay.md +29 -0
  32. package/.koolie/core/build/doc/18-skill-standard.md +5 -0
  33. package/.koolie/core/build/doc/19-skill-template.md +5 -0
  34. package/.koolie/core/build/doc/20-referenz-skills.md +70 -0
  35. package/.koolie/core/build/doc/21-prompts.md +53 -0
  36. package/.koolie/core/build/doc/22-checklisten.md +49 -0
  37. package/.koolie/core/build/doc/23-entscheidungsbaeume.md +29 -0
  38. package/.koolie/core/build/doc/24-onboarding.md +33 -0
  39. package/.koolie/core/build/doc/25-governance.md +35 -0
  40. package/.koolie/core/build/doc/26-qs-test.md +9 -0
  41. package/.koolie/core/build/doc/27-pilot.md +13 -0
  42. package/.koolie/core/build/doc/28-uebernahme.md +5 -0
  43. package/.koolie/core/build/doc/29-grenzen.md +87 -0
  44. package/.koolie/core/build/doc/30-roadmap.md +5 -0
  45. package/.koolie/core/build/doc/31-anhaenge.md +151 -0
  46. package/.koolie/core/build/doc/32-abschluss.md +92 -0
  47. package/.koolie/core/build/ref-a4.docx +0 -0
  48. package/.koolie/core/checklists/01-preflight.md +54 -0
  49. package/.koolie/core/checklists/02-privacy-context.md +51 -0
  50. package/.koolie/core/checklists/03-before-code-change.md +51 -0
  51. package/.koolie/core/checklists/04-review-ai-code.md +58 -0
  52. package/.koolie/core/checklists/05-testing.md +48 -0
  53. package/.koolie/core/checklists/06-security.md +50 -0
  54. package/.koolie/core/checklists/07-new-dependency.md +57 -0
  55. package/.koolie/core/checklists/08-merge-request.md +47 -0
  56. package/.koolie/core/checklists/09-onboarding.md +52 -0
  57. package/.koolie/core/checklists/10-project-adoption.md +74 -0
  58. package/.koolie/core/checklists/11-framework-release.md +71 -0
  59. package/.koolie/core/checklists/README.md +28 -0
  60. package/.koolie/core/clientmap.py +1358 -0
  61. package/.koolie/core/clients/README.md +113 -0
  62. package/.koolie/core/clients/_template/CLIENT_PACK.md +197 -0
  63. package/.koolie/core/clients/claude-code/CLIENT_PACK.md +383 -0
  64. package/.koolie/core/clients/claude-code/manifest.json +232 -0
  65. package/.koolie/core/clients/claude-code/root-template/.claude/README.md +127 -0
  66. package/.koolie/core/clients/cursor/CLIENT_PACK.md +229 -0
  67. package/.koolie/core/clients/cursor/manifest.json +330 -0
  68. package/.koolie/core/clients/cursor/root-template/.cursor/README.md +36 -0
  69. package/.koolie/core/clients/devin-desktop/CLIENT_PACK.md +251 -0
  70. package/.koolie/core/clients/devin-desktop/manifest.json +163 -0
  71. package/.koolie/core/clients/devin-desktop/root-template/.devin/README.md +79 -0
  72. package/.koolie/core/clients/kiro/CLIENT_PACK.md +223 -0
  73. package/.koolie/core/clients/kiro/manifest.json +300 -0
  74. package/.koolie/core/clients/kiro/root-template/.kiro/README.md +37 -0
  75. package/.koolie/core/clients/openai-codex/CLIENT_PACK.md +257 -0
  76. package/.koolie/core/clients/openai-codex/manifest.json +208 -0
  77. package/.koolie/core/clients/openai-codex/root-template/.codex/README.md +35 -0
  78. package/.koolie/core/decision-trees/01-context-allowed.md +46 -0
  79. package/.koolie/core/decision-trees/02-may-ai-do-task.md +47 -0
  80. package/.koolie/core/decision-trees/03-analyze-or-modify.md +50 -0
  81. package/.koolie/core/decision-trees/04-required-review.md +49 -0
  82. package/.koolie/core/decision-trees/05-stop-or-escalate.md +47 -0
  83. package/.koolie/core/decision-trees/06-rule-placement.md +58 -0
  84. package/.koolie/core/decision-trees/README.md +14 -0
  85. package/.koolie/core/docs/ADOPTION_GUIDE.md +582 -0
  86. package/.koolie/core/docs/DOCUMENTATION_STANDARD.md +91 -0
  87. package/.koolie/core/docs/PLACEHOLDER_REGISTRY.md +79 -0
  88. package/.koolie/core/docs/ROADMAP.md +848 -0
  89. package/.koolie/core/docs/RUNTIME_GLOSSARY.md +113 -0
  90. package/.koolie/core/examples/README.md +11 -0
  91. package/.koolie/core/examples/example-ergebnisbericht.md +31 -0
  92. package/.koolie/core/examples/example-mr-description.md +31 -0
  93. package/.koolie/core/examples/example-overlay-runtime.md +48 -0
  94. package/.koolie/core/framework/core/00-principles.md +93 -0
  95. package/.koolie/core/framework/core/01-governance.md +58 -0
  96. package/.koolie/core/framework/core/02-privacy.md +141 -0
  97. package/.koolie/core/framework/core/03-security.md +86 -0
  98. package/.koolie/core/framework/core/04-quality.md +48 -0
  99. package/.koolie/core/framework/core/05-working-model.md +199 -0
  100. package/.koolie/core/framework/core/06-prompting-rules.md +51 -0
  101. package/.koolie/core/framework/core/07-review-rules.md +52 -0
  102. package/.koolie/core/framework/core/08-skill-conventions.md +115 -0
  103. package/.koolie/core/framework/core/09-risk-model.md +87 -0
  104. package/.koolie/core/framework/core/10-error-escalation.md +53 -0
  105. package/.koolie/core/framework/org-policies/MAPPING_CLASSIFICATION.md +16 -0
  106. package/.koolie/core/framework/org-policies/README.md +29 -0
  107. package/.koolie/core/framework/overlay-patterns/general/documents/branching-strategy/muster-general.md +43 -0
  108. package/.koolie/core/framework/overlay-patterns/general/documents/coding-guidelines/muster-general.md +82 -0
  109. package/.koolie/core/framework/overlay-patterns/general/documents/definition-of-done/muster-general.md +52 -0
  110. package/.koolie/core/framework/overlay-patterns/general/documents/definition-of-ready/muster-general.md +54 -0
  111. package/.koolie/core/framework/overlay-patterns/general/documents/quality/muster-general.md +59 -0
  112. package/.koolie/core/framework/overlay-patterns/general/documents/security/muster-general.md +52 -0
  113. package/.koolie/core/framework/overlay-patterns/general.md +150 -0
  114. package/.koolie/core/framework/role-packs/README.md +63 -0
  115. package/.koolie/core/framework/role-packs/_template/ROLE_PACK.md +58 -0
  116. package/.koolie/core/framework/role-packs/requirements-engineering/ROLE_PACK.md +158 -0
  117. package/.koolie/core/framework/role-packs/requirements-engineering/runtime/30-role-requirements-engineering.md +88 -0
  118. package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/CHANGELOG.md +10 -0
  119. package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/EXAMPLES.md +148 -0
  120. package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/SKILL.md +195 -0
  121. package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/TESTS.md +22 -0
  122. package/.koolie/core/framework/role-packs/software-development/ROLE_PACK.md +95 -0
  123. package/.koolie/core/framework/role-packs/software-development/runtime/30-role-software-development.md +26 -0
  124. package/.koolie/core/framework/runtime/agents/fw-reviewer.md +34 -0
  125. package/.koolie/core/framework/runtime/client-settings.json +3 -0
  126. package/.koolie/core/framework/runtime/hooks.json +20 -0
  127. package/.koolie/core/framework/runtime/mcp-config.example.json +4 -0
  128. package/.koolie/core/framework/runtime/permissions.json +106 -0
  129. package/.koolie/core/framework/runtime/root-instruction-local.example.md +19 -0
  130. package/.koolie/core/framework/runtime/root-instruction.md +116 -0
  131. package/.koolie/core/framework/runtime/rules/00-framework-core.md +49 -0
  132. package/.koolie/core/framework/runtime/rules/10-privacy-security.md +49 -0
  133. package/.koolie/core/framework/runtime/rules/15-development-rules.md +41 -0
  134. package/.koolie/core/framework/runtime/rules/16-plan-spezifikation.md +32 -0
  135. package/.koolie/core/framework/runtime/rules/20-project-overlay.md +60 -0
  136. package/.koolie/core/framework/skills/fw-bugfix-prepare/CHANGELOG.md +14 -0
  137. package/.koolie/core/framework/skills/fw-bugfix-prepare/EXAMPLES.md +57 -0
  138. package/.koolie/core/framework/skills/fw-bugfix-prepare/SKILL.md +177 -0
  139. package/.koolie/core/framework/skills/fw-bugfix-prepare/TESTS.md +15 -0
  140. package/.koolie/core/framework/skills/fw-change-analyze/CHANGELOG.md +12 -0
  141. package/.koolie/core/framework/skills/fw-change-analyze/EXAMPLES.md +66 -0
  142. package/.koolie/core/framework/skills/fw-change-analyze/SKILL.md +167 -0
  143. package/.koolie/core/framework/skills/fw-change-analyze/TESTS.md +16 -0
  144. package/.koolie/core/framework/skills/fw-change-small/CHANGELOG.md +13 -0
  145. package/.koolie/core/framework/skills/fw-change-small/EXAMPLES.md +68 -0
  146. package/.koolie/core/framework/skills/fw-change-small/SKILL.md +175 -0
  147. package/.koolie/core/framework/skills/fw-change-small/TESTS.md +13 -0
  148. package/.koolie/core/framework/skills/fw-code-explain/CHANGELOG.md +11 -0
  149. package/.koolie/core/framework/skills/fw-code-explain/EXAMPLES.md +61 -0
  150. package/.koolie/core/framework/skills/fw-code-explain/SKILL.md +163 -0
  151. package/.koolie/core/framework/skills/fw-code-explain/TESTS.md +11 -0
  152. package/.koolie/core/framework/skills/fw-docs-update/CHANGELOG.md +10 -0
  153. package/.koolie/core/framework/skills/fw-docs-update/EXAMPLES.md +59 -0
  154. package/.koolie/core/framework/skills/fw-docs-update/SKILL.md +160 -0
  155. package/.koolie/core/framework/skills/fw-docs-update/TESTS.md +12 -0
  156. package/.koolie/core/framework/skills/fw-error-analyze/CHANGELOG.md +10 -0
  157. package/.koolie/core/framework/skills/fw-error-analyze/EXAMPLES.md +67 -0
  158. package/.koolie/core/framework/skills/fw-error-analyze/SKILL.md +160 -0
  159. package/.koolie/core/framework/skills/fw-error-analyze/TESTS.md +12 -0
  160. package/.koolie/core/framework/skills/fw-mr-description/CHANGELOG.md +12 -0
  161. package/.koolie/core/framework/skills/fw-mr-description/EXAMPLES.md +69 -0
  162. package/.koolie/core/framework/skills/fw-mr-description/SKILL.md +170 -0
  163. package/.koolie/core/framework/skills/fw-mr-description/TESTS.md +12 -0
  164. package/.koolie/core/framework/skills/fw-overlay-pflege/CHANGELOG.md +7 -0
  165. package/.koolie/core/framework/skills/fw-overlay-pflege/EXAMPLES.md +48 -0
  166. package/.koolie/core/framework/skills/fw-overlay-pflege/SKILL.md +147 -0
  167. package/.koolie/core/framework/skills/fw-overlay-pflege/TESTS.md +13 -0
  168. package/.koolie/core/framework/skills/fw-plan/CHANGELOG.md +14 -0
  169. package/.koolie/core/framework/skills/fw-plan/EXAMPLES.md +69 -0
  170. package/.koolie/core/framework/skills/fw-plan/SKILL.md +168 -0
  171. package/.koolie/core/framework/skills/fw-plan/TESTS.md +14 -0
  172. package/.koolie/core/framework/skills/fw-refactor/CHANGELOG.md +10 -0
  173. package/.koolie/core/framework/skills/fw-refactor/EXAMPLES.md +70 -0
  174. package/.koolie/core/framework/skills/fw-refactor/SKILL.md +173 -0
  175. package/.koolie/core/framework/skills/fw-refactor/TESTS.md +14 -0
  176. package/.koolie/core/framework/skills/fw-repo-analyze/CHANGELOG.md +10 -0
  177. package/.koolie/core/framework/skills/fw-repo-analyze/EXAMPLES.md +52 -0
  178. package/.koolie/core/framework/skills/fw-repo-analyze/SKILL.md +149 -0
  179. package/.koolie/core/framework/skills/fw-repo-analyze/TESTS.md +11 -0
  180. package/.koolie/core/framework/skills/fw-review-support/CHANGELOG.md +12 -0
  181. package/.koolie/core/framework/skills/fw-review-support/EXAMPLES.md +69 -0
  182. package/.koolie/core/framework/skills/fw-review-support/SKILL.md +179 -0
  183. package/.koolie/core/framework/skills/fw-review-support/TESTS.md +13 -0
  184. package/.koolie/core/framework/skills/fw-tests/CHANGELOG.md +9 -0
  185. package/.koolie/core/framework/skills/fw-tests/EXAMPLES.md +65 -0
  186. package/.koolie/core/framework/skills/fw-tests/SKILL.md +169 -0
  187. package/.koolie/core/framework/skills/fw-tests/TESTS.md +12 -0
  188. package/.koolie/core/framework/tech-packs/README.md +15 -0
  189. package/.koolie/core/framework/tech-packs/_template/TECH_PACK.md +61 -0
  190. package/.koolie/core/governance/ADOPTION_REGISTRY.md +89 -0
  191. package/.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md +60 -0
  192. package/.koolie/core/governance/DECISION_LOG.md +779 -0
  193. package/.koolie/core/governance/EXCEPTION_PROCESS.md +31 -0
  194. package/.koolie/core/governance/FEEDBACK_PROCESS.md +34 -0
  195. package/.koolie/core/governance/FRAMEWORK_DEV_PROFILE.md +135 -0
  196. package/.koolie/core/governance/INCIDENT_HANDLING.md +47 -0
  197. package/.koolie/core/governance/PRIORITY_HIERARCHY.md +61 -0
  198. package/.koolie/core/governance/RACI.md +37 -0
  199. package/.koolie/core/governance/RELEASE_PROCESS.md +183 -0
  200. package/.koolie/core/governance/change-requests/CR-2026-001-definition-release-1-0-0.md +67 -0
  201. package/.koolie/core/governance/change-requests/CR-2026-002-client-packs.md +63 -0
  202. package/.koolie/core/governance/change-requests/CR-2026-003-install-client-schalter.md +70 -0
  203. package/.koolie/core/governance/change-requests/CR-2026-004-client-pack-claude-code.md +82 -0
  204. package/.koolie/core/governance/change-requests/CR-2026-005-kern-neutralisierung.md +75 -0
  205. package/.koolie/core/governance/change-requests/CR-2026-006-gemeinsame-skill-quelle.md +77 -0
  206. package/.koolie/core/governance/change-requests/CR-2026-007-geteilte-kernbestandteile.md +80 -0
  207. package/.koolie/core/governance/change-requests/CR-2026-008-berechtigungen-und-hooks.md +85 -0
  208. package/.koolie/core/governance/change-requests/CR-2026-009-umbenennung-leitwerk.md +77 -0
  209. package/.koolie/core/governance/change-requests/CR-2026-010-restduplikation.md +73 -0
  210. package/.koolie/core/governance/change-requests/CR-2026-011-hauptdokument.md +72 -0
  211. package/.koolie/core/governance/change-requests/CR-2026-012-schreibschutz-kernverzeichnis.md +106 -0
  212. package/.koolie/core/governance/change-requests/CR-2026-013-validator-blindstellen.md +128 -0
  213. package/.koolie/core/governance/change-requests/CR-2026-014-kurzform-langform.md +125 -0
  214. package/.koolie/core/governance/change-requests/CR-2026-015-versionskette.md +150 -0
  215. package/.koolie/core/governance/change-requests/CR-2026-016-ap2-claude-code.md +127 -0
  216. package/.koolie/core/governance/change-requests/CR-2026-017-ladebedingungen-claude-code.md +173 -0
  217. package/.koolie/core/governance/change-requests/CR-2026-018-quellenliste-claude-code.md +121 -0
  218. package/.koolie/core/governance/change-requests/CR-2026-019-strukturentscheidungen-fortschreiben.md +143 -0
  219. package/.koolie/core/governance/change-requests/CR-2026-020-akteursbezeichnung.md +118 -0
  220. package/.koolie/core/governance/change-requests/CR-2026-021-hook-interpreter.md +113 -0
  221. package/.koolie/core/governance/change-requests/CR-2026-022-artefaktversionen.md +73 -0
  222. package/.koolie/core/governance/change-requests/CR-2026-023-shell-lesesperre.md +128 -0
  223. package/.koolie/core/governance/change-requests/CR-2026-024-clientbindungen.md +78 -0
  224. package/.koolie/core/governance/change-requests/CR-2026-025-betriebsmodi.md +110 -0
  225. package/.koolie/core/governance/change-requests/CR-2026-026-fail-closed.md +134 -0
  226. package/.koolie/core/governance/change-requests/CR-2026-027-zeichenlimit-einstufung.md +105 -0
  227. package/.koolie/core/governance/change-requests/CR-2026-028-berechtigungsmodi.md +130 -0
  228. package/.koolie/core/governance/change-requests/CR-2026-029-hook-ablageort.md +115 -0
  229. package/.koolie/core/governance/change-requests/CR-2026-030-lesende-werkzeuge.md +143 -0
  230. package/.koolie/core/governance/change-requests/CR-2026-031-regelquellen-ausserhalb.md +182 -0
  231. package/.koolie/core/governance/change-requests/CR-2026-032-fremde-skill-ablage.md +151 -0
  232. package/.koolie/core/governance/change-requests/CR-2026-033-modusabhaengige-durchsetzung.md +131 -0
  233. package/.koolie/core/governance/change-requests/CR-2026-034-nachweisbedingungen.md +116 -0
  234. package/.koolie/core/governance/change-requests/CR-2026-035-readme-in-der-regelablage.md +115 -0
  235. package/.koolie/core/governance/change-requests/CR-2026-036-ortsangaben-hook-konfiguration.md +108 -0
  236. package/.koolie/core/governance/change-requests/CR-2026-037-meldender-hook-clientgebunden.md +133 -0
  237. package/.koolie/core/governance/change-requests/CR-2026-038-importsteuerung.md +159 -0
  238. package/.koolie/core/governance/change-requests/CR-2026-039-normative-saetze-in-kommentaren.md +124 -0
  239. package/.koolie/core/governance/change-requests/CR-2026-040-erh01-ist-clientgebunden.md +115 -0
  240. package/.koolie/core/governance/change-requests/CR-2026-041-s5-nicht-abbildbar.md +128 -0
  241. package/.koolie/core/governance/change-requests/CR-2026-042-abwesenheitsnachweis-suchwerkzeug.md +102 -0
  242. package/.koolie/core/governance/change-requests/CR-2026-043-validator-gibt-trefferwerte-aus.md +135 -0
  243. package/.koolie/core/governance/change-requests/CR-2026-044-aktivierungspruefung-clientgebunden.md +112 -0
  244. package/.koolie/core/governance/change-requests/CR-2026-045-update-verliert-die-clientwahl.md +116 -0
  245. package/.koolie/core/governance/change-requests/CR-2026-046-erstinstallation-ueberschreibt-projektdatei.md +125 -0
  246. package/.koolie/core/governance/change-requests/CR-2026-047-zusagen-je-zugriffskanal.md +133 -0
  247. package/.koolie/core/governance/change-requests/CR-2026-048-modusgrenze-ohne-durchsetzung.md +137 -0
  248. package/.koolie/core/governance/change-requests/CR-2026-049-sondenlauf-kodierungsabhaengig.md +126 -0
  249. package/.koolie/core/governance/change-requests/CR-2026-050-allowed-tools-und-verworfene-permissions.md +110 -0
  250. package/.koolie/core/governance/change-requests/CR-2026-051-quellenkarte-und-ueberholter-stand.md +110 -0
  251. package/.koolie/core/governance/change-requests/CR-2026-052-drei-regelkonflikte.md +166 -0
  252. package/.koolie/core/governance/change-requests/CR-2026-053-lesesperre-und-entwicklungsprofil.md +144 -0
  253. package/.koolie/core/governance/change-requests/CR-2026-054-aktivierung-verlangt-aktivitaet.md +124 -0
  254. package/.koolie/core/governance/change-requests/CR-2026-055-domain-ausnahme-ohne-mechanismus.md +173 -0
  255. package/.koolie/core/governance/change-requests/CR-2026-056-eingabeschema-und-pfadidentitaet.md +245 -0
  256. package/.koolie/core/governance/change-requests/CR-2026-057-disallowed-tools-und-s3.md +148 -0
  257. package/.koolie/core/governance/change-requests/CR-2026-058-unteragent-reichweite.md +203 -0
  258. package/.koolie/core/governance/change-requests/CR-2026-059-unteragent-tiefe-und-widerspruch.md +125 -0
  259. package/.koolie/core/governance/change-requests/CR-2026-060-stumme-brueche.md +170 -0
  260. package/.koolie/core/governance/change-requests/CR-2026-061-berechtigungsdatei-ohne-pruefung.md +169 -0
  261. package/.koolie/core/governance/change-requests/CR-2026-062-werkzeugabbildung-des-frontmatters.md +178 -0
  262. package/.koolie/core/governance/change-requests/CR-2026-063-skillaufruf-ohne-freigabe.md +207 -0
  263. package/.koolie/core/governance/change-requests/CR-2026-064-pruefregister-nicht-nachgezaehlt.md +141 -0
  264. package/.koolie/core/governance/change-requests/CR-2026-065-devin-suchwerkzeuge-erhoben.md +170 -0
  265. package/.koolie/core/governance/change-requests/CR-2026-066-schlitzdeckung-ohne-abgleich.md +153 -0
  266. package/.koolie/core/governance/change-requests/CR-2026-067-hookblock-und-praeparationsregister.md +140 -0
  267. package/.koolie/core/governance/change-requests/CR-2026-068-sondenlauf-nebenlaeufig.md +106 -0
  268. package/.koolie/core/governance/change-requests/CR-2026-069-bytecode-des-kerns.md +108 -0
  269. package/.koolie/core/governance/change-requests/CR-2026-070-d11-zaehler.md +114 -0
  270. package/.koolie/core/governance/change-requests/CR-2026-071-strukturentscheidungen-bestaetigen.md +322 -0
  271. package/.koolie/core/governance/change-requests/CR-2026-072-modulstatus-heben.md +315 -0
  272. package/.koolie/core/governance/change-requests/CR-2026-073-nicht-skill-traeger-heben.md +246 -0
  273. package/.koolie/core/governance/change-requests/CR-2026-074-restliche-nicht-skill-traeger-heben.md +271 -0
  274. package/.koolie/core/governance/change-requests/CR-2026-075-ap2-zielversion-devin-desktop.md +335 -0
  275. package/.koolie/core/governance/change-requests/CR-2026-076-erster-sitzungstest.md +455 -0
  276. package/.koolie/core/governance/change-requests/CR-2026-077-sitzungstest-schranken.md +425 -0
  277. package/.koolie/core/governance/change-requests/CR-2026-078-planung-nach-1-0-0.md +294 -0
  278. package/.koolie/core/governance/change-requests/CR-2026-079-umbenennung-vorziehen.md +233 -0
  279. package/.koolie/core/governance/change-requests/CR-2026-080-clientbindung-des-kerns.md +321 -0
  280. package/.koolie/core/governance/change-requests/CR-2026-081-produktnamen-im-kern.md +297 -0
  281. package/.koolie/core/governance/change-requests/CR-2026-082-sitzungstest-pi-ds-2.md +145 -0
  282. package/.koolie/core/governance/change-requests/CR-2026-083-sitzungstest-ne-sc.md +300 -0
  283. package/.koolie/core/governance/change-requests/CR-2026-084-trockenlauf-gegen-den-committeten-stand.md +117 -0
  284. package/.koolie/core/governance/change-requests/CR-2026-085-vorbedingungen-sitzungstest-5.md +182 -0
  285. package/.koolie/core/governance/change-requests/CR-2026-086-grenzfaelle-gegen-die-fassungen.md +164 -0
  286. package/.koolie/core/governance/change-requests/CR-2026-087-produktbeobachtung-quellenliste.md +206 -0
  287. package/.koolie/core/governance/change-requests/CR-2026-088-vorbedingungen-testblaetter.md +127 -0
  288. package/.koolie/core/governance/change-requests/CR-2026-089-herrichtung-uebungsrepositorium.md +226 -0
  289. package/.koolie/core/governance/change-requests/CR-2026-090-vorbedingungen-sitzungstest-5-zweiter-durchgang.md +255 -0
  290. package/.koolie/core/governance/change-requests/CR-2026-091-sitzungstest-5.md +163 -0
  291. package/.koolie/core/governance/change-requests/CR-2026-092-pruefmittelwort-und-buendelschnitt.md +226 -0
  292. package/.koolie/core/governance/change-requests/CR-2026-093-sechzehnte-praeparation.md +151 -0
  293. package/.koolie/core/governance/change-requests/CR-2026-094-testblaetter-buendel-1.md +113 -0
  294. package/.koolie/core/governance/change-requests/CR-2026-095-pruefapparat-filter.md +65 -0
  295. package/.koolie/core/governance/change-requests/CR-2026-096-vorbedingungen-buendel-2.md +225 -0
  296. package/.koolie/core/governance/change-requests/CR-2026-097-testblaetter-buendel-2.md +162 -0
  297. package/.koolie/core/governance/change-requests/CR-2026-098-anforderungen-auslieferung.md +93 -0
  298. package/.koolie/core/governance/change-requests/CR-2026-099-k74-und-vorbedingungen-buendel-3.md +119 -0
  299. package/.koolie/core/governance/change-requests/CR-2026-100-testblaetter-buendel-3.md +120 -0
  300. package/.koolie/core/governance/change-requests/CR-2026-101-k77-eigener-posten.md +165 -0
  301. package/.koolie/core/governance/change-requests/CR-2026-102-k77-entschieden.md +118 -0
  302. package/.koolie/core/governance/change-requests/CR-2026-103-vorbedingungen-buendel-4.md +76 -0
  303. package/.koolie/core/governance/change-requests/CR-2026-104-herrichtung-buendel-4.md +82 -0
  304. package/.koolie/core/governance/change-requests/CR-2026-105-messapparat-buendel-4.md +227 -0
  305. package/.koolie/core/governance/change-requests/CR-2026-106-uebergabe-einchecken.md +91 -0
  306. package/.koolie/core/governance/change-requests/CR-2026-107-uebergabe-im-release-commit.md +111 -0
  307. package/.koolie/core/governance/change-requests/CR-2026-108-testblaetter-buendel-4.md +118 -0
  308. package/.koolie/core/governance/change-requests/CR-2026-109-berichtsweg-des-aufraeumers.md +108 -0
  309. package/.koolie/core/governance/change-requests/CR-2026-110-vorbedingungen-des-nachlaufs.md +184 -0
  310. package/.koolie/core/governance/change-requests/CR-2026-111-der-apparat-auf-dem-weg-der-wiederaufnahme.md +127 -0
  311. package/.koolie/core/governance/change-requests/CR-2026-112-der-arbeitsplatz-im-kern.md +103 -0
  312. package/.koolie/core/governance/change-requests/CR-2026-113-nachlauf-buendel-4.md +103 -0
  313. package/.koolie/core/governance/change-requests/CR-2026-114-vorbedingungen-buendel-5.md +317 -0
  314. package/.koolie/core/governance/change-requests/CR-2026-115-herrichtung-buendel-5.md +244 -0
  315. package/.koolie/core/governance/change-requests/CR-2026-116-messtag-buendel-5.md +178 -0
  316. package/.koolie/core/governance/change-requests/CR-2026-117-sammelzellen-zentraler-katalog.md +251 -0
  317. package/.koolie/core/governance/change-requests/CR-2026-118-quellenzuordnung-matrixzeilen.md +115 -0
  318. package/.koolie/core/governance/change-requests/CR-2026-119-umbenennung-koolie.md +204 -0
  319. package/.koolie/core/governance/change-requests/CR-2026-120-ap2-rest-devin-desktop.md +96 -0
  320. package/.koolie/core/governance/change-requests/CR-2026-121-verify-marker-abschaffen.md +185 -0
  321. package/.koolie/core/governance/change-requests/CR-2026-122-umbenennung-koolie-lauf.md +131 -0
  322. package/.koolie/core/governance/change-requests/CR-2026-123-vortrag-und-namensabsatz.md +170 -0
  323. package/.koolie/core/governance/change-requests/CR-2026-124-hauptdokument-ap11.md +237 -0
  324. package/.koolie/core/governance/change-requests/CR-2026-125-word-fassung-und-blinder-fleck.md +204 -0
  325. package/.koolie/core/governance/change-requests/CR-2026-126-lizenz-gpl3.md +112 -0
  326. package/.koolie/core/governance/change-requests/CR-2026-127-gegenzeichnung-rollenfrage.md +96 -0
  327. package/.koolie/core/governance/change-requests/CR-2026-128-freigabelauf-1.0.0.md +278 -0
  328. package/.koolie/core/governance/change-requests/CR-2026-129-archiv-zeilenenden.md +90 -0
  329. package/.koolie/core/governance/change-requests/CR-2026-130-reihenfolge-des-hebens.md +204 -0
  330. package/.koolie/core/governance/change-requests/CR-2026-131-chronik-und-vorlage.md +194 -0
  331. package/.koolie/core/governance/change-requests/CR-2026-132-erhebung-openai-codex.md +185 -0
  332. package/.koolie/core/governance/change-requests/CR-2026-133-bau-openai-codex.md +97 -0
  333. package/.koolie/core/governance/change-requests/CR-2026-134-uebergabe-lokal.md +117 -0
  334. package/.koolie/core/governance/change-requests/CR-2026-135-pfadlisten-nul-getrennt.md +139 -0
  335. package/.koolie/core/governance/change-requests/CR-2026-136-overlay-werte-einordnung.md +156 -0
  336. package/.koolie/core/governance/change-requests/CR-2026-137-kopierweg-kern.md +144 -0
  337. package/.koolie/core/governance/change-requests/CR-2026-138-overlay-muster-general.md +118 -0
  338. package/.koolie/core/governance/change-requests/CR-2026-139-overlay-muster-dokumente.md +105 -0
  339. package/.koolie/core/governance/change-requests/CR-2026-140-installer-je-zielsystem.md +120 -0
  340. package/.koolie/core/governance/change-requests/CR-2026-141-lieferumfang.md +123 -0
  341. package/.koolie/core/governance/change-requests/CR-2026-142-dokumentationsstandard.md +90 -0
  342. package/.koolie/core/governance/change-requests/CR-2026-143-klasse-b-core-laufzeit.md +89 -0
  343. package/.koolie/core/governance/change-requests/CR-2026-144-klasse-b-governance.md +90 -0
  344. package/.koolie/core/governance/change-requests/CR-2026-145-klasse-b-skills.md +81 -0
  345. package/.koolie/core/governance/change-requests/CR-2026-146-code-pack-posten.md +84 -0
  346. package/.koolie/core/governance/change-requests/CR-2026-147-regel-register-posten.md +78 -0
  347. package/.koolie/core/governance/change-requests/CR-2026-148-mehrprojekt-tokenlast.md +70 -0
  348. package/.koolie/core/governance/change-requests/CR-2026-149-regelablage-pfadtoken.md +71 -0
  349. package/.koolie/core/governance/change-requests/CR-2026-150-client-pack-kiro.md +76 -0
  350. package/.koolie/core/governance/change-requests/CR-2026-151-skill-anweisungen.md +71 -0
  351. package/.koolie/core/governance/change-requests/CR-2026-152-testblaetter-modellwechsel.md +78 -0
  352. package/.koolie/core/governance/change-requests/CR-2026-153-attributionszeile.md +88 -0
  353. package/.koolie/core/governance/change-requests/CR-2026-154-auffindbarkeit.md +102 -0
  354. package/.koolie/core/governance/change-requests/CR-2026-155-client-pack-cursor.md +80 -0
  355. package/.koolie/core/governance/change-requests/CR-2026-156-mandat-und-reibung.md +100 -0
  356. package/.koolie/core/governance/change-requests/CR-2026-157-mcp-anbindung.md +93 -0
  357. package/.koolie/core/governance/change-requests/CR-2026-158-registerpflege.md +69 -0
  358. package/.koolie/core/governance/change-requests/CR-2026-159-powershell.md +49 -0
  359. package/.koolie/core/governance/change-requests/CR-2026-160-messapparat.md +59 -0
  360. package/.koolie/core/governance/change-requests/CR-2026-161-pruefwerkzeuge.md +52 -0
  361. package/.koolie/core/governance/change-requests/CR-2026-162-schutzschicht.md +65 -0
  362. package/.koolie/core/governance/change-requests/CR-2026-163-pfadsemantik.md +61 -0
  363. package/.koolie/core/governance/change-requests/CR-2026-164-modi-ausnahmen.md +65 -0
  364. package/.koolie/core/governance/change-requests/CR-2026-165-installer-banner.md +406 -0
  365. package/.koolie/core/governance/change-requests/CR-2026-166-nachlauf-aufzeichnungen.md +59 -0
  366. package/.koolie/core/governance/change-requests/CR-2026-167-einsatzarchitektur.md +60 -0
  367. package/.koolie/core/governance/change-requests/CR-2026-168-paketquellen.md +64 -0
  368. package/.koolie/core/governance/change-requests/CR-2026-169-modusbindung-messfragen.md +58 -0
  369. package/.koolie/core/governance/change-requests/CR-2026-170-erste-veroeffentlichung.md +62 -0
  370. package/.koolie/core/governance/change-requests/CR-2026-171-befehl-im-projektverzeichnis.md +57 -0
  371. package/.koolie/core/governance/change-requests/CR-2026-172-auftritt-npm-suche.md +58 -0
  372. package/.koolie/core/install.py +2402 -0
  373. package/.koolie/core/install_dialog.py +227 -0
  374. package/.koolie/core/koexistenz.py +112 -0
  375. package/.koolie/core/mandat.py +605 -0
  376. package/.koolie/core/onboarding/COMPLETION_CRITERIA.md +37 -0
  377. package/.koolie/core/onboarding/GUIDE.md +103 -0
  378. package/.koolie/core/onboarding/KNOWLEDGE_CHECK.md +48 -0
  379. package/.koolie/core/onboarding/MENTOR_CHECKLIST.md +40 -0
  380. package/.koolie/core/onboarding/QUICKSTART.md +50 -0
  381. package/.koolie/core/onboarding/REFERENCE.md +69 -0
  382. package/.koolie/core/onboarding/exercises/EXERCISES.md +78 -0
  383. package/.koolie/core/onboarding/exercises/README.md +120 -0
  384. package/.koolie/core/pilot/METRICS.md +59 -0
  385. package/.koolie/core/pilot/PILOT_CONCEPT.md +42 -0
  386. package/.koolie/core/prompts/01-understand-codebase.md +99 -0
  387. package/.koolie/core/prompts/02-impact-analysis.md +104 -0
  388. package/.koolie/core/prompts/03-implementation-planning.md +102 -0
  389. package/.koolie/core/prompts/04-code-generation.md +100 -0
  390. package/.koolie/core/prompts/05-test-generation.md +103 -0
  391. package/.koolie/core/prompts/06-refactoring.md +102 -0
  392. package/.koolie/core/prompts/07-debugging.md +97 -0
  393. package/.koolie/core/prompts/08-security-review.md +92 -0
  394. package/.koolie/core/prompts/09-performance-analysis.md +89 -0
  395. package/.koolie/core/prompts/10-documentation.md +91 -0
  396. package/.koolie/core/prompts/11-merge-request-review.md +94 -0
  397. package/.koolie/core/prompts/12-developer-training.md +90 -0
  398. package/.koolie/core/prompts/README.md +88 -0
  399. package/.koolie/core/templates/MR_AI_DISCLOSURE.md +37 -0
  400. package/.koolie/core/templates/PLAN_TEMPLATE.md +57 -0
  401. package/.koolie/core/templates/SKILL_TEMPLATE.md +159 -0
  402. package/.koolie/core/templates/project-overlay/OVERLAY.md +315 -0
  403. package/.koolie/core/templates/project-overlay/documents/README.md +43 -0
  404. package/.koolie/core/templates/project-overlay/documents/ai-governance/.gitkeep.md +3 -0
  405. package/.koolie/core/templates/project-overlay/documents/ai-process-model/.gitkeep.md +3 -0
  406. package/.koolie/core/templates/project-overlay/documents/architecture/.gitkeep.md +3 -0
  407. package/.koolie/core/templates/project-overlay/documents/architecture/decisions/README.md +3 -0
  408. package/.koolie/core/templates/project-overlay/documents/branching-strategy/.gitkeep.md +3 -0
  409. package/.koolie/core/templates/project-overlay/documents/coding-guidelines/.gitkeep.md +3 -0
  410. package/.koolie/core/templates/project-overlay/documents/definition-of-done/.gitkeep.md +3 -0
  411. package/.koolie/core/templates/project-overlay/documents/definition-of-ready/.gitkeep.md +3 -0
  412. package/.koolie/core/templates/project-overlay/documents/deployment/.gitkeep.md +3 -0
  413. package/.koolie/core/templates/project-overlay/documents/glossary/.gitkeep.md +3 -0
  414. package/.koolie/core/templates/project-overlay/documents/quality/.gitkeep.md +3 -0
  415. package/.koolie/core/templates/project-overlay/documents/roadmap/.gitkeep.md +3 -0
  416. package/.koolie/core/templates/project-overlay/documents/roles/.gitkeep.md +3 -0
  417. package/.koolie/core/templates/project-overlay/documents/security/.gitkeep.md +3 -0
  418. package/.koolie/core/templates/project-overlay/exceptions/EXCEPTIONS.md +9 -0
  419. package/.koolie/core/templates/project-overlay/forbidden-terms.txt +8 -0
  420. package/.koolie/core/templates/project-overlay/overlay-manifest.yaml +73 -0
  421. package/.koolie/core/templates/rules/21-overlay-TEMPLATE.md.template +28 -0
  422. package/.koolie/core/templates/rules/40-tech-TEMPLATE.md.template +33 -0
  423. package/.koolie/core/tests/EDGE_CASES.md +67 -0
  424. package/.koolie/core/tests/TEST_CATALOG.md +170 -0
  425. package/.koolie/core/tests/erhebungen/README.md +326 -0
  426. package/.koolie/core/tests/erhebungen/ablage.py +357 -0
  427. package/.koolie/core/tests/erhebungen/apparat/__init__.py +22 -0
  428. package/.koolie/core/tests/erhebungen/apparat/baum.py +214 -0
  429. package/.koolie/core/tests/erhebungen/apparat/belege.py +91 -0
  430. package/.koolie/core/tests/erhebungen/apparat/clients.py +321 -0
  431. package/.koolie/core/tests/erhebungen/apparat/freigabe.py +74 -0
  432. package/.koolie/core/tests/erhebungen/apparat/kontingent.py +64 -0
  433. package/.koolie/core/tests/erhebungen/apparat/laeufer.py +155 -0
  434. package/.koolie/core/tests/erhebungen/apparat/reihe.py +202 -0
  435. package/.koolie/core/tests/erhebungen/apparat/selbsttest.py +280 -0
  436. package/.koolie/core/tests/erhebungen/apparat/stand.py +30 -0
  437. package/.koolie/core/tests/erhebungen/apparat/vorpruefung.py +70 -0
  438. package/.koolie/core/tests/erhebungen/auswerten-b4.py +468 -0
  439. package/.koolie/core/tests/erhebungen/auswerten-b5.py +517 -0
  440. package/.koolie/core/tests/erhebungen/auswerten-dd.py +172 -0
  441. package/.koolie/core/tests/erhebungen/baeume-b4.py +334 -0
  442. package/.koolie/core/tests/erhebungen/baeume-b5.py +339 -0
  443. package/.koolie/core/tests/erhebungen/baeume_loeschen.py +138 -0
  444. package/.koolie/core/tests/erhebungen/cc-overlay-fuellen.py +277 -0
  445. package/.koolie/core/tests/erhebungen/dossier-b4.py +178 -0
  446. package/.koolie/core/tests/erhebungen/dossier-b5.py +202 -0
  447. package/.koolie/core/tests/erhebungen/historie-bauen-b4.py +642 -0
  448. package/.koolie/core/tests/erhebungen/k-bauen-b3.py +841 -0
  449. package/.koolie/core/tests/erhebungen/lauf-dd.py +146 -0
  450. package/.koolie/core/tests/erhebungen/lauf.py +114 -0
  451. package/.koolie/core/tests/erhebungen/mcp-waechter.py +278 -0
  452. package/.koolie/core/tests/erhebungen/messbaum-schnitt.py +256 -0
  453. package/.koolie/core/tests/erhebungen/messen.py +72 -0
  454. package/.koolie/core/tests/erhebungen/node-waechter.py +74 -0
  455. package/.koolie/core/tests/erhebungen/packaktivierung.py +403 -0
  456. package/.koolie/core/tests/erhebungen/prompts-schreiben-b4.py +210 -0
  457. package/.koolie/core/tests/erhebungen/prompts-schreiben-b5.py +251 -0
  458. package/.koolie/core/tests/erhebungen/reihe-b4.py +171 -0
  459. package/.koolie/core/tests/erhebungen/reihe-b5.py +172 -0
  460. package/.koolie/core/tests/erhebungen/stand-b4.py +135 -0
  461. package/.koolie/core/tests/erhebungen/stand-b5.py +137 -0
  462. package/.koolie/core/tests/erhebungen/trust-b4.py +56 -0
  463. package/.koolie/core/tests/erhebungen/trust-b5.py +56 -0
  464. package/.koolie/core/tests/erhebungen/turn2-schreiben-b4.py +105 -0
  465. package/.koolie/core/tests/erhebungen/umgebungen-bauen-b4.py +377 -0
  466. package/.koolie/core/tests/erhebungen/umgebungen-bauen-b5.py +363 -0
  467. package/.koolie/core/tests/erhebungen/zaehlen46.py +74 -0
  468. package/.koolie/core/tests/erhebungen/zustand-b4.py +82 -0
  469. package/.koolie/core/tests/erhebungen/zustand-b5.py +82 -0
  470. package/.koolie/core/tests/protocols/2026-09-10-AP2-claude-code-wirkungsnachweise.md +194 -0
  471. package/.koolie/core/tests/protocols/2026-09-10-AP2-claude-code.md +468 -0
  472. package/.koolie/core/tests/protocols/2026-09-10-CR-2026-020-akteursbezeichnung.md +99 -0
  473. package/.koolie/core/tests/protocols/2026-09-10-CR-2026-021-hook-interpreter.md +138 -0
  474. package/.koolie/core/tests/protocols/2026-09-10-CR-2026-022-artefaktversionen.md +87 -0
  475. package/.koolie/core/tests/protocols/2026-09-10-CR-2026-023-shell-lesesperre.md +135 -0
  476. package/.koolie/core/tests/protocols/2026-09-10-CR-2026-024-clientbindungen.md +98 -0
  477. package/.koolie/core/tests/protocols/2026-09-10-FW-DS-03.md +90 -0
  478. package/.koolie/core/tests/protocols/2026-09-10-FW-KO-01.md +105 -0
  479. package/.koolie/core/tests/protocols/2026-09-10-FW-KO-02.md +123 -0
  480. package/.koolie/core/tests/protocols/2026-09-10-FW-KO-04.md +73 -0
  481. package/.koolie/core/tests/protocols/2026-09-10-FW-RE-02.md +99 -0
  482. package/.koolie/core/tests/protocols/2026-09-10-FW-VN-01-wiederholung.md +108 -0
  483. package/.koolie/core/tests/protocols/2026-09-10-FW-VN-01.md +249 -0
  484. package/.koolie/core/tests/protocols/2026-09-10-FW-ZA-05.md +99 -0
  485. package/.koolie/core/tests/protocols/2026-09-11-AP2-devin-desktop.md +257 -0
  486. package/.koolie/core/tests/protocols/2026-09-11-CR-2026-026-fail-closed.md +113 -0
  487. package/.koolie/core/tests/protocols/2026-09-11-erhebungen-K21-K26.md +243 -0
  488. package/.koolie/core/tests/protocols/2026-09-11-wirkungsnachweise-0.26.0.md +101 -0
  489. package/.koolie/core/tests/protocols/2026-09-12-B01-allowed-tools.md +152 -0
  490. package/.koolie/core/tests/protocols/2026-09-12-B04-B05-gegenpruefung.md +204 -0
  491. package/.koolie/core/tests/protocols/2026-09-12-erhebungen-K28-S5-B9-bypass.md +268 -0
  492. package/.koolie/core/tests/protocols/2026-09-12-mehrprojekt-arbeitsbereich.md +154 -0
  493. package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.26.1.md +126 -0
  494. package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.27.0.md +114 -0
  495. package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.28.0.md +129 -0
  496. package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.29.0.md +121 -0
  497. package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.30.0.md +112 -0
  498. package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.31.0.md +107 -0
  499. package/.koolie/core/tests/protocols/2026-09-13-B06-gegenpruefung.md +370 -0
  500. package/.koolie/core/tests/protocols/2026-09-13-B07-B09-gegenpruefung.md +211 -0
  501. package/.koolie/core/tests/protocols/2026-09-13-B08-B11-gegenpruefung.md +179 -0
  502. package/.koolie/core/tests/protocols/2026-09-13-erhebung-disallowed-tools.md +147 -0
  503. package/.koolie/core/tests/protocols/2026-09-13-erhebung-unteragent-tiefe.md +139 -0
  504. package/.koolie/core/tests/protocols/2026-09-13-erhebung-unteragent.md +214 -0
  505. package/.koolie/core/tests/protocols/2026-09-13-gegenpruefung-berechtigungsdatei.md +253 -0
  506. package/.koolie/core/tests/protocols/2026-09-13-gegenpruefung-stumme-brueche.md +202 -0
  507. package/.koolie/core/tests/protocols/2026-09-13-gegenpruefung-werkzeugabbildung.md +219 -0
  508. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.32.0.md +133 -0
  509. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.33.0.md +169 -0
  510. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.34.0.md +187 -0
  511. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.35.0.md +187 -0
  512. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.36.0.md +137 -0
  513. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.37.0.md +112 -0
  514. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.38.0.md +154 -0
  515. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.39.0.md +188 -0
  516. package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.40.0.md +214 -0
  517. package/.koolie/core/tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md +267 -0
  518. package/.koolie/core/tests/protocols/2026-09-14-erhebung-skillaufruf.md +238 -0
  519. package/.koolie/core/tests/protocols/2026-09-14-gegenpruefung-pruefregister.md +156 -0
  520. package/.koolie/core/tests/protocols/2026-09-14-gegenpruefung-schlitzdeckung.md +206 -0
  521. package/.koolie/core/tests/protocols/2026-09-14-gegenpruefung-skillwahl.md +127 -0
  522. package/.koolie/core/tests/protocols/2026-09-14-migrationslauf-pilot.md +134 -0
  523. package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.41.0.md +175 -0
  524. package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.42.0.md +180 -0
  525. package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.43.0.md +165 -0
  526. package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.44.0.md +130 -0
  527. package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-d11-zaehlregeln.md +311 -0
  528. package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-modulstatus.md +524 -0
  529. package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-nicht-skill-traeger.md +225 -0
  530. package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-restliche-nicht-skill-traeger.md +345 -0
  531. package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-strukturentscheidungen.md +392 -0
  532. package/.koolie/core/tests/protocols/2026-09-15-herrichtung-uebungsrepositorium.md +213 -0
  533. package/.koolie/core/tests/protocols/2026-09-15-migrationslauf-pilot-0.46.0.md +143 -0
  534. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.45.0.md +127 -0
  535. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.46.0.md +193 -0
  536. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.47.0.md +149 -0
  537. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.49.0.md +202 -0
  538. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.50.0.md +183 -0
  539. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.51.0.md +202 -0
  540. package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.52.0.md +168 -0
  541. package/.koolie/core/tests/protocols/2026-09-16-AP2-zielversion-devin-desktop.md +231 -0
  542. package/.koolie/core/tests/protocols/2026-09-16-wirkungsnachweise-0.53.0.md +350 -0
  543. package/.koolie/core/tests/protocols/2026-09-17-nachtrag-migrationshinweis-0.54.1.md +121 -0
  544. package/.koolie/core/tests/protocols/2026-09-17-sitzungstest-pi-ds.md +523 -0
  545. package/.koolie/core/tests/protocols/2026-09-17-sitzungstest-schranken.md +433 -0
  546. package/.koolie/core/tests/protocols/2026-09-17-wirkungsnachweise-0.54.0.md +159 -0
  547. package/.koolie/core/tests/protocols/2026-09-18-FW-AK-01.md +442 -0
  548. package/.koolie/core/tests/protocols/2026-09-18-FW-KO-05.md +231 -0
  549. package/.koolie/core/tests/protocols/2026-09-18-herrichtung-uebungsrepositorium.md +273 -0
  550. package/.koolie/core/tests/protocols/2026-09-18-nachtrag-preis-umbenennung-0.56.1.md +102 -0
  551. package/.koolie/core/tests/protocols/2026-09-18-sitzungstest-5.md +349 -0
  552. package/.koolie/core/tests/protocols/2026-09-18-sitzungstest-ne-sc.md +430 -0
  553. package/.koolie/core/tests/protocols/2026-09-18-sitzungstest-pi-ds-2.md +499 -0
  554. package/.koolie/core/tests/protocols/2026-09-18-vorbedingungen-sitzungstest-5-zweiter-durchgang.md +170 -0
  555. package/.koolie/core/tests/protocols/2026-09-18-vorbedingungen-testblaetter.md +184 -0
  556. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.55.0.md +202 -0
  557. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.56.0.md +135 -0
  558. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.56.2.md +154 -0
  559. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.57.0.md +228 -0
  560. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.57.1.md +262 -0
  561. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.58.0.md +135 -0
  562. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.59.0.md +150 -0
  563. package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.60.0.md +340 -0
  564. package/.koolie/core/tests/protocols/2026-09-19-herrichtung-buendel-4.md +235 -0
  565. package/.koolie/core/tests/protocols/2026-09-19-k77-zurechenbarkeit.md +236 -0
  566. package/.koolie/core/tests/protocols/2026-09-19-pruefapparat-filter.md +50 -0
  567. package/.koolie/core/tests/protocols/2026-09-19-pruefmittelwort-und-buendelschnitt.md +239 -0
  568. package/.koolie/core/tests/protocols/2026-09-19-sechzehnte-praeparation.md +135 -0
  569. package/.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-1.md +250 -0
  570. package/.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-2.md +229 -0
  571. package/.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md +293 -0
  572. package/.koolie/core/tests/protocols/2026-09-19-vorbedingungen-buendel-2.md +236 -0
  573. package/.koolie/core/tests/protocols/2026-09-19-vorbedingungen-buendel-3.md +253 -0
  574. package/.koolie/core/tests/protocols/2026-09-19-vorbedingungen-buendel-4.md +138 -0
  575. package/.koolie/core/tests/protocols/2026-09-20-messapparat-buendel-4.md +433 -0
  576. package/.koolie/core/tests/protocols/2026-09-20-testblaetter-buendel-4.md +321 -0
  577. package/.koolie/core/tests/protocols/2026-09-20-uebergabe-im-release-commit.md +146 -0
  578. package/.koolie/core/tests/protocols/2026-09-20-vorbedingungen-nachlauf-b4.md +259 -0
  579. package/.koolie/core/tests/protocols/2026-09-21-arbeitsplatz-im-kern.md +127 -0
  580. package/.koolie/core/tests/protocols/2026-09-21-nachlauf-buendel-4.md +157 -0
  581. package/.koolie/core/tests/protocols/2026-09-21-vorbedingungen-buendel-5.md +247 -0
  582. package/.koolie/core/tests/protocols/2026-09-21-wiederaufnahme-nachlauf-b4.md +190 -0
  583. package/.koolie/core/tests/protocols/2026-09-22-ap2-rest-devin-desktop.md +614 -0
  584. package/.koolie/core/tests/protocols/2026-09-22-hauptdokument-ap11.md +443 -0
  585. package/.koolie/core/tests/protocols/2026-09-22-herrichtung-buendel-5.md +224 -0
  586. package/.koolie/core/tests/protocols/2026-09-22-messtag-buendel-5.md +327 -0
  587. package/.koolie/core/tests/protocols/2026-09-22-quellenzuordnung-matrixzeilen.md +230 -0
  588. package/.koolie/core/tests/protocols/2026-09-22-sammelzellen-zentraler-katalog.md +354 -0
  589. package/.koolie/core/tests/protocols/2026-09-22-umbenennung-koolie.md +296 -0
  590. package/.koolie/core/tests/protocols/2026-09-22-verify-marker-abschaffen.md +283 -0
  591. package/.koolie/core/tests/protocols/2026-09-22-vortrag-und-name.md +261 -0
  592. package/.koolie/core/tests/protocols/2026-09-22-wirkungsnachweise-0.86.0.md +158 -0
  593. package/.koolie/core/tests/protocols/2026-09-23-archiv-zeilenenden.md +113 -0
  594. package/.koolie/core/tests/protocols/2026-09-23-bau-openai-codex.md +168 -0
  595. package/.koolie/core/tests/protocols/2026-09-23-chronik-und-vorlage.md +224 -0
  596. package/.koolie/core/tests/protocols/2026-09-23-erhebung-openai-codex.md +309 -0
  597. package/.koolie/core/tests/protocols/2026-09-23-freigabelauf-1.0.0-vorbereitung.md +119 -0
  598. package/.koolie/core/tests/protocols/2026-09-23-freigabelauf-1.0.0.md +150 -0
  599. package/.koolie/core/tests/protocols/2026-09-23-gegenzeichnung-rollenfrage.md +198 -0
  600. package/.koolie/core/tests/protocols/2026-09-23-reihenfolge-des-hebens.md +220 -0
  601. package/.koolie/core/tests/protocols/2026-09-23-word-fassung-und-blinder-fleck.md +307 -0
  602. package/.koolie/core/tests/protocols/2026-09-24-kopierweg-kern.md +98 -0
  603. package/.koolie/core/tests/protocols/2026-09-24-overlay-werte-einordnung.md +111 -0
  604. package/.koolie/core/tests/protocols/2026-09-24-pfadlisten-nul-getrennt.md +128 -0
  605. package/.koolie/core/tests/protocols/2026-09-24-uebergabe-lokal.md +85 -0
  606. package/.koolie/core/tests/protocols/2026-09-25-code-pack-posten.md +86 -0
  607. package/.koolie/core/tests/protocols/2026-09-25-dokumentationsstandard.md +101 -0
  608. package/.koolie/core/tests/protocols/2026-09-25-installer-je-zielsystem.md +134 -0
  609. package/.koolie/core/tests/protocols/2026-09-25-klasse-b-core-laufzeit.md +126 -0
  610. package/.koolie/core/tests/protocols/2026-09-25-klasse-b-governance.md +133 -0
  611. package/.koolie/core/tests/protocols/2026-09-25-klasse-b-skills.md +91 -0
  612. package/.koolie/core/tests/protocols/2026-09-25-lieferumfang.md +76 -0
  613. package/.koolie/core/tests/protocols/2026-09-25-overlay-muster-dokumente.md +107 -0
  614. package/.koolie/core/tests/protocols/2026-09-25-overlay-muster-general.md +100 -0
  615. package/.koolie/core/tests/protocols/2026-09-25-regel-register-posten.md +87 -0
  616. package/.koolie/core/tests/protocols/2026-09-26-attributionszeile.md +83 -0
  617. package/.koolie/core/tests/protocols/2026-09-26-auffindbarkeit.md +85 -0
  618. package/.koolie/core/tests/protocols/2026-09-26-bau-cursor.md +68 -0
  619. package/.koolie/core/tests/protocols/2026-09-26-bau-kiro.md +75 -0
  620. package/.koolie/core/tests/protocols/2026-09-26-mehrprojekt-tokenlast.md +174 -0
  621. package/.koolie/core/tests/protocols/2026-09-26-regelablage-pfadtoken.md +133 -0
  622. package/.koolie/core/tests/protocols/2026-09-26-skill-anweisungen.md +111 -0
  623. package/.koolie/core/tests/protocols/2026-09-26-testblaetter-modellwechsel.md +106 -0
  624. package/.koolie/core/tests/protocols/2026-09-27-mandat-und-reibung.md +58 -0
  625. package/.koolie/core/tests/protocols/2026-09-28-mcp-anbindung.md +72 -0
  626. package/.koolie/core/tests/protocols/2026-09-29-messapparat.md +75 -0
  627. package/.koolie/core/tests/protocols/2026-09-29-powershell.md +58 -0
  628. package/.koolie/core/tests/protocols/2026-09-29-pruefwerkzeuge.md +64 -0
  629. package/.koolie/core/tests/protocols/2026-09-29-registerpflege.md +228 -0
  630. package/.koolie/core/tests/protocols/2026-09-29-schutzschicht.md +95 -0
  631. package/.koolie/core/tests/protocols/2026-09-30-einsatzarchitektur.md +104 -0
  632. package/.koolie/core/tests/protocols/2026-09-30-modi-ausnahmen.md +77 -0
  633. package/.koolie/core/tests/protocols/2026-09-30-nachlauf-banner.md +85 -0
  634. package/.koolie/core/tests/protocols/2026-09-30-paketquellen.md +65 -0
  635. package/.koolie/core/tests/protocols/2026-09-30-pfadsemantik.md +79 -0
  636. package/.koolie/core/tests/protocols/2026-10-01-auftritt-und-suche.md +58 -0
  637. package/.koolie/core/tests/protocols/2026-10-01-befehl-im-projektverzeichnis.md +47 -0
  638. package/.koolie/core/tests/protocols/2026-10-01-erste-veroeffentlichung.md +60 -0
  639. package/.koolie/core/tests/protocols/2026-10-01-modusbindung-messfragen.md +107 -0
  640. package/.koolie/core/tests/protocols/README.md +14 -0
  641. package/.koolie/core/tests/scripts/hook-check-secrets.py +1307 -0
  642. package/.koolie/core/tests/scripts/hook-overlay-status.py +120 -0
  643. package/.koolie/core/tests/scripts/mermaid_renderer.py +67 -0
  644. package/.koolie/core/tests/scripts/overlay_status.py +130 -0
  645. package/.koolie/core/tests/scripts/probe-pruefungen.py +110 -0
  646. package/.koolie/core/tests/scripts/pruefungen/__init__.py +4 -0
  647. package/.koolie/core/tests/scripts/pruefungen/berechtigungen.py +1559 -0
  648. package/.koolie/core/tests/scripts/pruefungen/bestand.py +1433 -0
  649. package/.koolie/core/tests/scripts/pruefungen/dokumente.py +1262 -0
  650. package/.koolie/core/tests/scripts/pruefungen/gemeinsam.py +784 -0
  651. package/.koolie/core/tests/scripts/pruefungen/hooks.py +1188 -0
  652. package/.koolie/core/tests/scripts/pruefungen/overlay.py +1251 -0
  653. package/.koolie/core/tests/scripts/pruefungen/packs.py +1314 -0
  654. package/.koolie/core/tests/scripts/pruefungen/register.py +950 -0
  655. package/.koolie/core/tests/scripts/pruefungen/testkatalog.py +1202 -0
  656. package/.koolie/core/tests/scripts/pruefungen/werkzeuge.py +957 -0
  657. package/.koolie/core/tests/scripts/sonden/__init__.py +4 -0
  658. package/.koolie/core/tests/scripts/sonden/apparat.py +653 -0
  659. package/.koolie/core/tests/scripts/sonden/teil01_grundbestand_und_installation.py +999 -0
  660. package/.koolie/core/tests/scripts/sonden/teil02_packs_mandat_mcp.py +942 -0
  661. package/.koolie/core/tests/scripts/sonden/teil03_pruefungen_26_bis_36.py +1184 -0
  662. package/.koolie/core/tests/scripts/sonden/teil04_pruefungen_37_bis_45.py +1491 -0
  663. package/.koolie/core/tests/scripts/sonden/teil05_pruefungen_46_bis_55.py +1447 -0
  664. package/.koolie/core/tests/scripts/sonden/teil06_pruefungen_57_bis_65.py +739 -0
  665. package/.koolie/core/tests/scripts/sonden/teil07_overlay_und_lieferung.py +1014 -0
  666. package/.koolie/core/tests/scripts/sonden/teil08_pruefungen_66_bis_80.py +1325 -0
  667. package/.koolie/core/tests/scripts/sonden/teil09_pruefmittel_81_und_82.py +505 -0
  668. package/.koolie/core/tests/scripts/sonden/teil10_pruefungen_83_bis_95.py +1218 -0
  669. package/.koolie/core/tests/scripts/sonden/teil11_pruefungen_104_und_105.py +149 -0
  670. package/.koolie/core/tests/scripts/sonden/teil12_pruefungen_106_und_107.py +136 -0
  671. package/.koolie/core/tests/scripts/sonden/teil13_pfad_und_mustersemantik.py +150 -0
  672. package/.koolie/core/tests/scripts/sonden/teil14_modi_ausnahmen_skills.py +204 -0
  673. package/.koolie/core/tests/scripts/sonden/teil15_banner_und_nachlauf.py +193 -0
  674. package/.koolie/core/tests/scripts/sonden/teil16_koexistenz.py +114 -0
  675. package/.koolie/core/tests/scripts/sonden/teil17_paketquellen.py +115 -0
  676. package/.koolie/core/tests/scripts/sonden/teil18_modusbindung_m3_m5.py +113 -0
  677. package/.koolie/core/tests/scripts/validate-framework.py +1104 -0
  678. package/.koolie/core/tests/scripts/validate-output.py +296 -0
  679. package/.koolie/core/wirksamkeit.py +430 -0
  680. package/CONTRIBUTING.md +119 -0
  681. package/LICENSE +674 -0
  682. package/QUICKSTART.en.md +135 -0
  683. package/QUICKSTART.md +129 -0
  684. package/README.en.md +108 -0
  685. package/README.md +107 -0
  686. package/install.cmd +44 -0
  687. package/install.command +46 -0
  688. package/package.json +21 -0
  689. package/paketquellen/README.md +41 -0
  690. package/paketquellen/bauen.py +411 -0
  691. package/paketquellen/koolie.cmd +23 -0
  692. package/paketquellen/koolie_befehl.py +82 -0
  693. package/paketquellen/npm/koolie.js +26 -0
@@ -0,0 +1,149 @@
1
+ """Sonden zu den Pruefungen 104 (Verdrahtung der Pruefwerkzeuge) und 105 (gepruefte
2
+ Clientversion in der Zielspanne).
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 (
13
+ ersetze, gegenprobe, lies, P, Praeparationsfehler, schreib, sonde, VALIDATOR)
14
+
15
+
16
+ # --- Pruefung 104: die Verdrahtung der Pruefwerkzeuge (CR-2026-161, D-481) -------------
17
+ #
18
+ # Fuenf Sonden, je eine auf einen eigenen Gegenstand: eine Pruefung, die niemand ruft;
19
+ # eine, die main() zweimal ruft; ein Sondenteil, den niemand laedt; Teile in falscher
20
+ # Reihenfolge; und der verlorene Gegenstand. Die Gegenprobe haelt die Grenze des
21
+ # Praefixes: Eine Hilfsfunktion _check_* ist keine Pruefung.
22
+ P104_SONDENLAUF = ".koolie/core/tests/scripts/probe-pruefungen.py"
23
+ P104_SONDENTEILE = ".koolie/core/tests/scripts/sonden"
24
+ P104_WERKZEUGE = ".koolie/core/tests/scripts/pruefungen/werkzeuge.py"
25
+ P104_AUFRUF = " check_lizenz(root)\r\n"
26
+ M104_UNGERUFEN = "check_lizenz() wird von niemandem gerufen"
27
+ M104_ZWEIMAL = "main() ruft check_lizenz() 2mal"
28
+ M104_UNGELADEN = "teil99_sondenteil.py: wird von tests/scripts/probe-pruefungen.py nicht geladen"
29
+ M104_REIHENFOLGE = "nicht in der Reihenfolge ihrer Nummer"
30
+ M104_ANKER = "kein Sondenteil teil<Nummer>_*.py"
31
+ M104_MARKE = "(D-481)"
32
+
33
+
34
+ def _p(root: str, rel: str) -> str:
35
+ return P(root, rel.replace("/", os.sep))
36
+
37
+
38
+ def _104_ungerufen(root: str) -> None:
39
+ ersetze(_p(root, VALIDATOR), (P104_AUFRUF, ""))
40
+
41
+
42
+ def _104_zweimal(root: str) -> None:
43
+ ersetze(_p(root, VALIDATOR), (P104_AUFRUF, P104_AUFRUF + P104_AUFRUF))
44
+
45
+
46
+ def _104_ungeladen(root: str) -> None:
47
+ schreib(os.path.join(_p(root, P104_SONDENTEILE), "teil99_sondenteil.py"),
48
+ '"""Ein Sondenteil, den der Einstieg nicht laedt."""\r\n')
49
+
50
+
51
+ def _104_reihenfolge(root: str) -> None:
52
+ ersetze(_p(root, P104_SONDENLAUF),
53
+ (" teil01_grundbestand_und_installation,\r\n teil02_packs_mandat_mcp,\r\n",
54
+ " teil02_packs_mandat_mcp,\r\n teil01_grundbestand_und_installation,\r\n"))
55
+
56
+
57
+ def _104_anker_verlieren(root: str) -> None:
58
+ ordner = _p(root, P104_SONDENTEILE)
59
+ teile = [n for n in os.listdir(ordner) if n.startswith("teil")]
60
+ if not teile:
61
+ raise Praeparationsfehler("Sonde 104e: kein Sondenteil unter sonden/")
62
+ for name in teile:
63
+ os.rename(os.path.join(ordner, name), os.path.join(ordner, "abschnitt" + name[4:]))
64
+
65
+
66
+ def _104_hilfsfunktion(root: str) -> None:
67
+ pfad = _p(root, P104_WERKZEUGE)
68
+ schreib(pfad, lies(pfad) + "\r\n\r\ndef _check_hilfe(root: str) -> None:\r\n"
69
+ " return None\r\n")
70
+
71
+
72
+ sonde("104a", "Eine Pruefung, die weder main noch eine andere Funktion des Pakets ruft, wird "
73
+ "gemeldet - sie liefe nie", _104_ungerufen, M104_UNGERUFEN)
74
+
75
+ sonde("104b", "Eine Pruefung, die main zweimal ruft, wird gemeldet - sie meldete jeden "
76
+ "Befund doppelt", _104_zweimal, M104_ZWEIMAL)
77
+
78
+ sonde("104c", "Ein Sondenteil, den der Einstieg nicht laedt, wird gemeldet - seine "
79
+ "Einheiten meldeten sich nie an", _104_ungeladen, M104_UNGELADEN)
80
+
81
+ sonde("104d", "Sondenteile, die der Einstieg nicht in der Reihenfolge ihrer Nummer laedt, "
82
+ "werden gemeldet - die Reihenfolge ist die Abnahmeform", _104_reihenfolge,
83
+ M104_REIHENFOLGE)
84
+
85
+ sonde("104e", "Ohne einen einzigen Sondenteil hat Pruefung 104 ihren Gegenstand verloren und "
86
+ "sagt es, statt leise zu bestehen", _104_anker_verlieren, M104_ANKER)
87
+
88
+ gegenprobe("104a", "Eine Hilfsfunktion mit dem Praefix _check ist keine Pruefung und muss "
89
+ "nicht gerufen werden", _104_hilfsfunktion, M104_MARKE)
90
+
91
+
92
+ # --- Pruefung 105: die gepruefte Clientversion in der Zielspanne (D-482, K-40) ---------
93
+ #
94
+ # Die Sonden verstellen je eine Seite des Vergleichs: eine gehobene Spanne ohne Messung,
95
+ # eine gemessene Version ausserhalb jeder Spanne, eine fehlende Zeile. Die Gegenproben
96
+ # halten die zwei Grenzen, die der erste Entwurf nicht kannte: eine Nebenversion in der
97
+ # Zelle der geprueften Version (kiro nennt seinen Agentenserver) und eine Spanne, die im
98
+ # Fliesstext nur erwaehnt wird (devin-desktop: "ohne Messung gegen 3.10.x").
99
+ P105_CLAUDE = ".koolie/core/clients/claude-code/CLIENT_PACK.md"
100
+ P105_CODEX = ".koolie/core/clients/openai-codex/CLIENT_PACK.md"
101
+ P105_CURSOR = ".koolie/core/clients/cursor/CLIENT_PACK.md"
102
+ P105_KIRO = ".koolie/core/clients/kiro/CLIENT_PACK.md"
103
+ M105_UNBELEGT = "die Zielspanne 2.2.x ist durch keine gepruefte Version belegt"
104
+ M105_AUSSERHALB = "die gepruefte Clientversion 0.157.0 liegt in keiner Zielspanne"
105
+ M105_ZEILE = "findet die Steckbriefzeile 'Geprüfte Clientversion' nicht"
106
+ M105_MARKE = "(K-40, D-482)"
107
+
108
+
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)."))
112
+
113
+
114
+ def _105_version_ausserhalb(root: str) -> None:
115
+ ersetze(_p(root, P105_CODEX), ("| Geprüfte Clientversion | `0.156.1` ",
116
+ "| Geprüfte Clientversion | `0.157.0` "))
117
+
118
+
119
+ def _105_zeile_weg(root: str) -> None:
120
+ pfad = _p(root, P105_CURSOR)
121
+ zeilen = lies(pfad).split("\r\n")
122
+ behalten = [z for z in zeilen if not z.startswith("| Geprüfte Clientversion |")]
123
+ if len(behalten) != len(zeilen) - 1:
124
+ raise Praeparationsfehler("Sonde 105c: die Zeile der geprueften Version steht "
125
+ "%dmal im Pack" % (len(zeilen) - len(behalten)))
126
+ schreib(pfad, "\r\n".join(behalten))
127
+
128
+
129
+ def _105_nebenversion(root: str) -> None:
130
+ ersetze(_p(root, P105_KIRO), ("installiert, **an keiner Sitzung gemessen**. Konto: Free |",
131
+ "installiert, **an keiner Sitzung gemessen**. Konto: Free; "
132
+ "Hilfsdienst `9.9.9` |"))
133
+
134
+
135
+ sonde("105a", "Eine gehobene Zielspanne ohne gepruefte Version darin wird gemeldet - die "
136
+ "Spanne sagt mehr, als gemessen ist", _105_spanne_gehoben, M105_UNBELEGT)
137
+
138
+ sonde("105b", "Eine gepruefte Version ausserhalb jeder Zielspanne wird gemeldet",
139
+ _105_version_ausserhalb, M105_AUSSERHALB)
140
+
141
+ sonde("105c", "Ohne die Zeile der geprueften Version sagt Pruefung 105, dass sie das Pack "
142
+ "nicht haelt, statt leise zu bestehen", _105_zeile_weg, M105_ZEILE)
143
+
144
+ gegenprobe("105a", "Eine weitere Version in der Zelle der geprueften Version, etwa ein "
145
+ "Hilfsdienst, bleibt unbeanstandet", _105_nebenversion, M105_MARKE)
146
+
147
+ gegenprobe("105b", "Eine Spanne, die im Fliesstext ohne Backticks erwaehnt wird, ist keine "
148
+ "Zielspanne - das unveraenderte Pack devin-desktop bleibt unbeanstandet",
149
+ None, M105_MARKE)
@@ -0,0 +1,136 @@
1
+ """Sonden zu den Pruefungen 106 (Entscheidungsprotokoll des Schutz-Hooks) und 107
2
+ (Gegenfaelle der Wirksamkeitsprobe), dazu die Erweiterung von Pruefung 26 um den Zustand
3
+ 'unerhoben' und das Verb mcp (1.20.0).
4
+
5
+ Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
6
+ Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
7
+ Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
8
+ nur aus dem Apparat und aus frueheren Teilen."""
9
+ from __future__ import annotations
10
+
11
+ import os
12
+
13
+ from .apparat import ersetze, gegenprobe, P, sonde
14
+ from .teil03_pruefungen_26_bis_36 import _manifest_aendern
15
+
16
+ HOOK = ".koolie/core/tests/scripts/hook-check-secrets.py"
17
+ WIRKSAMKEIT = ".koolie/core/wirksamkeit.py"
18
+
19
+
20
+ def _p(root: str, rel: str) -> str:
21
+ return P(root, rel.replace("/", os.sep))
22
+
23
+
24
+ # --- Pruefung 106: das Entscheidungsprotokoll (CR-2026-162, D-487, K-192) -----------
25
+ #
26
+ # Drei Sonden auf drei Zusagen: Es wird protokolliert, es wird kein Inhalt protokolliert,
27
+ # und der Schalter im Overlay wirkt. Jede setzt am Hook selbst an, nicht an der Pruefung.
28
+ M106_ZEILEN = "Zeile(n) statt 2"
29
+ M106_INHALT = "traegt den Inhalt oder einen Pfadwert"
30
+ M106_SCHALTER = "schaltet das Entscheidungsprotokoll des Schutz-Hooks nicht ab"
31
+ M106_MARKE = "Pruefung 106"
32
+
33
+
34
+ def _106_schweigt(root: str) -> None:
35
+ ersetze(_p(root, HOOK), (' """Eine Zeile - nie der Inhalt, nie ein Pfadwert. Ein Fehler aendert nichts."""\r\n',
36
+ ' """Eine Zeile - nie der Inhalt, nie ein Pfadwert. Ein Fehler aendert nichts."""\r\n'
37
+ ' return\r\n'))
38
+
39
+
40
+ def _106_inhalt(root: str) -> None:
41
+ ersetze(_p(root, HOOK), ('"ergebnis": ergebnis, "grund": erste[:200]}',
42
+ '"ergebnis": ergebnis, "grund": erste[:200] + " " + '
43
+ 'json.dumps(_ENTSCHEIDUNG.get("eingabe"))}'),
44
+ (' _ENTSCHEIDUNG["werkzeug"] = tool_name.strip().lower()[:120]\r\n',
45
+ ' _ENTSCHEIDUNG["werkzeug"] = tool_name.strip().lower()[:120]\r\n'
46
+ ' _ENTSCHEIDUNG["eingabe"] = tool_input\r\n'))
47
+
48
+
49
+ def _106_schalter(root: str) -> None:
50
+ ersetze(_p(root, HOOK), (' return not (m and m.group(1).lower() == "aus")\r\n',
51
+ ' return True\r\n'))
52
+
53
+
54
+ sonde("106a", "Ein Hook, der keine Entscheidung festhaelt, wird gemeldet - das Protokoll "
55
+ "bliebe leer", _106_schweigt, M106_ZEILEN)
56
+ sonde("106b", "Ein Protokoll, das die Werkzeugeingabe mitschreibt, wird gemeldet - es "
57
+ "truege das Secret", _106_inhalt, M106_INHALT)
58
+ sonde("106c", "Ein Hook, der den Schalter im Overlay-Manifest uebergeht, wird gemeldet",
59
+ _106_schalter, M106_SCHALTER)
60
+ gegenprobe("106a", "Der ausgelieferte Hook haelt Entscheidungen fest, ohne Inhalt, und "
61
+ "laesst sich abschalten", None, M106_MARKE)
62
+
63
+
64
+ # --- Pruefung 107: die Gegenfaelle der Wirksamkeitsprobe (D-488, D-490, K-195) -------
65
+ #
66
+ # Die Sonde 107a baut genau den Fehler des Messapparats nach (D-490): Sie wertet Exit 2
67
+ # als Sperre. Dann besteht ein Baum ohne Hook-Skript - und das muss auffallen.
68
+ M107_EXIT = "besteht einen Baum ohne Hook-Skript"
69
+ M107_MATCHER = "erkennt einen Matcher ohne die Werkzeugklasse mcp nicht"
70
+ M107_LADEN = "Die Wirksamkeitsprobe laesst sich nicht laden"
71
+ M107_MARKE = "Pruefung 107"
72
+
73
+
74
+ def _107_exitcode(root: str) -> None:
75
+ ersetze(_p(root, WIRKSAMKEIT), (" if SPERRHINWEIS not in aus:\r\n",
76
+ " if code != 2:\r\n"),
77
+ (" if code != 0 or SPERRHINWEIS in aus:\r\n",
78
+ " if code not in (0, 2):\r\n"))
79
+
80
+
81
+ def _107_matcher(root: str) -> None:
82
+ ersetze(_p(root, WIRKSAMKEIT), (" if not treffer:\r\n", " if False:\r\n"))
83
+
84
+
85
+ def _107_kaputt(root: str) -> None:
86
+ ersetze(_p(root, WIRKSAMKEIT), ("MUSS, WARNUNG, UNERHOBEN, OK = ",
87
+ "MUSS, WARNUNG, UNERHOBEN, OK = = "))
88
+
89
+
90
+ sonde("107a", "Eine Probe, die Exit 2 als Sperre wertet, besteht einen Baum ohne Hook und "
91
+ "wird gemeldet", _107_exitcode, M107_EXIT)
92
+ sonde("107b", "Eine Probe, die den Matcher nicht gegen die Werkzeugklassen haelt, wird "
93
+ "gemeldet", _107_matcher, M107_MATCHER)
94
+ sonde("107c", "Eine Probe, die sich nicht laden laesst, wird gemeldet - install.py --probe "
95
+ "liefe nicht", _107_kaputt, M107_LADEN)
96
+ gegenprobe("107a", "Die ausgelieferte Probe besteht den intakten Baum und faellt an beiden "
97
+ "Gegenfaellen", None, M107_MARKE)
98
+
99
+
100
+ # --- Pruefung 26, seit 1.20.0: 'unerhoben' und das Verb mcp (D-486, K-184) -----------
101
+ M26_NOTIZ = "_hook_tools_unerhoben_note fehlt oder ist leer"
102
+ M26_BEIDES = "gemessen oder nicht, beides geht nicht"
103
+ M26_PAAR = "stehen nur zusammen"
104
+ M26_PRAEFIX = "Kein Matcher in hook_tools.mcp trifft"
105
+
106
+
107
+ def _26_ohne_notiz(root: str) -> None:
108
+ _manifest_aendern(root, "kiro", lambda m: m.pop("_hook_tools_unerhoben_note"))
109
+
110
+
111
+ def _26_beides(root: str) -> None:
112
+ def f(m):
113
+ m["hook_tools"]["mcp"] = ["mcp_.*"]
114
+ m["hook_mcp_prefixes"] = ["mcp_"]
115
+ _manifest_aendern(root, "kiro", f)
116
+
117
+
118
+ def _26_ohne_praefix(root: str) -> None:
119
+ _manifest_aendern(root, "claude-code", lambda m: m.pop("hook_mcp_prefixes"))
120
+
121
+
122
+ def _26_praefix_verfehlt(root: str) -> None:
123
+ _manifest_aendern(root, "claude-code", lambda m: m.__setitem__("hook_mcp_prefixes",
124
+ ["werkzeug:"]))
125
+
126
+
127
+ sonde("26", "Ein ungemessenes Verb ohne Begruendung wird gemeldet - wie eine erklaerte "
128
+ "Abwesenheit", _26_ohne_notiz, M26_NOTIZ)
129
+ sonde("26", "Ein Verb, das zugleich unerhoben und abgebildet ist, wird gemeldet",
130
+ _26_beides, M26_BEIDES)
131
+ sonde("26", "Ein MCP-Matcher ohne Praefix fuer den Hook wird gemeldet - der Hook erkennte "
132
+ "das Werkzeug nicht", _26_ohne_praefix, M26_PAAR)
133
+ sonde("26", "Ein Praefix, das kein MCP-Matcher trifft, wird gemeldet - der Hook liefe nie "
134
+ "an", _26_praefix_verfehlt, M26_PRAEFIX)
135
+ gegenprobe("26", "Die ausgelieferten Manifeste fuehren unerhoben und mcp folgerichtig",
136
+ None, "hook_mcp_prefixes")
@@ -0,0 +1,150 @@
1
+ """Sonden zur Pfad- und Mustersemantik (1.20.1): die zweite Lesart der POSIX-Schreibweise
2
+ im Schutz-Hook (Pruefung 32, K-96), die Schreibsperren der CI- und Quality-Gate-Pfade
3
+ (Pruefung 89, K-35) und ein allow-Befehl, der ein deny-Praefix umschliesst (Pruefung 108,
4
+ K-47).
5
+
6
+ Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
7
+ Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
8
+ Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
9
+ nur aus dem Apparat und aus frueheren Teilen."""
10
+ from __future__ import annotations
11
+
12
+ import json
13
+ import os
14
+
15
+ from .apparat import (
16
+ aufraeumen, buendel, ersetze, gegenprobe, installation, lies, melde, notiz, P,
17
+ Praeparationsfehler, schreib, sonde, strict_ausgabe, validator_ausgabe)
18
+ from .teil07_overlay_und_lieferung import _89_fuellen, _89_pfade, _89_voll
19
+
20
+ HOOK = ".koolie/core/tests/scripts/hook-check-secrets.py"
21
+ KERNQUELLE = ".koolie/core/framework/runtime/permissions.json"
22
+
23
+
24
+ def _p(root: str, rel: str) -> str:
25
+ return P(root, rel.replace("/", os.sep))
26
+
27
+
28
+ # --- Pruefung 32, seit 1.20.1: die zweite Lesart von /c/... (CR-2026-163, D-491, K-96) --
29
+ #
30
+ # Die Sonde nimmt dem Hook die zweite Lesart und laesst ihm nur die, die Python waehlt:
31
+ # /c/ als C:\c\. Dann geht die POSIX-Schreibweise mit Punktsegment in den Kern durch -
32
+ # genau der Stand bis 1.20.0. Nur unter Windows messbar; der Sondenlauf laeuft dort.
33
+ M32_LESART = "der Hook muss beide Lesarten aufloesen"
34
+
35
+
36
+ def _32_eine_lesart(root: str) -> None:
37
+ ersetze(_p(root, HOOK), (" if not m:\r\n return [echt]\r\n",
38
+ " if True:\r\n return [echt]\r\n"))
39
+
40
+
41
+ sonde("32", "Ein Hook, der /c/... nur als C:\\c\\... liest, laesst die POSIX-Schreibweise "
42
+ "in den Kern schreiben und wird gemeldet", _32_eine_lesart, M32_LESART)
43
+ gegenprobe("32", "Der ausgelieferte Hook loest beide Lesarten auf", None, M32_LESART)
44
+
45
+
46
+ # --- Pruefung 108: allow umschliesst ein deny-Praefix (CR-2026-163, D-494, K-47) -----
47
+ #
48
+ # An der Kernquelle: ein allow-Befehl 'git' neben den deny-Befehlen 'git push' und
49
+ # 'git merge' - der gemessene Zuschnitt aus D-123.
50
+ M108 = "umschließt"
51
+
52
+
53
+ def _108_kernquelle(root: str) -> None:
54
+ ersetze(_p(root, KERNQUELLE), (' { "tool": "exec", "command": "git status" },\r\n',
55
+ ' { "tool": "exec", "command": "git status" },\r\n'
56
+ ' { "tool": "exec", "command": "git" },\r\n'))
57
+
58
+
59
+ sonde("108", "Ein allow-Befehl git in der Kernquelle umschliesst das deny-Praefix git push "
60
+ "und wird gemeldet", _108_kernquelle, M108)
61
+ gegenprobe("108", "Die ausgelieferte Kernquelle fuehrt keinen allow-Befehl, der ein "
62
+ "deny-Praefix umschliesst", None, M108)
63
+
64
+
65
+ def _108_korb(root: str, zusatz: list) -> None:
66
+ pfad = os.path.join(root, ".claude", "settings.json")
67
+ cfg = json.loads(lies(pfad))
68
+ if "Bash(git push:*)" not in cfg["permissions"]["deny"]:
69
+ raise Praeparationsfehler("settings.json: Bash(git push:*) steht nicht im deny-Korb")
70
+ cfg["permissions"]["allow"] = cfg["permissions"]["allow"] + zusatz
71
+ schreib(pfad, json.dumps(cfg, ensure_ascii=False, indent=2))
72
+
73
+
74
+ def sonden_allow_umschliesst_deny() -> None:
75
+ """Pruefung 108 an einer claude-code-Installation: der installierte Korb."""
76
+ root = installation("claude-code")
77
+ try:
78
+ melde("GEGENPROBE", "108a", M108 not in validator_ausgabe(root),
79
+ "Eine frische Installation fuehrt keinen allow-Eintrag, der ein deny-Praefix "
80
+ "umschliesst")
81
+ urstand = lies(os.path.join(root, ".claude", "settings.json"))
82
+ _108_korb(root, ["Bash(git:*)"])
83
+ aus = validator_ausgabe(root)
84
+ melde("SONDE", "108b", "Bash(git:*) im allow-Korb umschließt" in aus,
85
+ "Bash(git:*) im allow-Korb umschliesst Bash(git push:*) - der gemessene "
86
+ "Zuschnitt aus D-123")
87
+ schreib(os.path.join(root, ".claude", "settings.json"), urstand)
88
+ _108_korb(root, ["Bash(git pus:*)"])
89
+ melde("GEGENPROBE", "108c", M108 not in validator_ausgabe(root),
90
+ "Ein Praefix, das an keiner Wortgrenze endet (git pus), umschliesst git push "
91
+ "nicht")
92
+ finally:
93
+ aufraeumen(os.path.dirname(root))
94
+
95
+
96
+ buendel(sonden_allow_umschliesst_deny,
97
+ "Pruefung 108 am installierten Korb von claude-code: eine Sonde, zwei Gegenproben")
98
+
99
+
100
+ # --- Pruefung 89, seit 1.20.1: CI- und Quality-Gate-Pfade (CR-2026-163, D-493, K-35) --
101
+ #
102
+ # Die Quelle fuellt beide Schlitze mit je zwei Globs; der deny-Korb traegt sie entfaltet
103
+ # (so schreibt es install.py). Die Sonde laesst einen Glob weg - der zu eng gefuellte
104
+ # Schlitz, die stille Lockerung.
105
+ P89_CI = [".gitlab-ci.yml", ".github/workflows/**"]
106
+ P89_QG = [".eslintrc.json", "sonar-project.properties"]
107
+ M89_CI = "Ein zu eng gefüllter Schlitz ist eine stille Lockerung"
108
+
109
+
110
+ def _89_sperrschlitze(root: str, ci: list, qg: list) -> None:
111
+ quelle, laufzeit, korb = _89_voll()
112
+ quelle["<CI_CONFIG_PATHS>"] = ", ".join("`%s`" % g for g in P89_CI)
113
+ quelle["<QUALITY_GATE_CONFIG_PATHS>"] = ", ".join("`%s`" % g for g in P89_QG)
114
+ _89_fuellen(root, quelle, laufzeit, korb)
115
+ _, _, k_pfad = _89_pfade(root)
116
+ cfg = json.loads(lies(k_pfad))
117
+ deny = cfg["permissions"]["deny"]
118
+ for schlitz in ("<CI_CONFIG_PATHS>", "<QUALITY_GATE_CONFIG_PATHS>"):
119
+ if sum(schlitz in r for r in deny) < 1:
120
+ raise Praeparationsfehler("settings.json: der Schlitz %s steht nicht im "
121
+ "deny-Korb" % schlitz)
122
+ deny = [r for r in deny if "<CI_CONFIG_PATHS>" not in r
123
+ and "<QUALITY_GATE_CONFIG_PATHS>" not in r]
124
+ cfg["permissions"]["deny"] = deny + ["Edit(%s)" % g for g in ci + qg]
125
+ schreib(k_pfad, json.dumps(cfg, ensure_ascii=False, indent=2))
126
+
127
+
128
+ def sonden_sperrschlitze() -> None:
129
+ """Pruefung 89 (c) fuer <CI_CONFIG_PATHS> und <QUALITY_GATE_CONFIG_PATHS>."""
130
+ root = installation("claude-code")
131
+ try:
132
+ _89_sperrschlitze(root, P89_CI, P89_QG)
133
+ aus = strict_ausgabe(root)
134
+ melde("GEGENPROBE", "89e", M89_CI not in aus,
135
+ "Beide Schlitze gefuellt, jeder Glob mit eigener Schreibsperre - "
136
+ "unbeanstandet")
137
+ if M89_CI in aus:
138
+ notiz(" gemeldet: %s" % [z for z in aus.splitlines() if M89_CI in z][:2])
139
+ _89_sperrschlitze(root, P89_CI[:1], P89_QG)
140
+ aus = strict_ausgabe(root)
141
+ melde("SONDE", "89f", M89_CI in aus and ".github/workflows/**" in aus,
142
+ "Ein CI-Glob der Quelle ohne Schreibsperre im deny-Korb wird gemeldet - der "
143
+ "zu eng gefuellte Schlitz")
144
+ finally:
145
+ aufraeumen(os.path.dirname(root))
146
+
147
+
148
+ buendel(sonden_sperrschlitze,
149
+ "Pruefung 89 (c) fuer die CI- und Quality-Gate-Pfade an einer claude-code-"
150
+ "Installation: eine Gegenprobe, eine Sonde")
@@ -0,0 +1,204 @@
1
+ """Sonden zu Modi, Ausnahmen und eingebauten Skills (1.20.2): die Modusbindung am
2
+ Schutz-Hook und ihr Schutz (Pruefung 99, K-179), die Sperre fuer das Hochladen von
3
+ Secrets in der Wirksamkeitsprobe (Pruefung 107, K-94), die beiden Werkzeugfelder eines
4
+ Skills (Pruefung 109, K-93) und die aktivierten Packs gegen die Regelablage (Pruefung 110,
5
+ K-44).
6
+
7
+ Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
8
+ Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
9
+ Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
10
+ nur aus dem Apparat und aus frueheren Teilen."""
11
+ from __future__ import annotations
12
+
13
+ import datetime
14
+ import json
15
+ import os
16
+ import shutil
17
+ import subprocess
18
+ import sys
19
+
20
+ from .apparat import (
21
+ aufraeumen, buendel, ersetze, gegenprobe, installation, lies, melde, P,
22
+ Praeparationsfehler, schreib, sonde, strict_ausgabe, unterprozess)
23
+
24
+ HOOK = ".koolie/core/tests/scripts/hook-check-secrets.py"
25
+ SKILL_109 = ".koolie/core/framework/skills/fw-code-explain/SKILL.md"
26
+
27
+
28
+ def _p(root: str, rel: str) -> str:
29
+ return P(root, rel.replace("/", os.sep))
30
+
31
+
32
+ # --- Pruefung 99, seit 1.20.2: die Modusdatei ist fuer den Client gesperrt (D-501) ----
33
+ M99_MODUS = "Schreiben der Modusdatei endet mit Exit 0"
34
+
35
+
36
+ def _99_modus_offen(root: str) -> None:
37
+ ersetze(_p(root, HOOK), (' re.compile(r"koolie-modus", re.I),\r\n', ""))
38
+
39
+
40
+ sonde("99e", "Ein Hook, der die Modusdatei nicht sperrt, liesse den Client seine "
41
+ "Modusbindung selbst aufheben und wird gemeldet", _99_modus_offen, M99_MODUS)
42
+
43
+
44
+ # --- Pruefung 107, seit 1.20.2: die Probe sperrt das Hochladen von Secrets (D-503) ----
45
+ M107_INTAKT = "meldet an einem intakten Baum fehlende"
46
+
47
+
48
+ def _107_ohne_uebertragung(root: str) -> None:
49
+ ersetze(_p(root, HOOK), (' re.compile(r"\\bcloud\\s+drs\\s+secret-create\\b", re.I),\r\n',
50
+ ""))
51
+
52
+
53
+ sonde("107d", "Ein Hook ohne die Sperre fuer 'cloud drs secret-create' faellt in der "
54
+ "Wirksamkeitsprobe durch (H3) und wird gemeldet", _107_ohne_uebertragung,
55
+ M107_INTAKT)
56
+
57
+
58
+ # --- Pruefung 109: die beiden Werkzeugfelder eines Skills (CR-2026-164, D-505, K-93) --
59
+ M109 = "Die Werkzeugbeschränkung eines Skills wirkt nur mit beiden Feldern"
60
+
61
+
62
+ def _109_nur_allowed(root: str) -> None:
63
+ ersetze(_p(root, SKILL_109), ("permissions:\r\n deny:\r\n - edit\r\n - exec\r\n", ""))
64
+
65
+
66
+ sonde("109", "Ein Kern-Skill mit allowed-tools, aber ohne permissions wird gemeldet",
67
+ _109_nur_allowed, M109)
68
+ gegenprobe("109", "Alle ausgelieferten Skills fuehren beide Werkzeugfelder", None, M109)
69
+
70
+
71
+ # --- Pruefung 110: die aktivierten Packs gegen die Regelablage (CR-2026-164, D-504, K-44)
72
+ M110_FEHLT = "die Ebene dieses Packs lädt in keiner Sitzung"
73
+ M110_OHNE = "aktiviert wird ein Pack im Overlay"
74
+ ROLLE = "software-development"
75
+
76
+
77
+ def _110_zeile(root: str, wert: str) -> None:
78
+ ov = os.path.join(root, ".koolie", "project-overlay", "OVERLAY.md")
79
+ text = lies(ov)
80
+ alt = "`<TBD: Liste, z. B. software-development Version, oder keine>`"
81
+ if text.count(alt) != 1:
82
+ raise Praeparationsfehler("OVERLAY.md: die Zeile 'Aktivierte Role Packs' traegt "
83
+ "nicht genau einmal den Ausfuellschlitz der Vorlage")
84
+ schreib(ov, text.replace(alt, wert))
85
+
86
+
87
+ def sonden_aktivierte_packs() -> None:
88
+ """Pruefung 110 an einer claude-code-Installation: Zeile gegen Laufzeitfassung."""
89
+ root = installation("claude-code")
90
+ try:
91
+ aus = strict_ausgabe(root)
92
+ melde("GEGENPROBE", "110a", M110_FEHLT not in aus and M110_OHNE not in aus,
93
+ "Eine frische Installation (Zeile noch mit <TBD>, keine Laufzeitfassung) - "
94
+ "unbeanstandet")
95
+ urstand = lies(os.path.join(root, ".koolie", "project-overlay", "OVERLAY.md"))
96
+ _110_zeile(root, "`%s` 0.1.1" % ROLLE)
97
+ aus = strict_ausgabe(root)
98
+ melde("SONDE", "110b", M110_FEHLT in aus and ROLLE in aus,
99
+ "Das Overlay fuehrt ein Role Pack als aktiviert, die Laufzeitfassung fehlt - "
100
+ "die Ebene 6 ginge still verloren")
101
+ quelle = os.path.join(root, ".koolie", "core", "framework", "role-packs", ROLLE,
102
+ "runtime", "30-role-%s.md" % ROLLE)
103
+ ziel = os.path.join(root, ".claude", "rules", "30-role-%s.md" % ROLLE)
104
+ if not os.path.isfile(quelle):
105
+ raise Praeparationsfehler("Die Laufzeitfassung des Role Packs %s fehlt im Kern"
106
+ % ROLLE)
107
+ shutil.copyfile(quelle, ziel)
108
+ aus = strict_ausgabe(root)
109
+ melde("GEGENPROBE", "110c", M110_FEHLT not in aus and M110_OHNE not in aus,
110
+ "Genannt und vorhanden - unbeanstandet")
111
+ schreib(os.path.join(root, ".koolie", "project-overlay", "OVERLAY.md"), urstand)
112
+ _110_zeile(root, "`keine`")
113
+ aus = strict_ausgabe(root)
114
+ melde("SONDE", "110d", M110_OHNE in aus,
115
+ "Eine Laufzeitfassung, die das Overlay nicht als aktiviert fuehrt, wird "
116
+ "gemeldet")
117
+ finally:
118
+ aufraeumen(os.path.dirname(root))
119
+
120
+
121
+ buendel(sonden_aktivierte_packs,
122
+ "Pruefung 110 an einer claude-code-Installation: zwei Gegenproben, zwei Sonden")
123
+
124
+
125
+ # --- Die Modusbindung am Schutz-Hook (CR-2026-164, D-501, K-179) --------------------
126
+ def _hook(root: str, ereignis: dict) -> int:
127
+ skript = os.path.join(root, ".koolie", "core", "tests", "scripts", "hook-check-secrets.py")
128
+ p = subprocess.run([sys.executable, skript, "--fail-closed"],
129
+ input=json.dumps(ereignis).encode("utf-8"), capture_output=True,
130
+ timeout=60, cwd=root)
131
+ return p.returncode
132
+
133
+
134
+ def _modus_setzen(root: str, modus: str, ablage: str = "", minuten: int = 30,
135
+ projekt: str = "") -> None:
136
+ ende = (datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
137
+ + datetime.timedelta(minutes=minuten))
138
+ daten = {"modus": modus, "bis": ende.strftime("%Y-%m-%dT%H:%M:%SZ"),
139
+ "projekt": projekt or os.path.realpath(root)}
140
+ if ablage:
141
+ daten["ablage"] = ablage
142
+ schreib(os.path.join(root, ".git", "koolie-modus.json"), json.dumps(daten))
143
+
144
+
145
+ def _schreiben(pfad: str) -> dict:
146
+ return {"tool_name": "write", "tool_input": {"file_path": pfad, "content": "x"}}
147
+
148
+
149
+ def sonden_modusbindung() -> None:
150
+ """Die Modusbindung an einer echten Installation: sie sperrt, was sie soll, und nichts
151
+ sonst; die Sperre fuer das Hochladen von Secrets gilt unabhaengig davon."""
152
+ root = installation("devin-desktop")
153
+ try:
154
+ os.makedirs(os.path.join(root, ".git"))
155
+ quelle, plan = _schreiben("src/Neu.java"), _schreiben("docs/plaene/plan.md")
156
+ melde("GEGENPROBE", "D501", _hook(root, quelle) == 0,
157
+ "Ohne Bindung schreibt der Client wie bisher")
158
+ _modus_setzen(root, "M1")
159
+ melde("SONDE", "D501a", _hook(root, quelle) == 2 and _hook(root, plan) == 2,
160
+ "M1 gebunden: jedes Schreibwerkzeug wird gesperrt")
161
+ _modus_setzen(root, "M2", "docs/plaene")
162
+ melde("SONDE", "D501b", _hook(root, quelle) == 2 and _hook(root, plan) == 0,
163
+ "M2 gebunden: nur die Plan-Ablage ist offen")
164
+ melde("SONDE", "D501c", _hook(root, _schreiben("docs/plaene/../../src/X.java")) == 2
165
+ and _hook(root, _schreiben("docs/plaene2/x.md")) == 2,
166
+ "Ein Punktsegment und ein Namensvetter der Ablage fuehren nicht hinein")
167
+ melde("GEGENPROBE", "D501d", _hook(root, {"tool_name": "exec", "tool_input": {
168
+ "command": "git status"}}) == 0,
169
+ "Ein lesender Befehl bleibt in M2 erlaubt")
170
+ _modus_setzen(root, "M1", minuten=-5)
171
+ melde("GEGENPROBE", "D501e", _hook(root, quelle) == 0,
172
+ "Eine abgelaufene Bindung sperrt nichts mehr")
173
+ _modus_setzen(root, "M1", projekt=os.path.dirname(root))
174
+ melde("GEGENPROBE", "D501f", _hook(root, quelle) == 0,
175
+ "Die Bindung eines anderen Projekts gilt hier nicht")
176
+ _modus_setzen(root, "M2", ".koolie/project-overlay")
177
+ melde("GEGENPROBE", "D501g", _hook(root, quelle) == 0,
178
+ "Eine Plan-Ablage in .koolie/ macht die Bindung ungueltig - der Hook liest "
179
+ "sie nicht")
180
+ os.remove(os.path.join(root, ".git", "koolie-modus.json"))
181
+ mandat = os.path.join(root, ".koolie", "core", "mandat.py")
182
+ p = unterprozess([sys.executable, mandat, "modus", "M2", "--ablage", ".koolie/x"])
183
+ melde("SONDE", "D501h", p.returncode == 2 and not os.path.exists(
184
+ os.path.join(root, ".git", "koolie-modus.json")),
185
+ "mandat.py lehnt eine Plan-Ablage in .koolie/ ab und schreibt nichts")
186
+ p = unterprozess([sys.executable, mandat, "modus", "M2", "--ablage", "docs/plaene",
187
+ "--minuten", "5"])
188
+ melde("GEGENPROBE", "D501i", p.returncode == 0 and _hook(root, plan) == 0
189
+ and _hook(root, quelle) == 2,
190
+ "mandat.py modus M2 bindet, und der Hook liest die Bindung")
191
+ p = unterprozess([sys.executable, mandat, "modus", "aus"])
192
+ melde("GEGENPROBE", "D501j", _hook(root, quelle) == 0,
193
+ "mandat.py modus aus hebt die Bindung auf")
194
+ melde("SONDE", "D503", _hook(root, {"tool_name": "exec", "tool_input": {
195
+ "command": "devin cloud drs secret-create --from-env X --dry-run"}}) == 2,
196
+ "Das Hochladen von Secrets ueber die CLI wird gesperrt, auch als Probelauf")
197
+ finally:
198
+ aufraeumen(os.path.dirname(root))
199
+
200
+
201
+ buendel(sonden_modusbindung,
202
+ "Die Modusbindung fuer M1 und M2 an einer devin-desktop-Installation: Sperre, "
203
+ "Ablage, Ausbruch, Ablauf, fremdes Projekt, mandat.py, und die Sperre fuer das "
204
+ "Hochladen von Secrets")