@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,277 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Fuellt die claude-code-Installation der Messumgebung mit den Overlay-Werten.
3
+
4
+ Aufruf: python cc-overlay-fuellen.py <zielverzeichnis>
5
+
6
+ NEU MIT S5 (Lehre aus 0.65.0): Die Werte werden aus dem QUELL-OVERLAY des
7
+ Uebungsrepositoriums ABGELEITET, nicht im Skript gepflegt. Die Vorgaengerfassung
8
+ fuehrte eine Handliste, in der `.github/**` stand, obwohl das Uebungs-Overlay seit
9
+ 0.63.0 `.github/workflows/**` sagt - genau die Drift, die 0.65.0 in den
10
+ Laufzeittraegern gefunden hat.
11
+
12
+ Marken, Wurzeln und Namenslisten gehoeren abgeleitet, nicht gepflegt.
13
+
14
+ Zwei Quellen, beide versioniert:
15
+
16
+ 1. `.koolie/project-overlay/OVERLAY.md` - die QUELLE. Aus ihren Tabellen (Abschnitt 4
17
+ und 5) kommen die sechs Platzhalterwerte.
18
+ 2. `.devin/config.json` - die BINDENDE Schicht des Uebungsrepositoriums.
19
+ Aus ihr kommen die projekteigenen `Write`-Verbote, die der Kern gar nicht
20
+ erzeugt (Nur-Lese-Pfade, Abhaengigkeitsdateien). Sie werden auf `Edit(...)`
21
+ abgebildet, weil `claude-code` und `devin-desktop` zwei Namensraeume sind.
22
+
23
+ Jede Ersetzung bricht bei abweichender Trefferzahl ab; geschrieben wird erst am Ende.
24
+ """
25
+ import io
26
+ import json
27
+ import os
28
+ import re
29
+ import sys
30
+
31
+ import ablage
32
+
33
+ sys.stdout.reconfigure(encoding="utf-8")
34
+
35
+ CC = os.path.abspath(sys.argv[1])
36
+ DD = ablage.uebungsrepositorium() # D-231: gesagt, nicht im Quelltext
37
+
38
+ OVERLAY = os.path.join(DD, ".koolie/project-overlay", "OVERLAY.md")
39
+ DEVIN_CONF = os.path.join(DD, ".devin", "config.json")
40
+
41
+
42
+ # --- 1. Werte aus der QUELLE ableiten ---------------------------------------------
43
+ def zellen(zeile):
44
+ if not zeile.startswith("|"):
45
+ return None
46
+ teile = zeile.split("|")
47
+ return [t.strip() for t in teile[1:-1]]
48
+
49
+
50
+ def werte_aus_overlay(text):
51
+ """Platzhaltername -> Liste der Werte, aus jeder Tabellenzeile, die ihn fuehrt.
52
+
53
+ Gelesen wird die Zelle RECHTS von der Platzhalterzelle - in Abschnitt 4 heisst
54
+ sie `Wert`, in Abschnitt 5 `Befehl`. Der Zuschnitt haengt an der STELLUNG, nicht
55
+ an der Ueberschrift.
56
+ """
57
+ gefunden = {}
58
+ for zeile in text.replace("\r\n", "\n").split("\n"):
59
+ z = zellen(zeile)
60
+ if not z or len(z) < 3:
61
+ continue
62
+ for i, zelle in enumerate(z[:-1]):
63
+ m = re.fullmatch(r"`(<[A-Z_]+>)`", zelle)
64
+ if not m:
65
+ continue
66
+ name = m.group(1)
67
+ wertzelle = z[i + 1]
68
+ werte = re.findall(r"`([^`]+)`", wertzelle)
69
+ if not werte:
70
+ continue
71
+ if name in gefunden:
72
+ raise SystemExit("ABBRUCH: %s steht in zwei Tabellenzeilen" % name)
73
+ gefunden[name] = werte
74
+ return gefunden
75
+
76
+
77
+ overlay_text = io.open(OVERLAY, encoding="utf-8", newline="").read()
78
+ WERTE = werte_aus_overlay(overlay_text)
79
+
80
+ GEBRAUCHT = ["<EXCLUDED_PATHS>", "<CI_CONFIG_PATHS>", "<QUALITY_GATE_CONFIG_PATHS>",
81
+ "<BUILD_COMMAND>", "<TEST_COMMAND>", "<LINT_COMMAND>",
82
+ # K-154 (D-407): Seit 1.5.0 fuehrt der Kern den Schlitz `write <READ_ONLY_PATHS>`,
83
+ # in dieser Berechtigungsdatei `Edit(<READ_ONLY_PATHS>)`. Bis 1.11.0 entfaltete
84
+ # das Skript ihn nicht und brach mit "Platzhalter uebrig" ab.
85
+ "<READ_ONLY_PATHS>"]
86
+ fehlt = [n for n in GEBRAUCHT if n not in WERTE]
87
+ if fehlt:
88
+ raise SystemExit("ABBRUCH: im Quell-Overlay nicht gefunden: %r" % fehlt)
89
+ for name in GEBRAUCHT:
90
+ print("aus OVERLAY.md: %-30s %s" % (name, ", ".join(WERTE[name])))
91
+
92
+
93
+ # --- 2. settings.json -------------------------------------------------------------
94
+ def entfalte(liste, marke, werte, huelle):
95
+ """Ersetzt genau einen Eintrag huelle(marke) durch huelle(w) je Wert."""
96
+ ziel = huelle % marke
97
+ if liste.count(ziel) != 1:
98
+ raise SystemExit("ABBRUCH: %r steht %dx statt 1x" % (ziel, liste.count(ziel)))
99
+ i = liste.index(ziel)
100
+ return liste[:i] + [huelle % w for w in werte] + liste[i + 1:]
101
+
102
+
103
+ pfad = os.path.join(CC, ".claude", "settings.json")
104
+ _roh_settings = io.open(pfad, encoding="utf-8", newline="").read()
105
+ CRLF_SETTINGS = "\r\n" in _roh_settings
106
+ d = json.loads(_roh_settings)
107
+ p = d["permissions"]
108
+
109
+ p["deny"] = entfalte(p["deny"], "<EXCLUDED_PATHS>", WERTE["<EXCLUDED_PATHS>"], "Read(%s)")
110
+ p["deny"] = entfalte(p["deny"], "<EXCLUDED_PATHS>", WERTE["<EXCLUDED_PATHS>"], "Edit(%s)")
111
+ p["deny"] = entfalte(p["deny"], "<CI_CONFIG_PATHS>", WERTE["<CI_CONFIG_PATHS>"], "Edit(%s)")
112
+ p["deny"] = entfalte(p["deny"], "<QUALITY_GATE_CONFIG_PATHS>",
113
+ WERTE["<QUALITY_GATE_CONFIG_PATHS>"], "Edit(%s)")
114
+ p["deny"] = entfalte(p["deny"], "<READ_ONLY_PATHS>", WERTE["<READ_ONLY_PATHS>"], "Edit(%s)")
115
+ # Seit 1.18.2 fuehrt das Pack ZWEI Befehlswerkzeuge (D-469). Hier stand nur die Huelle
116
+ # 'Bash(%s)', und das Skript brach beim ersten Baumbau danach mit "Platzhalter uebrig:
117
+ # PowerShell(<BUILD_COMMAND>)" ab (1.19.0, gemessen). Die Huellen werden deshalb aus dem
118
+ # Korb abgeleitet: jedes Werkzeug, das den Schlitz traegt.
119
+ for _schlitz in ("<BUILD_COMMAND>", "<TEST_COMMAND>", "<LINT_COMMAND>"):
120
+ _huellen = sorted({e.split("(", 1)[0] for e in p["ask"] if e.endswith("(%s)" % _schlitz)})
121
+ if not _huellen:
122
+ raise SystemExit("ABBRUCH: %s steht in keiner Huelle des ask-Korbs" % _schlitz)
123
+ for _werkzeug in _huellen:
124
+ p["ask"] = entfalte(p["ask"], _schlitz, WERTE[_schlitz], _werkzeug + "(%s)")
125
+
126
+ # --- 3. Die projekteigenen Schreibverbote aus der BINDENDEN Schicht ----------------
127
+ # Gebraucht werden die Schreibverbote, die das PROJEKT eingetragen hat - die
128
+ # Nur-Lese-Pfade und die Abhaengigkeitsdateien. Die uebrigen Eintraege der
129
+ # devin-Berechtigungsdatei erzeugt der Kern selbst, und zwar unter den STRUKTURNAMEN
130
+ # des jeweiligen Packs (`AGENTS.md` gegen `CLAUDE.md`, `.devin/**` gegen `.claude/**`).
131
+ # Wer sie mitnimmt, traegt fremde Pfade in eine Berechtigungsdatei.
132
+ #
133
+ # Die Trennung wird ABGELEITET, nicht gepflegt: Eine frische devin-desktop-Installation
134
+ # in einem leeren Verzeichnis liefert genau den vom Kern erzeugten Bestand; was in der
135
+ # Projektdatei darueber hinaussteht, gehoert dem Projekt.
136
+ import shutil # noqa: E402
137
+ import subprocess # noqa: E402
138
+ import tempfile # noqa: E402
139
+
140
+ devin = json.loads(io.open(DEVIN_CONF, encoding="utf-8", newline="").read())
141
+ ref = tempfile.mkdtemp(prefix="lw-ref-")
142
+ try:
143
+ shutil.copytree(os.path.join(CC, ".koolie/core"), os.path.join(ref, ".koolie/core"))
144
+ r = subprocess.run([sys.executable, os.path.join(ref, ".koolie/core", "install.py"),
145
+ "--client", "devin-desktop", "--root", ref],
146
+ capture_output=True, text=True, encoding="utf-8", errors="replace")
147
+ if r.returncode != 0:
148
+ raise SystemExit("ABBRUCH: Referenzinstallation scheiterte:\n" + r.stdout[-1500:])
149
+ kern = json.loads(io.open(os.path.join(ref, ".devin", "config.json"),
150
+ encoding="utf-8", newline="").read())["permissions"]["deny"]
151
+ finally:
152
+ shutil.rmtree(ref, ignore_errors=True)
153
+
154
+ # Die Platzhalter der Referenz mit denselben Werten entfalten, sonst zaehlten
155
+ # `Write(<CI_CONFIG_PATHS>)` und sein entfalteter Wert als zwei verschiedene Regeln.
156
+ kern_entfaltet = []
157
+ for regel in kern:
158
+ m = re.fullmatch(r"(\w+)\((<[A-Z_]+>)\)", regel)
159
+ if m and m.group(2) in WERTE:
160
+ kern_entfaltet += ["%s(%s)" % (m.group(1), w) for w in WERTE[m.group(2)]]
161
+ else:
162
+ kern_entfaltet.append(regel)
163
+
164
+ eigen = [x for x in devin["permissions"]["deny"]
165
+ if x.startswith("Write(") and x not in kern_entfaltet]
166
+ print("Referenzinstallation devin-desktop: %d deny-Regeln vom Kern; "
167
+ "projekteigene Schreibverbote: %d" % (len(kern), len(eigen)))
168
+ nachgetragen = []
169
+ for x in eigen:
170
+ regel = "Edit(%s)" % re.fullmatch(r"Write\((.*)\)", x).group(1)
171
+ if regel not in p["deny"]:
172
+ p["deny"].append(regel)
173
+ nachgetragen.append(regel)
174
+ for r_ in nachgetragen:
175
+ print(" nachgetragen:", r_)
176
+
177
+ rest = [x for korb in ("deny", "ask", "allow") for x in p[korb] if "<" in x and ">" in x]
178
+ if rest:
179
+ raise SystemExit("ABBRUCH: Platzhalter uebrig: %r" % rest)
180
+
181
+ neu_settings = json.dumps(d, ensure_ascii=False, indent=2) + "\n"
182
+
183
+ # --- 4. Laufzeitfassung des Overlays ----------------------------------------------
184
+ quelle = io.open(os.path.join(DD, ".devin", "rules", "20-project-overlay.md"),
185
+ encoding="utf-8", newline="").read().replace("\r\n", "\n")
186
+ ziel_pfad = os.path.join(CC, ".claude", "rules", "20-project-overlay.md")
187
+ _roh_vorlage = io.open(ziel_pfad, encoding="utf-8", newline="").read()
188
+ CRLF_OVERLAY = "\r\n" in _roh_vorlage
189
+ vorlage = _roh_vorlage.replace("\r\n", "\n")
190
+
191
+ # Der Kopf ist clientabhaengig: devin-desktop traegt YAML-Frontmatter, claude-code
192
+ # einen Kommentarblock. Der Koerper ist inhaltlich identisch (sagt die Vorlage selbst).
193
+ kopf_ende = vorlage.index("# Project Overlay")
194
+ kopf = vorlage[:kopf_ende]
195
+ koerper = quelle[quelle.index("# Project Overlay"):]
196
+ if koerper.count(".devin/") < 1:
197
+ raise SystemExit("ABBRUCH: kein .devin/ im Koerper - Ersetzung wuerde nichts tun")
198
+ anzahl = koerper.count(".devin/")
199
+ koerper = koerper.replace(".devin/", ".claude/")
200
+ anzahl_agents = koerper.count("AGENTS.md")
201
+ koerper = koerper.replace("AGENTS.md", "CLAUDE.md")
202
+ neu_overlay = kopf + koerper
203
+
204
+ # --- 5. Waechter: der Wert der Quelle steht in der Laufzeitfassung -----------------
205
+ # Genau der Abgleich, den Pruefung 59 im Repositorium fuehrt - hier auf dem Messbaum,
206
+ # damit ein Meszaufbau nicht still den alten Wert traegt (Befund 0.65.0).
207
+ for wert in WERTE["<EXCLUDED_PATHS>"]:
208
+ if wert not in neu_overlay:
209
+ raise SystemExit("ABBRUCH: %r steht nicht in der Laufzeitfassung" % wert)
210
+ print("Waechter: alle %d Werte von <EXCLUDED_PATHS> stehen in der Laufzeitfassung"
211
+ % len(WERTE["<EXCLUDED_PATHS>"]))
212
+
213
+ # --- 6. Die Overlay-Regelerweiterungen (Ebene 5) und ihr Verweis im Manifest --------
214
+ # K-154 (D-407): Der Packwechsel laesst die Regelerweiterungen des Projekts zurueck
215
+ # (`K-44`) - im Uebungsrepositorium `21-overlay-coding-guidelines.md` unter `.devin/rules/`.
216
+ # Das Overlay-Manifest des Messbaums verwies danach mit `DOC-001` auf einen Pfad des Packs
217
+ # `devin-desktop`, und der Validator meldete im Nachlauf von 1.11.0 in jedem Baum einen
218
+ # Fehler, der nicht dem Lauf gehoerte. Die Erweiterung wird deshalb mit der Abbildung des
219
+ # Kerns (`render_rule`) in die Form dieses Packs gebracht, und der Verweis zieht mit.
220
+ import importlib.util # noqa: E402
221
+
222
+ sys.path.insert(0, os.path.join(CC, ".koolie", "core"))
223
+ _spec = importlib.util.spec_from_file_location(
224
+ "_install_cc", os.path.join(CC, ".koolie", "core", "install.py"))
225
+ _install = importlib.util.module_from_spec(_spec)
226
+ _spec.loader.exec_module(_install)
227
+ _man_cc = json.loads(io.open(os.path.join(CC, ".koolie", "core", "clients", "claude-code",
228
+ "manifest.json"), encoding="utf-8").read())
229
+ erweiterungen = {}
230
+ _dd_regeln = os.path.join(DD, ".devin", "rules")
231
+ for name in sorted(os.listdir(_dd_regeln)):
232
+ if not re.fullmatch(r"2[1-9]-overlay-[A-Za-z0-9_-]+\.md", name):
233
+ continue
234
+ roh = io.open(os.path.join(_dd_regeln, name), encoding="utf-8", newline="").read()
235
+ crlf = "\r\n" in roh
236
+ neu = _install.render_rule(roh.replace("\r\n", "\n"), _man_cc)
237
+ if crlf:
238
+ neu = neu.replace("\n", "\r\n")
239
+ erweiterungen[name] = neu
240
+
241
+ man_pfad = os.path.join(CC, ".koolie", "project-overlay", "overlay-manifest.yaml")
242
+ neu_man = io.open(man_pfad, encoding="utf-8", newline="").read()
243
+ for name in erweiterungen:
244
+ alt = ".devin/rules/" + name
245
+ if neu_man.count(alt) > 1:
246
+ raise SystemExit("ABBRUCH: %r steht %dx im Overlay-Manifest" % (alt, neu_man.count(alt)))
247
+ neu_man = neu_man.replace(alt, ".claude/rules/" + name)
248
+ # Gewacht wird ueber die VERWEISFELDER, nicht ueber jede Nennung: Die `notes` des
249
+ # Uebungs-Manifests nennen `.devin/rules/20-project-overlay.md` als Prosa, und ein
250
+ # Waechter ueber den ganzen Text brach beim ersten Probelauf daran ab.
251
+ rest_man = re.findall(r"rule_file:\s*[\"']?(\.devin/[^\s\"']+)", neu_man)
252
+ if rest_man:
253
+ raise SystemExit("ABBRUCH: Overlay-Manifest verweist weiter auf das Pack devin-desktop: %r"
254
+ % rest_man)
255
+
256
+ # --- 7. schreiben -----------------------------------------------------------------
257
+ # Die Zeilenenden der ueberschriebenen Dateien bleiben erhalten (K-154).
258
+ if CRLF_SETTINGS:
259
+ neu_settings = neu_settings.replace("\n", "\r\n")
260
+ if CRLF_OVERLAY:
261
+ neu_overlay = neu_overlay.replace("\n", "\r\n")
262
+ daten_s = neu_settings.encode("utf-8")
263
+ daten_o = neu_overlay.encode("utf-8")
264
+ daten_m = neu_man.encode("utf-8")
265
+ daten_e = {name: text.encode("utf-8") for name, text in erweiterungen.items()}
266
+ io.open(pfad, "wb").write(daten_s)
267
+ io.open(ziel_pfad, "wb").write(daten_o)
268
+ io.open(man_pfad, "wb").write(daten_m)
269
+ for name, daten in daten_e.items():
270
+ io.open(os.path.join(CC, ".claude", "rules", name), "wb").write(daten)
271
+ print("Regelerweiterung uebertragen:", name)
272
+ print("Zeilenenden erhalten: settings.json %s, 20-project-overlay.md %s"
273
+ % ("CRLF" if CRLF_SETTINGS else "LF", "CRLF" if CRLF_OVERLAY else "LF"))
274
+ print("settings.json: deny=%d ask=%d allow=%d" % (len(p["deny"]), len(p["ask"]), len(p["allow"])))
275
+ print("20-project-overlay.md: %d x .devin/ -> .claude/, %d x AGENTS.md -> CLAUDE.md"
276
+ % (anzahl, anzahl_agents))
277
+ print("OK")
@@ -0,0 +1,178 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Legt je Zelle von Buendel 4 EIN Dossier an - Erwartung und Beleg nebeneinander.
3
+
4
+ python dossier-b4.py
5
+
6
+ Ergebnis: `belege/dossier/SK-NNN-XNN.md`, neunzehn Dateien. Jede traegt
7
+
8
+ 1. die Zeile des Testblatts, Spalte fuer Spalte (Vorbedingung, Eingabe,
9
+ Erwartetes Verhalten, Unzulaessiges Verhalten, Ergebnisstatus),
10
+ 2. die Kennzahlen und Merkmale beider Laeufe aus der Auswertung,
11
+ 3. die vollstaendige Antwort des Haupt- und des Kontrollaufs.
12
+
13
+ 🔴 WARUM DAS EIN EIGENES WERKZEUG IST. Die Bewertung einer Zelle verlangt, die
14
+ Erwartung gegen den Beleg zu halten. Beides lag an drei verschiedenen Orten: die
15
+ Erwartung in einem der drei Testblaetter, die Kennzahlen in einer 328-Zeilen-Datei,
16
+ die Antwort in bis zu vier Belegdateien je Zelle. Wer so bewertet, blaettert - und
17
+ wer blaettert, vergleicht irgendwann aus dem Gedaechtnis.
18
+
19
+ ⚠️ Das Dossier BEWERTET NICHT. Es legt nebeneinander; das Urteil faellt ein Mensch
20
+ oder ein Lauf, der beides gelesen hat.
21
+ """
22
+ import io
23
+ import os
24
+ import re
25
+ import subprocess
26
+ import sys
27
+ import time
28
+
29
+ import ablage
30
+
31
+ sys.stdout.reconfigure(encoding="utf-8")
32
+
33
+ BELEGE = ablage.belege()
34
+ ZIEL = os.path.join(BELEGE, "dossier")
35
+ KERN = os.path.join(ablage.WURZEL, ".koolie/core") # D-231: abgeleitet
36
+ # 🔴 DIE AUSWERTUNG WIRD GEFAHREN, NICHT GESUCHT (D-232). Hier stand der
37
+ # Dateiname `auswertung-2026-09-20.log` - ein DATUM im Quelltext, und damit
38
+ # dieselbe Bauform wie die drei `--erwarte`-Sollwerte von D-225: Er stimmte
39
+ # fuer den Messtag, fuer den er geschrieben wurde, und fuer keinen danach. Der
40
+ # Nachlauf hat am 2026-09-21 ausgewertet, und dieses Werkzeug brach ab mit
41
+ # "erst auswerten-b4.py" - obwohl die Auswertung gefahren war.
42
+ #
43
+ # Ein Werkzeug, das die Ausgabe eines anderen beim Namen nennt, wartet auf
44
+ # den Tag, an dem jemand diesen Namen anders waehlt.
45
+ #
46
+ # Das Dossier faehrt die Auswertung deshalb SELBST und legt ihr Protokoll mit
47
+ # dem Datum DIESES Laufes neben die Belege. Damit kann ein Dossier auch nicht
48
+ # mehr aus einem alten Protokoll gebaut werden, ohne dass es auffaellt.
49
+ AUSWERTEN = os.path.join(os.path.dirname(os.path.abspath(__file__)),
50
+ "auswerten-b4.py")
51
+ AUSWERTUNG = os.path.join(BELEGE, "auswertung-%s.log"
52
+ % time.strftime("%Y-%m-%d"))
53
+
54
+ BLAETTER = {
55
+ "SK-010": "fw-review-support",
56
+ "SK-011": "fw-docs-update",
57
+ "SK-012": "fw-mr-description",
58
+ }
59
+ SPALTEN = ["Test-ID", "Ziel", "Vorbedingung", "Eingabe", "Erwartetes Verhalten",
60
+ "Unzulaessiges Verhalten", "Pruefmethode", "Ergebnisstatus"]
61
+
62
+
63
+ def lies(pfad):
64
+ return io.open(pfad, encoding="utf-8", newline="").read()
65
+
66
+
67
+ def blattzeilen():
68
+ """Je Zellenkennung die Spalten ihrer Zeile im Testblatt."""
69
+ zeilen = {}
70
+ for praefix, skill in BLAETTER.items():
71
+ pfad = os.path.join(KERN, "framework", "skills", skill, "TESTS.md")
72
+ for z in lies(pfad).splitlines():
73
+ if not z.startswith("| " + praefix + "-"):
74
+ continue
75
+ felder = [f.strip() for f in z.strip().strip("|").split(" | ")]
76
+ kennung = felder[0]
77
+ zeilen[kennung] = (skill, felder)
78
+ return zeilen
79
+
80
+
81
+ def auswertung_fahren():
82
+ """Faehrt `auswerten-b4.py` und legt sein Protokoll neben die Belege."""
83
+ umg = dict(os.environ, PYTHONIOENCODING="utf-8")
84
+ p = subprocess.run([sys.executable, AUSWERTEN], capture_output=True,
85
+ text=True, encoding="utf-8", errors="replace", env=umg)
86
+ text = (p.stdout or "") + (p.stderr or "")
87
+ if p.returncode != 0:
88
+ raise SystemExit("ABBRUCH: auswerten-b4.py endete mit Exit %d:%s%s"
89
+ % (p.returncode, chr(10), text[-1500:]))
90
+ io.open(AUSWERTUNG, "w", encoding="utf-8", newline="").write(text)
91
+ print("Auswertung gefahren:", AUSWERTUNG)
92
+ return text
93
+
94
+
95
+ def auswertungsbloecke():
96
+ """Je Zelle der Block aus Abschnitt 2 der Auswertung."""
97
+ text = auswertung_fahren()
98
+ bloecke = {}
99
+ teile = re.split(r"\n--- (SK-\d{3}-[A-Z]\d{2}) ", text)
100
+ for i in range(1, len(teile) - 1, 2):
101
+ kennung = teile[i]
102
+ rest = teile[i + 1]
103
+ ende = rest.find("\n--- ")
104
+ schnitt = rest if ende < 0 else rest[:ende]
105
+ ende2 = schnitt.find("\n====")
106
+ bloecke[kennung] = (schnitt if ende2 < 0 else schnitt[:ende2]).rstrip()
107
+ return bloecke
108
+
109
+
110
+ def laufkennungen(kennung):
111
+ """sk010p01 / ksk010p01, dazu die Turns, soweit es Belege gibt."""
112
+ kern = kennung.lower().replace("-", "")
113
+ namen = []
114
+ for vor in ("", "k"):
115
+ for anhang in ("t1", ""):
116
+ name = vor + kern + anhang
117
+ if os.path.isfile(os.path.join(BELEGE, name + "-antwort.md")):
118
+ namen.append(name)
119
+ return namen
120
+
121
+
122
+ def main():
123
+ os.makedirs(ZIEL, exist_ok=True)
124
+ zeilen = blattzeilen()
125
+ bloecke = auswertungsbloecke()
126
+ fehlend = sorted(set(zeilen) - set(bloecke))
127
+ gebaut = 0
128
+ for kennung in sorted(zeilen):
129
+ skill, felder = zeilen[kennung]
130
+ teile = ["# Dossier %s (`%s`)" % (kennung, skill), ""]
131
+ teile.append("> ⚠️ Dieses Dossier **bewertet nicht**. Es legt die Erwartung des "
132
+ "Testblatts neben den Beleg des Laufs.")
133
+ teile.append("")
134
+ teile.append("## 1. Die Zeile des Testblatts")
135
+ teile.append("")
136
+ teile.append("Quelle: `.koolie/core/framework/skills/%s/TESTS.md`" % skill)
137
+ teile.append("")
138
+ for name, wert in zip(SPALTEN, felder):
139
+ teile.append("**%s**" % name)
140
+ teile.append("")
141
+ teile.append(wert if wert else "*(leer)*")
142
+ teile.append("")
143
+ teile.append("## 2. Was gemessen wurde")
144
+ teile.append("")
145
+ teile.append("```")
146
+ teile.append(bloecke.get(kennung, "(kein Block in der Auswertung gefunden)"))
147
+ teile.append("```")
148
+ teile.append("")
149
+ teile.append("## 3. Die Antworten der Laeufe")
150
+ teile.append("")
151
+ namen = laufkennungen(kennung)
152
+ if not namen:
153
+ teile.append("🔴 **Keine Antwortdatei gefunden.**")
154
+ for name in namen:
155
+ art = "Kontrollauf" if name.startswith("k") else "Hauptlauf"
156
+ turn = " – zweiter Turn" if not name.endswith("t1") and (name + "t1") in namen \
157
+ else (" – erster Turn" if name.endswith("t1") else "")
158
+ teile.append("### %s `%s`%s" % (art, name, turn))
159
+ teile.append("")
160
+ teile.append(lies(os.path.join(BELEGE, name + "-antwort.md")).rstrip())
161
+ teile.append("")
162
+ io.open(os.path.join(ZIEL, kennung + ".md"), "w", encoding="utf-8",
163
+ newline="").write("\n".join(teile) + "\n")
164
+ gebaut += 1
165
+ print("%-12s %d Lauf/Laeufe, %6d Zeichen"
166
+ % (kennung, len(namen),
167
+ os.path.getsize(os.path.join(ZIEL, kennung + ".md"))))
168
+ print()
169
+ print("%d Dossiers unter %s" % (gebaut, ZIEL))
170
+ if fehlend:
171
+ print("🔴 OHNE Auswertungsblock:", ", ".join(fehlend))
172
+ else:
173
+ print("🟢 Jede Zelle hat eine Blattzeile UND einen Auswertungsblock.")
174
+ return 0
175
+
176
+
177
+ if __name__ == "__main__":
178
+ sys.exit(main())
@@ -0,0 +1,202 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Legt je Zelle von Buendel 5 EIN Dossier an - Erwartung und Beleg nebeneinander.
3
+
4
+ python dossier-b5.py
5
+
6
+ Ergebnis: `belege/dossier/RE-001-XNN.md`, fuenfzehn Dateien. Jede traegt
7
+
8
+ 1. die Zeile des Testblatts, Spalte fuer Spalte (Vorbedingung, Eingabe,
9
+ Erwartetes Verhalten, Unzulaessiges Verhalten, Ergebnisstatus),
10
+ 2. die Kennzahlen und Merkmale beider Laeufe aus der Auswertung,
11
+ 3. die vollstaendige Antwort des Haupt- und des Kontrollaufs.
12
+
13
+ 🔴 WARUM DAS EIN EIGENES WERKZEUG IST. Die Bewertung einer Zelle verlangt, die
14
+ Erwartung gegen den Beleg zu halten. Beides lag an drei verschiedenen Orten: die
15
+ Erwartung in einem der drei Testblaetter, die Kennzahlen in einer 328-Zeilen-Datei,
16
+ die Antwort in bis zu vier Belegdateien je Zelle. Wer so bewertet, blaettert - und
17
+ wer blaettert, vergleicht irgendwann aus dem Gedaechtnis.
18
+
19
+ ⚠️ Das Dossier BEWERTET NICHT. Es legt nebeneinander; das Urteil faellt ein Mensch
20
+ oder ein Lauf, der beides gelesen hat.
21
+ """
22
+ import io
23
+ import os
24
+ import re
25
+ import subprocess
26
+ import sys
27
+ import time
28
+
29
+ import ablage
30
+
31
+ sys.stdout.reconfigure(encoding="utf-8")
32
+
33
+ BELEGE = ablage.belege()
34
+ ZIEL = os.path.join(BELEGE, "dossier")
35
+ KERN = os.path.join(ablage.WURZEL, ".koolie/core") # D-231: abgeleitet
36
+ # 🔴 DIE AUSWERTUNG WIRD GEFAHREN, NICHT GESUCHT (D-232). Hier stand der
37
+ # Dateiname `auswertung-2026-09-20.log` - ein DATUM im Quelltext, und damit
38
+ # dieselbe Bauform wie die drei `--erwarte`-Sollwerte von D-225: Er stimmte
39
+ # fuer den Messtag, fuer den er geschrieben wurde, und fuer keinen danach. Der
40
+ # Nachlauf hat am 2026-09-21 ausgewertet, und dieses Werkzeug brach ab mit
41
+ # "erst auswerten-b4.py" - obwohl die Auswertung gefahren war.
42
+ #
43
+ # Ein Werkzeug, das die Ausgabe eines anderen beim Namen nennt, wartet auf
44
+ # den Tag, an dem jemand diesen Namen anders waehlt.
45
+ #
46
+ # Das Dossier faehrt die Auswertung deshalb SELBST und legt ihr Protokoll mit
47
+ # dem Datum DIESES Laufes neben die Belege. Damit kann ein Dossier auch nicht
48
+ # mehr aus einem alten Protokoll gebaut werden, ohne dass es auffaellt.
49
+ AUSWERTEN = os.path.join(os.path.dirname(os.path.abspath(__file__)),
50
+ "auswerten-b5.py")
51
+ AUSWERTUNG = os.path.join(BELEGE, "auswertung-%s.log"
52
+ % time.strftime("%Y-%m-%d"))
53
+
54
+ # 🔴 ABGELEITET STATT GEPFLEGT (D-237). `dossier-b4.py` fuehrt die Zuordnung
55
+ # Kennungspraefix -> Skill als Handliste UND setzt den Ablageort auf
56
+ # `framework/skills/<skill>/TESTS.md`. Beides ist fuer Buendel 5 falsch:
57
+ # `role-re-ticket` liegt unter `framework/role-packs/<pack>/skills/`, und
58
+ # eine Handliste haette den Ort nicht mitgefuehrt. `ablage.blaetter()` sucht
59
+ # jede `TESTS.md` des Frameworks und nimmt den Praefix aus der ERSTEN SPALTE
60
+ # ihrer Zeilen - aus dem Blatt selbst, nicht aus seinem Dateinamen.
61
+ SPALTEN = ["Test-ID", "Ziel", "Vorbedingung", "Eingabe", "Erwartetes Verhalten",
62
+ "Unzulaessiges Verhalten", "Pruefmethode", "Ergebnisstatus"]
63
+
64
+
65
+ def lies(pfad):
66
+ return io.open(pfad, encoding="utf-8", newline="").read()
67
+
68
+
69
+ def blattzeilen():
70
+ """Je Zellenkennung die Spalten ihrer Zeile im Testblatt - abgeleitet.
71
+
72
+ Der Ort des Blattes kommt aus `ablage.blaetter()`; gelesen werden nur die
73
+ Praefixe, die DIESE Erhebung misst (aus `auswerten-b5.PAARE`).
74
+ """
75
+ karte = ablage.blaetter()
76
+ zeilen = {}
77
+ for praefix, eintrag in karte.items():
78
+ pfad = os.path.join(ablage.WURZEL, eintrag["blatt"].replace("/", os.sep))
79
+ for z in lies(pfad).splitlines():
80
+ if not z.startswith("| " + praefix + "-"):
81
+ continue
82
+ felder = [f.strip() for f in z.strip().strip("|").split(" | ")]
83
+ zeilen[felder[0]] = (eintrag["skill"], felder)
84
+ return {k: v for k, v in zeilen.items() if k in GEMESSEN}
85
+
86
+
87
+ def auswertung_fahren():
88
+ """Faehrt `auswerten-b4.py` und legt sein Protokoll neben die Belege."""
89
+ umg = dict(os.environ, PYTHONIOENCODING="utf-8")
90
+ p = subprocess.run([sys.executable, AUSWERTEN], capture_output=True,
91
+ text=True, encoding="utf-8", errors="replace", env=umg)
92
+ text = (p.stdout or "") + (p.stderr or "")
93
+ if p.returncode != 0:
94
+ raise SystemExit("ABBRUCH: auswerten-b5.py endete mit Exit %d:%s%s"
95
+ % (p.returncode, chr(10), text[-1500:]))
96
+ io.open(AUSWERTUNG, "w", encoding="utf-8", newline="").write(text)
97
+ print("Auswertung gefahren:", AUSWERTUNG)
98
+ return text
99
+
100
+
101
+ def auswertungsbloecke():
102
+ """Je Zelle der Block aus Abschnitt 2 der Auswertung."""
103
+ text = auswertung_fahren()
104
+ bloecke = {}
105
+ # Die Kennungsfamilie als FORM, nicht woertlich (D-246).
106
+ teile = re.split(r"\n--- ([A-Z]{2,3}-\d{3}-[PN]\d{2}) ", text)
107
+ for i in range(1, len(teile) - 1, 2):
108
+ kennung = teile[i]
109
+ rest = teile[i + 1]
110
+ ende = rest.find("\n--- ")
111
+ schnitt = rest if ende < 0 else rest[:ende]
112
+ ende2 = schnitt.find("\n====")
113
+ bloecke[kennung] = (schnitt if ende2 < 0 else schnitt[:ende2]).rstrip()
114
+ return bloecke
115
+
116
+
117
+ def laufkennungen(kennung):
118
+ """sk010p01 / ksk010p01, dazu die Turns, soweit es Belege gibt."""
119
+ kern = kennung.lower().replace("-", "")
120
+ namen = []
121
+ for vor in ("", "k"):
122
+ for anhang in ("t1", ""):
123
+ name = vor + kern + anhang
124
+ if os.path.isfile(os.path.join(BELEGE, name + "-antwort.md")):
125
+ namen.append(name)
126
+ return namen
127
+
128
+
129
+ # Die Zellen DIESER Erhebung - gefragt, nicht nachgebaut. Ein Verzeichnis ist
130
+ # kein Zuschnitt (D-230), und ein Testblatt auch nicht: `RE-001` hat fuenfzehn
131
+ # Zeilen, und der Zuschnitt einer Erhebung koennte weniger messen.
132
+ def _gemessene_zellen():
133
+ import importlib.util
134
+ pfad = os.path.join(os.path.dirname(os.path.abspath(__file__)),
135
+ "auswerten-b5.py")
136
+ spec = importlib.util.spec_from_file_location("lw_auswerten_b5", pfad)
137
+ modul = importlib.util.module_from_spec(spec)
138
+ spec.loader.exec_module(modul)
139
+ return {z for z, _h, _k, _kb in modul.PAARE}
140
+
141
+
142
+ GEMESSEN = _gemessene_zellen()
143
+
144
+
145
+ def main():
146
+ os.makedirs(ZIEL, exist_ok=True)
147
+ zeilen = blattzeilen()
148
+ bloecke = auswertungsbloecke()
149
+ fehlend = sorted(set(zeilen) - set(bloecke))
150
+ gebaut = 0
151
+ for kennung in sorted(zeilen):
152
+ skill, felder = zeilen[kennung]
153
+ teile = ["# Dossier %s (`%s`)" % (kennung, skill), ""]
154
+ teile.append("> ⚠️ Dieses Dossier **bewertet nicht**. Es legt die Erwartung des "
155
+ "Testblatts neben den Beleg des Laufs.")
156
+ teile.append("")
157
+ teile.append("## 1. Die Zeile des Testblatts")
158
+ teile.append("")
159
+ teile.append("Quelle: `%s`" % ablage.blaetter()[
160
+ "-".join(kennung.split("-")[:2])]["blatt"])
161
+ teile.append("")
162
+ for name, wert in zip(SPALTEN, felder):
163
+ teile.append("**%s**" % name)
164
+ teile.append("")
165
+ teile.append(wert if wert else "*(leer)*")
166
+ teile.append("")
167
+ teile.append("## 2. Was gemessen wurde")
168
+ teile.append("")
169
+ teile.append("```")
170
+ teile.append(bloecke.get(kennung, "(kein Block in der Auswertung gefunden)"))
171
+ teile.append("```")
172
+ teile.append("")
173
+ teile.append("## 3. Die Antworten der Laeufe")
174
+ teile.append("")
175
+ namen = laufkennungen(kennung)
176
+ if not namen:
177
+ teile.append("🔴 **Keine Antwortdatei gefunden.**")
178
+ for name in namen:
179
+ art = "Kontrollauf" if name.startswith("k") else "Hauptlauf"
180
+ turn = " – zweiter Turn" if not name.endswith("t1") and (name + "t1") in namen \
181
+ else (" – erster Turn" if name.endswith("t1") else "")
182
+ teile.append("### %s `%s`%s" % (art, name, turn))
183
+ teile.append("")
184
+ teile.append(lies(os.path.join(BELEGE, name + "-antwort.md")).rstrip())
185
+ teile.append("")
186
+ io.open(os.path.join(ZIEL, kennung + ".md"), "w", encoding="utf-8",
187
+ newline="").write("\n".join(teile) + "\n")
188
+ gebaut += 1
189
+ print("%-12s %d Lauf/Laeufe, %6d Zeichen"
190
+ % (kennung, len(namen),
191
+ os.path.getsize(os.path.join(ZIEL, kennung + ".md"))))
192
+ print()
193
+ print("%d Dossiers unter %s" % (gebaut, ZIEL))
194
+ if fehlend:
195
+ print("🔴 OHNE Auswertungsblock:", ", ".join(fehlend))
196
+ else:
197
+ print("🟢 Jede Zelle hat eine Blattzeile UND einen Auswertungsblock.")
198
+ return 0
199
+
200
+
201
+ if __name__ == "__main__":
202
+ sys.exit(main())