@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,363 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Baut den BASISBAUM des fuenften Testblatt-Buendels unter C:\\lw-b5.
3
+
4
+ python umgebungen-bauen-b5.py [--erwarte <version>]
5
+
6
+ Ergebnis: C:\\lw-b5\\basis - eine vollstaendige claude-code-Installation des
7
+ Uebungsrepositoriums MIT AKTIVIERTEM Role Pack `requirements-engineering`, ohne
8
+ `.git`. Die Historie kommt je Baum dazu (`baeume-b5.py`).
9
+
10
+ 🔴 ABGELEITET AUS `umgebungen-bauen-b4.py` (CR-2026-116). Die MECHANIK ist geerbt
11
+ und mit 0.82.0 gemessen - Packwechsel, Overlay-Fuellung, Packaktivierung in drei
12
+ Teilen, abgeleiteter Skillwaechter. Neu ist der ZUSCHNITT, und er ist an vier
13
+ Stellen anders:
14
+
15
+ 1. KEIN `node_modules`. `historie-bauen-b4.py` und die Verzeichnisverbindung
16
+ gibt es, weil zwoelf Zellen von Buendel 4 einen DIFF verlangen und drei
17
+ Skills SCHREIBEN. `role-re-ticket` ist M1 und rein lesend; keine der
18
+ fuenfzehn Zellen nennt einen Branch, einen Diff oder einen Testbefehl.
19
+ Damit entfaellt auch die Loeschfalle von 0.74.1 - ein rekursives Loeschen,
20
+ das der Verbindung folgt, kann hier gar nicht entstehen.
21
+ 2. LEERE ABWEICHUNGSLISTE. Buendel 4 nimmt `Edit(**)` aus dem `ask`-Korb und
22
+ gibt zwei Schreibkoerbe frei (D-178), weil sechs Zellen sonst den Korb statt
23
+ den Skill messen. `RE-001-N03` misst das GEGENTEIL: dass der Lauf nichts
24
+ eintraegt. Der Korb bleibt, wie `install.py` ihn erzeugt - und ein Waechter
25
+ belegt, dass er es tut.
26
+ 3. DIE VORBEDINGUNGEN SIND ANDERE. Nicht Plaene und Berichte, sondern
27
+ Schnittstellenvertrag, Migration, Glossar und die WERTZEILE von
28
+ `<ISSUE_TRACKER>` in Abschnitt 13 des Overlays.
29
+ 4. DAS PRUEFMITTEL IST `validate-output.py`, nicht `npm test`. Es wird VOR dem
30
+ Messtag einmal im Messbaum gefahren (Lehre aus 0.68.0) - und gelesen wird
31
+ seine AUSGABE, nicht sein Exitwert: Alle drei Faelle geben denselben
32
+ (Befund von 0.81.0).
33
+
34
+ 🔴 DIE REIHENFOLGE IST GEERBT UND GEMESSEN (D-213):
35
+ archivieren -> Packwechsel -> `install.py` -> Overlay fuellen -> Packaktivierung
36
+ -> (Zuschnitt) -> HISTORIE. Wer die Historie zuerst baut, committet den Stand VOR
37
+ dem Packwechsel, und das Loeschen von `.devin/` steht danach in `git status`.
38
+ """
39
+ import argparse
40
+ import io
41
+ import json
42
+ import os
43
+ import shutil
44
+ import subprocess
45
+ import sys
46
+
47
+ import ablage
48
+ import packaktivierung
49
+
50
+ sys.stdout.reconfigure(encoding="utf-8")
51
+
52
+ HIER = os.path.dirname(os.path.abspath(__file__))
53
+ UEB = ablage.uebungsrepositorium() # D-231: gesagt, nicht im Quelltext
54
+ BASIS = r"C:\lw-b5"
55
+ BAUM = os.path.join(BASIS, "basis")
56
+ # Das Client Pack des Messbaums - einmal genannt; Regel-, Skillablage und
57
+ # Berechtigungsdatei leitet `packaktivierung.py` aus seinem Manifest ab.
58
+ CLIENT = "claude-code"
59
+
60
+ QUELL_OVERLAY = os.path.join(UEB, ".koolie/project-overlay", "OVERLAY.md")
61
+
62
+ # Die WERTZEILE, an der `RE-001-P04` und `RE-001-N09` mit entgegengesetztem
63
+ # Vorzeichen haengen (D-240). Sie steht hier woertlich, weil sie der Gegenstand
64
+ # zweier Zellen ist - und `UEB-30` sucht exakt denselben Text.
65
+ WERTZEILE = "| `<ISSUE_TRACKER>` | `GitHub Issues` |"
66
+
67
+ # Die DAUERHAFTEN Vorbedingungen, an denen Zellen dieses Buendels haengen. Anders
68
+ # als bei Buendel 4 sind es keine Praeparationen, sondern Traeger des
69
+ # Uebungsrepositoriums: der Skill RECHERCHIERT, und was er finden soll, muss da
70
+ # sein.
71
+ PFLICHT = [
72
+ ("Schnittstellenvertrag (P03, N08)",
73
+ os.path.join("api-contracts", "openapi.yaml")),
74
+ ("Migration und Schema (P03, N08)",
75
+ os.path.join("backend", "src", "main", "resources", "db", "migration",
76
+ "V1__init.sql")),
77
+ ("Glossar (P01, Manifest-Typ glossary)",
78
+ os.path.join(".koolie/project-overlay", "documents", "glossary", "biv-glossar.md")),
79
+ ("Quell-Overlay mit Abschnitt 13 (P04)",
80
+ os.path.join(".koolie/project-overlay", "OVERLAY.md")),
81
+ ("Komponente mit teilweise vorhandenem Verhalten (P01, P02)",
82
+ os.path.join("frontend", "src", "api", "bestand.ts")),
83
+ ]
84
+
85
+ # Die je Meszbaum gesetzten Praeparationen duerfen im Basisbaum NICHT liegen.
86
+ # 🔴 `UEB-30` IST EIN TEXTERSATZ UND HAT DESHALB KEINEN EIGENEN PFAD. Sein
87
+ # Verbot ist ein INHALT: Solange die Wertzeile ihren Wert traegt, ist er nicht
88
+ # gesetzt. Laege er im Basisbaum, traegen ihn alle dreissig Baeume - und
89
+ # `RE-001-P04`, die denselben Platzhalter MIT Wert verlangt, waere in keinem
90
+ # einzigen fahrbar (D-240).
91
+ VERBOTEN_DATEI = [
92
+ ("UEB-31", os.path.join("frontend", "src", "api", "fernleihe.ts")),
93
+ ]
94
+
95
+
96
+ def weg(pfad):
97
+ def onexc(func, p, exc):
98
+ os.chmod(p, 0o700)
99
+ func(p)
100
+ if os.path.exists(pfad):
101
+ if os.path.islink(pfad) or os.path.isjunction(pfad):
102
+ os.rmdir(pfad)
103
+ else:
104
+ shutil.rmtree(pfad, onexc=onexc)
105
+
106
+
107
+ def lauf(befehl, cwd=None, pruefen=True):
108
+ p = subprocess.run(befehl, cwd=cwd, shell=isinstance(befehl, str),
109
+ capture_output=True, text=True, encoding="utf-8",
110
+ errors="replace")
111
+ if pruefen and p.returncode != 0:
112
+ print((p.stdout or "")[-2000:])
113
+ print((p.stderr or "")[-2000:])
114
+ raise SystemExit("ABBRUCH: %r -> Exit %d" % (befehl, p.returncode))
115
+ return p.stdout or ""
116
+
117
+
118
+ def zuschnitt():
119
+ """Die Zellen dieser Erhebung - aus dem Baumbau, nicht aus einer Liste.
120
+
121
+ `baeume-b5.py` traegt die Zuordnung Zelle -> Kontrollklasse und ist damit die
122
+ einzige Stelle, die den Zuschnitt kennt. Sie wird gefragt, nicht nachgebaut.
123
+ """
124
+ p = subprocess.run([sys.executable,
125
+ os.path.join(HIER, "baeume-b5.py"), "--zellen"],
126
+ capture_output=True, text=True, encoding="utf-8",
127
+ errors="replace")
128
+ if p.returncode != 0:
129
+ raise SystemExit("ABBRUCH: baeume-b5.py --zellen -> Exit %d\n%s"
130
+ % (p.returncode, (p.stderr or "")[-800:]))
131
+ zellen = [z.strip() for z in (p.stdout or "").splitlines() if z.strip()]
132
+ if not zellen:
133
+ raise SystemExit("ABBRUCH: der Zuschnitt ist leer - der Waechter ueber "
134
+ "die Skillmenge haette nichts zu pruefen (D-23)")
135
+ return zellen
136
+
137
+
138
+ def lies(pfad):
139
+ return io.open(pfad, encoding="utf-8", newline="").read()
140
+
141
+
142
+ def schreib(pfad, text):
143
+ daten = text.encode("utf-8")
144
+ io.open(pfad, "wb").write(daten)
145
+
146
+
147
+ def main():
148
+ ap = argparse.ArgumentParser(description=__doc__.splitlines()[0])
149
+ ap.add_argument("--erwarte", default=None,
150
+ help="erwartete Frameworkversion im Uebungsrepositorium "
151
+ "(Standard: die Version dieses Kerns)")
152
+ args = ap.parse_args()
153
+ if args.erwarte is None:
154
+ args.erwarte = ablage.kernversion()
155
+
156
+ weg(BAUM)
157
+ os.makedirs(BAUM)
158
+
159
+ # --- 1. Der Messbaum entsteht aus dem COMMITTETEN Stand ----------------------
160
+ lauf('git archive HEAD | tar -x -C "%s"' % BAUM.replace("\\", "/"), cwd=UEB)
161
+ print("archiviert:", sum(len(f) for _, _, f in os.walk(BAUM)), "Dateien")
162
+
163
+ # --- 2. Waechter auf die VORBEDINGUNGEN, vor jedem Schreibzugriff ------------
164
+ version = lies(os.path.join(BAUM, ".koolie/core", "VERSION")).strip()
165
+ if version != args.erwarte:
166
+ raise SystemExit(
167
+ "ABBRUCH: der Messbaum traegt Framework %s, erwartet %s - das "
168
+ "Uebungsrepositorium ist nicht gehoben. Ein Baum aus dem ungehobenen "
169
+ "Stand traegt die alte Erwartung." % (version, args.erwarte))
170
+ print("Framework im Messbaum:", version)
171
+
172
+ for was, pflicht in PFLICHT:
173
+ if not os.path.isfile(os.path.join(BAUM, pflicht)):
174
+ raise SystemExit("ABBRUCH: %s fehlt (%s) - eine Vorbedingung dieses "
175
+ "Buendels ist nicht im Messbaum" % (pflicht, was))
176
+ print("Vorbedingungen im Messbaum: %s" % "; ".join(w for w, _ in PFLICHT))
177
+
178
+ # --- 2b. Die INHALTE der Vorbedingungen ------------------------------------
179
+ # Ein Vorhandensein belegt sich selbst, ein INHALT nicht.
180
+ overlay = lies(os.path.join(BAUM, ".koolie/project-overlay", "OVERLAY.md"))
181
+ if overlay.count(WERTZEILE) != 1:
182
+ raise SystemExit("ABBRUCH: die Wertzeile von <ISSUE_TRACKER> steht %dx im "
183
+ "Overlay, erwartet genau einmal - RE-001-P04 haette "
184
+ "keinen Gegenstand, und UEB-30 keinen Ausgangszustand"
185
+ % overlay.count(WERTZEILE))
186
+ print("Abschnitt 13: <ISSUE_TRACKER> gebunden und mit Wert (P04)")
187
+
188
+ schema = lies(os.path.join(BAUM, "backend", "src", "main", "resources", "db",
189
+ "migration", "V1__init.sql"))
190
+ if "NOT NULL UNIQUE" not in schema:
191
+ raise SystemExit("ABBRUCH: das Schema fuehrt keine Eindeutigkeitsbedingung "
192
+ "- RE-001-N08 haette keine Randbedingung, der sie "
193
+ "widersprechen koennte")
194
+ vertrag = lies(os.path.join(BAUM, "api-contracts", "openapi.yaml"))
195
+ if "pattern:" not in vertrag or "required:" not in vertrag:
196
+ raise SystemExit("ABBRUCH: der Schnittstellenvertrag fuehrt weder Muster "
197
+ "noch Pflichtfelder - RE-001-P03 haette keinen Beleg")
198
+ print("Schema: Eindeutigkeitsbedingung; Vertrag: Muster und Pflichtfelder "
199
+ "(P03, N08)")
200
+
201
+ manifest_overlay = lies(os.path.join(BAUM, ".koolie/project-overlay",
202
+ "overlay-manifest.yaml"))
203
+ if "glossary" not in manifest_overlay:
204
+ raise SystemExit("ABBRUCH: im Overlay-Manifest ist kein Dokument vom Typ "
205
+ "`glossary` registriert - die Vorbedingung von RE-001-P01 "
206
+ "traegt nicht")
207
+ print("Overlay-Manifest: ein Dokument vom Typ `glossary` registriert (P01)")
208
+
209
+ # --- 3. Packwechsel ---------------------------------------------------------
210
+ shutil.rmtree(os.path.join(BAUM, ".devin"))
211
+ os.remove(os.path.join(BAUM, "AGENTS.md"))
212
+ lauf([sys.executable, os.path.join(BAUM, ".koolie/core", "install.py"),
213
+ "--client", CLIENT, "--root", BAUM])
214
+ lauf([sys.executable, os.path.join(HIER, "cc-overlay-fuellen.py"), BAUM])
215
+ print("Packwechsel auf %s, Overlay gefuellt" % CLIENT)
216
+
217
+ # --- 3b. DIE AKTIVIERUNG DES PACKS (D-237, D-238, D-244) --------------------
218
+ # 🔴 FUER BUENDEL 4 WAR DIESER BLOCK LEER, WEIL ALLE DREI GEMESSENEN SKILLS IM
219
+ # KERN LIEGEN. Buendel 5 misst den einzigen, der es nicht tut: `install.py`
220
+ # legt zwoelf Skills an, und `role-re-ticket` ist keiner davon.
221
+ skills, packs = ablage.skillmenge(zuschnitt())
222
+ if not packs:
223
+ raise SystemExit("ABBRUCH: der Zuschnitt nennt kein Pack - bei Buendel 5 "
224
+ "liegt der gemessene Skill AUSSERHALB des Kerns, und ein "
225
+ "leerer Block waere der Befund von D-237 zum zweiten Mal")
226
+ for _art, pack in packs:
227
+ bericht = packaktivierung.aktivieren(BAUM, CLIENT, pack)
228
+ print("Pack aktiviert: %s - Laufzeitfassung %s, Skills %s, Korb %s"
229
+ % (pack, ", ".join(bericht["regeln"]) or "keine",
230
+ ", ".join(bericht["skills"]) or "keine",
231
+ ", ".join(bericht["nachgetragen"]) or "unveraendert"))
232
+
233
+ # --- 4. Die Abweichungen des Zuschnitts: KEINE ------------------------------
234
+ # 🔴 UND DAS IST EIN WAECHTER, KEINE ZUSAGE (E3 von CR-2026-116). Der Korb
235
+ # bleibt, wie `install.py` ihn erzeugt hat. Wer ihn spaeter doch anfasst,
236
+ # bricht hier ab - eine leere Abweichungsliste, die niemand prueft, ist eine
237
+ # Behauptung.
238
+ pfad = os.path.join(BAUM, ".claude", "settings.json")
239
+ d = json.loads(lies(pfad))
240
+ p = d["permissions"]
241
+ if p["ask"].count("Edit(**)") != 1:
242
+ raise SystemExit("ABBRUCH: Edit(**) steht %dx im ask-Korb, erwartet genau "
243
+ "einmal. Buendel 5 misst einen M1-Skill mit `deny` auf "
244
+ "`edit` und `exec`; ein freigegebener Schreibkorb waere "
245
+ "eine Abweichung ohne Anlass" % p["ask"].count("Edit(**)"))
246
+ print("Abweichungsliste dieses Buendels: LEER - Edit(**) bleibt im ask-Korb")
247
+
248
+ # --- 5. Waechter auf den fertigen Baum --------------------------------------
249
+ rest = [x for k in p for x in p[k] if "<" in x and ">" in x]
250
+ if rest:
251
+ raise SystemExit("ABBRUCH: ungefuellte Platzhalter: %r" % rest)
252
+ if "Read(tools/**)" not in p["deny"]:
253
+ raise SystemExit("ABBRUCH: tools/** ist nicht gesperrt - das Mentorenblatt "
254
+ "waere lesbar, und es traegt die Aufloesung jeder "
255
+ "Negativuebung")
256
+ if not any(x.startswith("Skill") for k in p for x in p[k]):
257
+ raise SystemExit("ABBRUCH: kein Skill-Eintrag in der Berechtigungsdatei")
258
+
259
+ # 🔴 DER WAECHTER NENNT DIE SKILLS NICHT BEIM NAMEN (D-237). Die Sollmenge
260
+ # kommt aus dem Zuschnitt ueber die Testblaetter des Frameworks.
261
+ im_baum = sorted(os.listdir(os.path.join(BAUM, ".claude", "skills")))
262
+ for name in skills:
263
+ if name not in im_baum:
264
+ raise SystemExit("ABBRUCH: Skill %s fehlt im Messbaum - er ist der "
265
+ "Gegenstand dieser Erhebung, abgeleitet aus dem "
266
+ "Zuschnitt (D-237)" % name)
267
+ # Der DRITTE Teil der Aktivierung: der Korbeintrag (D-238, Pruefung 72).
268
+ korbtext = lies(pfad)
269
+ for name in im_baum:
270
+ if "Skill(%s)" % name not in korbtext:
271
+ raise SystemExit("ABBRUCH: Skill(%s) fehlt in der Berechtigungsdatei - "
272
+ "%d Skills im Baum, und dieser steht in keinem Korb "
273
+ "(D-238)" % (name, len(im_baum)))
274
+ print("Skills im Baum: %d, alle im Korb genannt; gemessen wird: %s"
275
+ % (len(im_baum), ", ".join(skills)))
276
+
277
+ # 🔴 DIE LAUFZEITFASSUNG DES PACKS IST GERENDERT, NICHT KOPIERT (D-244).
278
+ # `claude-code` wertet fuer Regeldateien nur `paths` aus (K-18); das
279
+ # Quellfrontmatter traegt `description` und `trigger`, und ein `cp` hat am
280
+ # Messbaum von Buendel 5 ZWEI Validatorfehler erzeugt.
281
+ rolle = os.path.join(BAUM, ".claude", "rules",
282
+ "30-role-requirements-engineering.md")
283
+ if not os.path.isfile(rolle):
284
+ raise SystemExit("ABBRUCH: die Rollenregel steht nicht in der Regelablage")
285
+ kopf = lies(rolle)[:400]
286
+ if "trigger:" in kopf or "description:" in kopf:
287
+ raise SystemExit("ABBRUCH: die Laufzeitfassung traegt noch das "
288
+ "Quellfrontmatter - sie ist KOPIERT statt gerendert "
289
+ "(D-244)")
290
+ print("Rollenregel: gerendert, kein Quellfrontmatter (D-244)")
291
+
292
+ for kennung, verboten in VERBOTEN_DATEI:
293
+ if os.path.exists(os.path.join(BAUM, verboten)):
294
+ raise SystemExit("ABBRUCH: %s liegt im Basisbaum (%s). Die je Meszbaum "
295
+ "gesetzten Praeparationen gehoeren in den Baum der "
296
+ "Zelle, die sie braucht - eine, die stehen bleibt, "
297
+ "ist ab dem naechsten Lauf ein unerklaerter Befund"
298
+ % (kennung, verboten))
299
+ print("UEB-30 nicht gesetzt (Wertzeile traegt ihren Wert), UEB-31 nicht im "
300
+ "Basisbaum")
301
+
302
+ # --- 6. Das Pruefmittel muss im Messbaum LAUFEN - vor dem Messtag -----------
303
+ # 🔴 GELESEN WIRD DIE AUSGABE, NICHT DER EXITWERT. `validate-output.py` gibt
304
+ # in allen drei Faellen denselben - "die Ausgabe ist falsch", "der Skill ist
305
+ # nicht installiert" und "kein Pack im Baum" sind daran nicht zu
306
+ # unterscheiden (Befund von 0.81.0). Der Waechter liest deshalb die
307
+ # Ergebniszeile und schliesst eine FEHLER-Zeile aus.
308
+ pruef = subprocess.run(
309
+ [sys.executable,
310
+ os.path.join(BAUM, ".koolie/core", "tests", "scripts",
311
+ "validate-output.py"),
312
+ "--skill", "role-re-ticket", "--root", BAUM],
313
+ input="", capture_output=True, text=True, encoding="utf-8",
314
+ errors="replace", env=dict(os.environ, PYTHONIOENCODING="utf-8"))
315
+ aus = (pruef.stdout or "") + (pruef.stderr or "")
316
+ if "FEHLER" in aus:
317
+ print(aus[-1500:])
318
+ raise SystemExit("ABBRUCH: das Pruefmittel findet den Skill im Messbaum "
319
+ "nicht - es ist das zweite Pruefmittel von RE-001-P01, "
320
+ "und es gehoert VOR den Messtag gefahren (0.68.0)")
321
+ if "(Skill role-re-ticket)" not in aus:
322
+ print(aus[-1500:])
323
+ raise SystemExit("ABBRUCH: das Pruefmittel hat keine Ergebniszeile "
324
+ "geliefert - ohne sie ist sein Exitwert keine Aussage")
325
+ ergebniszeile = [z for z in aus.splitlines() if z.startswith("Ergebnis:")]
326
+ print("Pruefmittel im Messbaum: %s (Exit %d, gegen leere Eingabe - die "
327
+ "Befunde sind erwartet, die Ergebniszeile ist der Messwert)"
328
+ % (ergebniszeile[0] if ergebniszeile else "?", pruef.returncode))
329
+
330
+ # --- 7. Die WERKZEUGAUSSTATTUNG gegen das Overlay (K-89, D-256) -------------
331
+ # 🔴 DER WAECHTER NENNT, ER BRICHT NICHT AB. Die Quelle der Abweichung liegt
332
+ # ausserhalb jedes Baums - in der Benutzerkonfiguration des Arbeitsplatzes -,
333
+ # und ein Messaufbau, der sie abschaltet, misst eine Umgebung, die es sonst
334
+ # nicht gibt. Gemessen am Messtag von Buendel 5: 19 von 30 Laeufen melden den
335
+ # Widerspruch, NULL ruft ein MCP-Werkzeug auf.
336
+ mcp = subprocess.run(
337
+ [sys.executable, os.path.join(HIER, "mcp-waechter.py"), "vorher", BAUM],
338
+ capture_output=True, text=True, encoding="utf-8", errors="replace",
339
+ env=dict(os.environ, PYTHONIOENCODING="utf-8"))
340
+ print()
341
+ print((mcp.stdout or "").rstrip())
342
+ if mcp.returncode != 0:
343
+ print((mcp.stderr or "")[-800:])
344
+ raise SystemExit("ABBRUCH: der MCP-Waechter selbst ist gescheitert - ein "
345
+ "Waechter, der nicht laeuft, sagt nicht 'kein Befund' "
346
+ "(D-229)")
347
+ print()
348
+
349
+ if os.path.exists(os.path.join(BAUM, ".git")):
350
+ raise SystemExit("ABBRUCH: der Basisbaum traegt ein .git - die Historie "
351
+ "gehoert je Zelle gebaut, NACH dem Packwechsel (D-213)")
352
+ if os.path.isdir(os.path.join(BAUM, "frontend", "node_modules")):
353
+ raise SystemExit("ABBRUCH: node_modules im Basisbaum - Buendel 5 misst "
354
+ "einen rein lesenden Skill ohne Testbefehl (E2)")
355
+
356
+ print("basis deny=%d ask=%d allow=%d | Skills: %d | kein .git, kein "
357
+ "node_modules" % (len(p["deny"]), len(p["ask"]), len(p["allow"]),
358
+ len(im_baum)))
359
+ print("OK")
360
+
361
+
362
+ if __name__ == "__main__":
363
+ main()
@@ -0,0 +1,74 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Zaehlt Kriterium 2 mit der Regel von Pruefung 46 selbst - Zelle fuer Zelle.
3
+
4
+ 🔴 DIE REGEL WIRD GETEILT, NICHT NACHGEBAUT (D-259). Bis 0.83.0 zerlegte dieses
5
+ Werkzeug eine Tabellenzeile mit `z.strip("|").split("|")` und kannte den MASKIERTEN
6
+ Zelltrenner `\\|` nicht; Pruefung 46 benutzt `tabellenzellen()` des Validators, und die
7
+ kennt ihn. Gemessen am 2026-09-22: An ZWEI Zellen gehen beide auseinander -
8
+ `RE-001-P04` (10 statt 8 Spalten) und `RE-001-N06` (11 statt 8). Beide standen auf
9
+ `bestanden`, und die Zaehlung stimmte deshalb - **aus dem falschen Grund**. Stuende eine
10
+ von ihnen auf `offen`, laese der naive Split ein Textfragment als Status und die Zelle
11
+ bliebe ungezaehlt: eine Null durch Konstruktion, die wie eine gemessene aussieht.
12
+
13
+ Ein Werkzeug, das dieselbe Regel anwenden soll wie eine Pruefung, teilt ihren Code -
14
+ sonst teilt es nur ihren Namen.
15
+ """
16
+ import importlib.util
17
+ import io, os, sys
18
+
19
+ import ablage
20
+
21
+ # Die Zellzerlegung von Pruefung 46 - geladen, nicht nachgebaut. Der Dateiname traegt
22
+ # einen Bindestrich und ist deshalb nicht importierbar; der Lader kennt keinen.
23
+ _VALIDATOR = os.path.join(ablage.WURZEL, ".koolie/core", "tests", "scripts",
24
+ "validate-framework.py")
25
+ _spec = importlib.util.spec_from_file_location("_vf46", _VALIDATOR)
26
+ _vf = importlib.util.module_from_spec(_spec)
27
+ _spec.loader.exec_module(_vf)
28
+
29
+ sys.stdout.reconfigure(encoding="utf-8")
30
+ ROOT = ablage.WURZEL # D-231: abgeleitet, nicht im Quelltext
31
+ KERN = os.path.join(ROOT, ".koolie/core")
32
+ AUSSER = ("build/", "CHANGELOG.md", "governance/change-requests/", "tests/protocols/")
33
+
34
+ def read(p):
35
+ return io.open(p, encoding="utf-8", newline="").read().replace("\r\n", "\n")
36
+
37
+ def zellen(z):
38
+ """Die Zellen einer Tabellenzeile - mit der Funktion, die Pruefung 46 benutzt."""
39
+ return _vf.tabellenzellen(z)
40
+
41
+ def offen(text, praefix, rel):
42
+ treffer = []
43
+ for i, zeile in enumerate(text.split("\n"), 1):
44
+ z = zeile.strip()
45
+ if not z.startswith(praefix) or z.startswith("|---"):
46
+ continue
47
+ t = zellen(z)
48
+ if t and t[-1].startswith("offen"):
49
+ treffer.append((rel, i, t[0][:40]))
50
+ return treffer
51
+
52
+ alle = []
53
+ kat = os.path.join(KERN, "tests", "TEST_CATALOG.md")
54
+ alle += offen(read(kat), "| FW-", "tests/TEST_CATALOG.md")
55
+ k1 = len(alle)
56
+ for wurzel, _, dateien in os.walk(KERN):
57
+ for n in sorted(dateien):
58
+ if n != "TESTS.md":
59
+ continue
60
+ p = os.path.join(wurzel, n)
61
+ rel = os.path.relpath(p, KERN).replace(os.sep, "/")
62
+ if any(rel.startswith(a) for a in AUSSER):
63
+ continue
64
+ alle += offen(read(p), "| ", rel)
65
+ print("Katalog: %d | Testblaetter: %d | SUMME: %d" % (k1, len(alle) - k1, len(alle)))
66
+ print()
67
+ print("--- Zellen, deren erste Spalte KEINE SK-/FW-Kennung ist ---")
68
+ import re
69
+ n = 0
70
+ for rel, i, erste in alle:
71
+ if not re.match(r"^(SK|FW)-", erste):
72
+ n += 1
73
+ print(" %-52s Zeile %-4d erste Spalte: %r" % (rel, i, erste))
74
+ print(" ->", n, "Stueck")
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Abgeleitet aus der Erhebung b3 mit 0.78.0 (CR-2026-105, D-212): Dieses
3
+ # Skript kennt keine Zelle, nur den Basispfad - es ist die Haelfte des
4
+ # Apparats, die den Gegenstand kennt. Geaendert wurde ausschliesslich
5
+ # C:\\lw-b3 -> C:\\lw-b4.
6
+ """Nimmt den Zustand der Messbaeume unter C:\\lw-b4 auf und vergleicht zwei Aufnahmen.
7
+
8
+ python zustand-b4.py vorher
9
+ python zustand-b4.py nachher
10
+
11
+ 🔴 ANDERS ALS IN BUENDEL 1 UND 2 ist eine Veraenderung hier der MESSWERT, nicht
12
+ der Befund: Alle drei Skills dieses Buendels schreiben. Die Aufnahme sagt je
13
+ Baum, WAS ein Lauf geaendert hat - und damit, ob ein Negativfall wirklich nichts
14
+ angefasst hat. Ein Bericht ist keine Aufzeichnung.
15
+
16
+ `frontend/node_modules` bleibt aussen vor - es ist in jedem Baum dieselbe
17
+ Verzeichnisverbindung. Dass kein Lauf dorthin geschrieben hat, belegt
18
+ `node-waechter.py` ueber Dateizahl und Groesse des gemeinsamen Bestands.
19
+ """
20
+ import hashlib
21
+ import io
22
+ import json
23
+ import os
24
+ import sys
25
+
26
+ import ablage
27
+
28
+ sys.stdout.reconfigure(encoding="utf-8")
29
+
30
+ HIER = ablage.erhebung()
31
+ B = r"C:\lw-b4"
32
+ TEILE = [os.path.join("frontend", "src"), os.path.join("backend", "src"),
33
+ "api-contracts", "docs", ".claude", ".koolie/core", ".github",
34
+ "CLAUDE.md", "README.md"]
35
+
36
+
37
+ def aufnehmen():
38
+ d = {}
39
+ for baum in sorted(os.listdir(B)):
40
+ w = os.path.join(B, baum)
41
+ if not os.path.isdir(w) or baum.startswith("basis"):
42
+ continue
43
+ for teil in TEILE:
44
+ wurzel = os.path.join(w, teil)
45
+ if os.path.isfile(wurzel):
46
+ rel = baum + "/" + teil.replace("\\", "/")
47
+ d[rel] = hashlib.sha1(io.open(wurzel, "rb").read()).hexdigest()
48
+ continue
49
+ for pfad, dirs, dateien in os.walk(wurzel):
50
+ dirs[:] = sorted(x for x in dirs
51
+ if x not in ("__pycache__", "node_modules"))
52
+ for name in sorted(dateien):
53
+ voll = os.path.join(pfad, name)
54
+ rel = baum + "/" + os.path.relpath(voll, w).replace("\\", "/")
55
+ d[rel] = hashlib.sha1(io.open(voll, "rb").read()).hexdigest()
56
+ return d
57
+
58
+
59
+ was = sys.argv[1]
60
+ ziel = os.path.join(HIER, "zustand-%s.json" % was)
61
+ jetzt = aufnehmen()
62
+ io.open(ziel, "wb").write(json.dumps(jetzt, ensure_ascii=False, indent=1).encode("utf-8"))
63
+ baeume = len({k.split("/")[0] for k in jetzt})
64
+ print("%s: %d Dateien in %d Baeumen" % (was, len(jetzt), baeume))
65
+
66
+ vorher_pfad = os.path.join(HIER, "zustand-vorher.json")
67
+ if was == "nachher" and os.path.isfile(vorher_pfad):
68
+ vorher = json.load(io.open(vorher_pfad, encoding="utf-8"))
69
+ neu = sorted(set(jetzt) - set(vorher))
70
+ fort = sorted(set(vorher) - set(jetzt))
71
+ anders = sorted(k for k in set(jetzt) & set(vorher) if jetzt[k] != vorher[k])
72
+ print("neu: %d | entfernt: %d | veraendert: %d" % (len(neu), len(fort), len(anders)))
73
+ je_baum = {}
74
+ for k in neu + fort + anders:
75
+ je_baum.setdefault(k.split("/")[0], []).append(k)
76
+ for baum in sorted(je_baum):
77
+ print(" %-12s %d Datei(en)" % (baum, len(je_baum[baum])))
78
+ for k in je_baum[baum]:
79
+ art = "neu" if k in neu else ("entfernt" if k in fort else "geaendert")
80
+ print(" %-10s %s" % (art, k.split("/", 1)[1]))
81
+ unberuehrt = sorted({k.split("/")[0] for k in jetzt} - set(je_baum))
82
+ print("Unberuehrt geblieben (%d): %s" % (len(unberuehrt), ", ".join(unberuehrt)))
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Abgeleitet aus der Erhebung b4 mit 0.83.0 (CR-2026-116): Dieses
3
+ # Skript kennt keine Zelle, nur den Basispfad - es ist die Haelfte des
4
+ # Apparats, die den Gegenstand NICHT kennt. Geaendert wurde ausschliesslich
5
+ # C:\\lw-b4 -> C:\\lw-b5 und die Nennung der Nachbarwerkzeuge.
6
+ """Nimmt den Zustand der Messbaeume unter C:\\lw-b5 auf und vergleicht zwei Aufnahmen.
7
+
8
+ python zustand-b5.py vorher
9
+ python zustand-b5.py nachher
10
+
11
+ 🔴 ANDERS ALS IN BUENDEL 3 UND 4 ist eine Veraenderung hier ein BEFUND, kein
12
+ Messwert. `role-re-ticket` ist M1 und traegt `deny` auf `edit` und `exec`; er
13
+ liefert einen Textentwurf und schreibt nichts. Die Aufnahme belegt genau das -
14
+ und `RE-001-N03` haengt daran. Ein Bericht ist keine Aufzeichnung.
15
+
16
+ Buendel 5 hat KEINE Verzeichnisverbindung auf `node_modules` (E2 von
17
+ CR-2026-116); der Ausschluss unten bleibt trotzdem stehen, weil er nichts
18
+ kostet und ein spaeteres Buendel ihn wieder braucht.
19
+ """
20
+ import hashlib
21
+ import io
22
+ import json
23
+ import os
24
+ import sys
25
+
26
+ import ablage
27
+
28
+ sys.stdout.reconfigure(encoding="utf-8")
29
+
30
+ HIER = ablage.erhebung()
31
+ B = r"C:\lw-b5"
32
+ TEILE = [os.path.join("frontend", "src"), os.path.join("backend", "src"),
33
+ "api-contracts", "docs", ".claude", ".koolie/core", ".github",
34
+ "CLAUDE.md", "README.md"]
35
+
36
+
37
+ def aufnehmen():
38
+ d = {}
39
+ for baum in sorted(os.listdir(B)):
40
+ w = os.path.join(B, baum)
41
+ if not os.path.isdir(w) or baum.startswith("basis"):
42
+ continue
43
+ for teil in TEILE:
44
+ wurzel = os.path.join(w, teil)
45
+ if os.path.isfile(wurzel):
46
+ rel = baum + "/" + teil.replace("\\", "/")
47
+ d[rel] = hashlib.sha1(io.open(wurzel, "rb").read()).hexdigest()
48
+ continue
49
+ for pfad, dirs, dateien in os.walk(wurzel):
50
+ dirs[:] = sorted(x for x in dirs
51
+ if x not in ("__pycache__", "node_modules"))
52
+ for name in sorted(dateien):
53
+ voll = os.path.join(pfad, name)
54
+ rel = baum + "/" + os.path.relpath(voll, w).replace("\\", "/")
55
+ d[rel] = hashlib.sha1(io.open(voll, "rb").read()).hexdigest()
56
+ return d
57
+
58
+
59
+ was = sys.argv[1]
60
+ ziel = os.path.join(HIER, "zustand-%s.json" % was)
61
+ jetzt = aufnehmen()
62
+ io.open(ziel, "wb").write(json.dumps(jetzt, ensure_ascii=False, indent=1).encode("utf-8"))
63
+ baeume = len({k.split("/")[0] for k in jetzt})
64
+ print("%s: %d Dateien in %d Baeumen" % (was, len(jetzt), baeume))
65
+
66
+ vorher_pfad = os.path.join(HIER, "zustand-vorher.json")
67
+ if was == "nachher" and os.path.isfile(vorher_pfad):
68
+ vorher = json.load(io.open(vorher_pfad, encoding="utf-8"))
69
+ neu = sorted(set(jetzt) - set(vorher))
70
+ fort = sorted(set(vorher) - set(jetzt))
71
+ anders = sorted(k for k in set(jetzt) & set(vorher) if jetzt[k] != vorher[k])
72
+ print("neu: %d | entfernt: %d | veraendert: %d" % (len(neu), len(fort), len(anders)))
73
+ je_baum = {}
74
+ for k in neu + fort + anders:
75
+ je_baum.setdefault(k.split("/")[0], []).append(k)
76
+ for baum in sorted(je_baum):
77
+ print(" %-12s %d Datei(en)" % (baum, len(je_baum[baum])))
78
+ for k in je_baum[baum]:
79
+ art = "neu" if k in neu else ("entfernt" if k in fort else "geaendert")
80
+ print(" %-10s %s" % (art, k.split("/", 1)[1]))
81
+ unberuehrt = sorted({k.split("/")[0] for k in jetzt} - set(je_baum))
82
+ print("Unberuehrt geblieben (%d): %s" % (len(unberuehrt), ", ".join(unberuehrt)))