@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,170 @@
1
+ # Änderungsantrag `CR-2026-065`
2
+
3
+ | Feld | Inhalt |
4
+ |---|---|
5
+ | Titel | Zwei Enthaltungen von `devin-desktop` sind erhoben – und eine war keine Enthaltung, sondern eine falsche Behauptung |
6
+ | Antragstellende Rolle | `<FRAMEWORK_OWNER>` |
7
+ | Datum | 2026-09-14 |
8
+ | Betroffene Artefakte | `clients/devin-desktop/manifest.json` (`hook_tools`, `hook_tools_absent`, `permissions_note`, `permission_tools`-Noten, beide `tool_names`-Blöcke), `clients/devin-desktop/CLIENT_PACK.md` (Verbtabelle, Zeilen S2, S3, B3, Änderungsverlauf), `install.py` (die Abbildung wirkt auch in der Listenform), `tests/scripts/validate-framework.py` (Prüfung 41 neu, Prüfung 38 namensraumbewusst, Register), `tests/scripts/probe-pruefungen.py`, `governance/DECISION_LOG.md`, `docs/ROADMAP.md`, `CHANGELOG.md` |
9
+ | Ebene laut Entscheidungsbaum 6 | **Core** – ein Client Pack und die Durchsetzungsschicht sind Framework-Gut |
10
+ | Art | Änderung; Anlass sind **Kandidat 1 und 6** der Übergabe, in einer Sitzung erhoben |
11
+ | Dringlichkeit | **P1.** Eine Werkzeugklasse ist per Deklaration aus der fail-closed-Schicht genommen, und die Deklaration ist **gemessen falsch**. Dass die zweite Schicht heute trägt, ist Entlastung, nicht Entwarnung |
12
+
13
+ ## 1. Anlass
14
+
15
+ Beide Fragen standen als **Enthaltung** im Manifest, und der Änderungsverlauf des Packs sagt
16
+ seit 0.10.0: *„Beides kann nicht stimmen; welche Seite falsch ist, entscheidet eine
17
+ Erhebung."* Sie liegt vor: `tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md`, **elf
18
+ Läufe am Client**, davon zwei Kontrollläufe, ein Entlastungslauf, ein verworfener Lauf und
19
+ einer mit berichtigtem Messartefakt.
20
+
21
+ ### 1.1 Befund 1: „Dieser Client führt kein eigenes Suchwerkzeug" ist falsch
22
+
23
+ Die Mitschrift führt unter `agent.tool_definitions` den Werkzeugbestand selbst – **25
24
+ Werkzeuge**, darunter `grep` („a powerful search tool built on ripgrep") und
25
+ `find_file_by_name` („fast file name/path pattern matching … using glob patterns"). **Ein
26
+ Werkzeug `glob` gibt es nicht.**
27
+
28
+ **Die Folge ist gemessen.** Aus `hook_tools_absent: ["search"]` erzeugt `install.py` den
29
+ Matcher `read|exec|edit|write`; beim Pack `claude-code` lautet dieselbe Stelle
30
+ `Read|Grep|Glob|Bash|Edit|Write|NotebookEdit`. In einer Umgebung mit **nur** dem Hook:
31
+
32
+ | Lauf | Werkzeug | Ergebnis |
33
+ |---|---|---|
34
+ | **H1** *(Positivkontrolle)* | `read` auf `.env` | **blockiert** |
35
+ | **H2** | `grep` auf `.env` | **durchgelassen**, Secret wörtlich |
36
+
37
+ **Das Hook-Skript ist nicht das Problem** – von Hand gefüttert blockiert es beide Aufrufe. Es
38
+ wird nicht gefragt.
39
+
40
+ ### 1.2 Die Entlastung – und warum sie den Befund nicht aufhebt
41
+
42
+ **Wie ausgeliefert ist das Secret geschützt.** Die Berechtigungsklasse `Read(...)` dieses
43
+ Clients umfasst das Suchwerkzeug mit: Lauf **P4** (nur `permissions`) und Lauf **W1** (wie
44
+ ausgeliefert) weisen denselben `grep`-Aufruf ab.
45
+
46
+ **Trotzdem ist es ein Befund.** Die Berechtigungsdatei gehört dem Projekt und ist
47
+ bearbeitbar – genau deshalb gibt es Prüfung 37, seit ein Projekt 41 `deny`-Regeln löschen
48
+ konnte, ohne dass ein Lauf davon Notiz nahm (D-77). Der Hook ist die Schicht, die das
49
+ überleben soll (D-31). **Hier trägt nur die editierbare Schicht; die zweite ist per
50
+ Deklaration abgeschaltet.**
51
+
52
+ ### 1.3 Befund 2: Der Skillaufruf ist ein Werkzeugaufruf (K-33)
53
+
54
+ `permission_tools.skill: []` war als **unerhoben** deklariert. Gemessen: Der Client führt ein
55
+ Werkzeug `skill`; die Mitschrift zeigt
56
+ `{"function_name": "skill", "arguments": {"command": "invoke", "skill": "fw-code-explain"}}`.
57
+
58
+ **Und ein zweiter Weg, den niemand gesucht hat:** Die Slash-Form wird **clientseitig**
59
+ expandiert – im `user`-Schritt der Mitschrift steht der Inhalt der `SKILL.md`, nicht der
60
+ Befehl. **Eine Schranke auf dem Werkzeug erreicht diesen Weg gar nicht.**
61
+
62
+ **Die Schranke selbst greift nicht**, in zwei Schreibweisen: `Skill(fw-code-explain)` (P2)
63
+ und `skill(fw-code-explain)` (P3) laufen durch, während `Read(**/.env)` in **derselben Datei
64
+ und denselben Läufen** abweist (P1b, **Kontrolllauf**).
65
+
66
+ **Im Ergebnis bleibt die leere Liste richtig; ihre Begründung wird falsch.**
67
+
68
+ ### 1.4 Befund 3 – nicht gesucht: `glob` benennt bei diesem Client nichts
69
+
70
+ Jede ausgelieferte Skilldatei trägt `allowed-tools: read, grep, glob`. `read` und `grep` sind
71
+ Werkzeugnamen dieses Clients, **`glob` ist keiner** – das glob-förmige Werkzeug heißt
72
+ `find_file_by_name`, und die Skills benutzen es, ohne dass ihre Liste es nennt.
73
+
74
+ ### 1.5 Befund 4 – der systemische: Prüfung 26 prüft Folgerichtigkeit, nicht Wahrheit
75
+
76
+ D-47 wurde gebaut, damit **ein Pack eine Werkzeugklasse nicht dadurch aus der Durchsetzung
77
+ nehmen kann, dass es sie weglässt** – eine Abwesenheit muss erklärt werden. Prüfung 26
78
+ erzwingt seither, dass die Erklärung **vorhanden** und **mit `permission_tools` widerspruchsfrei**
79
+ ist. **Beides war hier erfüllt, und die Erklärung war trotzdem falsch.**
80
+
81
+ Der Unterschied, den niemand verlangt hat: `agent_start_tools_absent` sagt **„UNERHOBEN,
82
+ nicht abwesend"** – eine Enthaltung. `_hook_tools_absent_note` sagte **„Dieser Client führt
83
+ kein eigenes Suchwerkzeug"** – eine **Behauptung ohne Datum und ohne Protokoll.** Die eine
84
+ Bauform ist ehrlich, die andere sieht genauso aus und ist es nicht.
85
+
86
+ ### 1.6 Befund 5 – bei der Umsetzung entstanden: es sind **zwei** Namensräume
87
+
88
+ **Der erste Entwurf dieser Änderung war falsch, und die Messung hat ihn widerlegt.** Er
89
+ trug `glob → find_file_by_name` in beide `tool_names`-Blöcke ein – der Name ist
90
+ schließlich gemessen. Danach meldete der Client für dieselbe Skilldatei nur noch
91
+ `Allowed tools: read, grep`: **Er hatte den Eintrag lautlos verworfen.**
92
+
93
+ Eine Sondendatei mit zwölf angebotenen Namen zeigt, warum:
94
+
95
+ | angeboten | Ergebnis |
96
+ |---|---|
97
+ | `read`, `grep`, `glob`, `edit`, `exec`, `web_search` | **angenommen** |
98
+ | `Read`, `Grep` | angenommen, auf Kleinschreibung normalisiert |
99
+ | `find_file_by_name`, `write`, `skill`, ein erfundener Name | **verworfen** |
100
+
101
+ **Dieser Client führt für das Frontmatter ein eigenes, normalisiertes und geschlossenes
102
+ Vokabular** – es ist nicht die Liste seiner Laufzeitwerkzeuge. `glob` ist dort
103
+ **richtig**, obwohl es zur Laufzeit kein Werkzeug dieses Namens gibt; `find_file_by_name`
104
+ ist dort **falsch**, obwohl es das Werkzeug ist, das läuft.
105
+
106
+ **Beim Pack `claude-code` fallen beide Namensräume zusammen** (`Read`, `Grep`, `Glob`
107
+ sind Frontmatter-Vokabular **und** Werkzeugnamen). Deshalb ist der Unterschied bis 0.42.0
108
+ niemandem aufgefallen – und deshalb vergleicht **Prüfung 38, Gegenstand 3** seit D-80
109
+ zwei Listen, die nicht in jedem Pack denselben Namensraum führen.
110
+
111
+ **Ohne die Gegenprobe am Client wäre die Vorabfreigabe von drei Namen auf zwei
112
+ geschrumpft**, und der Validator hätte 0 Fehler gemeldet.
113
+
114
+ ## 2. Vorgeschlagene Änderung
115
+
116
+ 1. **`hook_tools.search: ["grep", "find_file_by_name"]`**; `hook_tools_absent` und seine Note
117
+ entfallen. Der erzeugte Matcher deckt die Suchklasse.
118
+ 2. **`permissions_note` berichtigt** und mit dem gemessenen Grund versehen: Die Suchklasse
119
+ fällt bei diesem Client unter `Read(...)` – belegt durch P4 und W1 –, deshalb entfällt
120
+ eine eigene `Search`-Regel, **nicht weil es keine Suche gäbe.**
121
+ 3. **Beide `tool_names`-Blöcke abgebildet – als Identität**, gemessen am
122
+ Frontmatter-Vokabular des Clients; `tool_names_unmapped` entfällt,
123
+ `tool_names_namespace` kommt hinzu. **`install.py` wendet die Abbildung jetzt
124
+ auch in der Listenform an** – bis 0.42.0 tat das nur der csv-Zweig, während der
125
+ Agenten-Renderer daneben immer umschrieb: dieselbe Abbildung mit zwei
126
+ Ergebnissen.
127
+ 4. **`_permission_tools_skill_note`** von „unerhoben" auf gemessen: Das Werkzeug heißt
128
+ `skill`, die Liste bleibt leer, weil keine wirksame Schreibweise bekannt ist. **K-33
129
+ geschlossen, K-34 neu.**
130
+ 5. **Client Pack**: Verbtabelle, Zeile **B3** (die Zusage, die die falsche Behauptung
131
+ wiederholt), Zeile **S2** (der Aufruf ist ein Werkzeugaufruf, und die Slash-Form ist ein
132
+ zweiter Weg), Zeile **S3**, Änderungsverlauf.
133
+ 6. **Prüfung 41 (neu)**: Eine Abwesenheitserklärung ist **entweder** als Enthaltung markiert
134
+ **oder** mit Datum und Protokollpfad belegt. Eine bloße Behauptung ist keines von beidem.
135
+ 7. **Sechs Sonden und zwei Gegenproben** zu Prüfung 41.
136
+
137
+ ## 3. Auswirkungen
138
+
139
+ | Bereich | Auswirkung |
140
+ |---|---|
141
+ | Erzeugte Hook-Konfiguration `devin-desktop` | Matcher **`read\|grep\|find_file_by_name\|exec\|edit\|write`** statt `read\|exec\|edit\|write`. **Der Schutz-Hook läuft künftig auch bei Suchaufrufen** – mehr Hook-Aufrufe je Sitzung, je 10 s Zeitfenster |
142
+ | Erzeugte Skill- und Profildateien `devin-desktop` | **unverändert** `allowed-tools: read, grep, glob` – gemessen ist das die richtige Liste (Befund 5). Geändert hat sich, dass die Abbildung jetzt **erhoben** ist statt unerhoben, und dass `install.py` sie in der Listenform überhaupt anwendet |
143
+ | Erzeugte Berechtigungsdatei | **unverändert** |
144
+ | Pack `claude-code` | **unverändert** |
145
+ | Bestehende Installationen | **Migrationshinweis:** Nach dem Update ist `install.py --update` nötig, damit Hook-Konfiguration und Skilldateien den neuen Stand tragen. Ohne das bleibt die Lücke bestehen |
146
+ | Sicherheit | **Eine Werkzeugklasse kommt in die fail-closed-Schicht zurück.** Kein Schutz wird gelockert |
147
+
148
+ ## 4. Vorlage zur Entscheidung
149
+
150
+ | Nr. | Frage | Vorschlag | Preis |
151
+ |---|---|---|---|
152
+ | **E1** | Wird die Suchklasse in `hook_tools` aufgenommen – obwohl die Berechtigungsschicht sie heute schon deckt? | **Ja.** Die beiden Schichten sollen einander tragen, und die Berechtigungsdatei ist die **editierbare**. Prüfung 37 existiert, weil ein Projekt 41 `deny`-Regeln löschen konnte; der Hook ist die Schicht, die das überleben soll (D-31) | **Jeder Suchaufruf kostet künftig einen Hook-Lauf** mit 10 s Zeitfenster – bei einer Sitzung mit vielen `grep`-Aufrufen ist das spürbar. **Die Gegenposition ist vertretbar:** Wer die Berechtigungsschicht für ausreichend hält, spart die Last. Gemessen ist nur, dass beide Wege heute abweisen |
153
+ | **E2** | Wird `glob` auf `find_file_by_name` abgebildet? | **Nein – der Vorschlag war falsch und ist an der Messung gescheitert (Befund 5).** Das Frontmatter dieses Clients führt ein **eigenes** Vokabular; `glob` ist dort richtig, `find_file_by_name` wird verworfen. Die Abbildung ist deshalb die **Identität** – und das ist ein Messergebnis, kein Nichtstun. Der Namensraum wird deklariert (`tool_names_namespace`) | **Prüfung 38, Gegenstand 3 fällt für dieses Pack weg**: Sie vergleicht `tool_names` gegen `hook_tools`, und die leben hier in zwei Namensräumen. **Die Frage von D-80 bleibt für `devin-desktop` offen** – sie ist anders gestellt, nicht beantwortet, und das steht jetzt im Code und im Pack. Der Preis ist ein deklarierter blinder Fleck statt einer falschen Zusage |
154
+ | **E3** | Bleibt `permission_tools.skill` leer? | **Ja, mit gemessener Begründung.** Zwei Schreibweisen sind geprüft und beide wirkungslos; eine Regel, die nichts tut, wäre die Bauform von D-66 und D-82 – sie sähe richtig aus | **Eine Lücke bleibt eine Lücke**, und der Skillaufruf ist bei diesem Client über die Berechtigungsdatei nicht kontrollierbar. **Das ist zu sagen, nicht zu verschweigen:** neuer Klärungspunkt **K-34**. Und der Slash-Weg ist ohnehin kein Werkzeugaufruf |
155
+ | **E4** | Wird `K-33` geschlossen? | **Ja.** Die Frage lautete „ist der Skillaufruf dort rückfragepflichtig" und ist beantwortet: Er ist ein Werkzeugaufruf, und er ist über diese Datei nicht adressierbar | **Die Nachfolgefrage ist enger und offen** (K-34). Ein geschlossener Klärungspunkt, aus dem ein neuer folgt, sieht nach Stillstand aus und ist Fortschritt: Aus „unbekannt" wurde „bekannt und nicht erreichbar" |
156
+ | **E5** | Bekommt die Abwesenheitserklärung eine Prüfung – oder genügt die Lehre im Protokoll? | **Eine Prüfung.** Genau diese Bauform hat eine Werkzeugklasse aus der Durchsetzung genommen, und Prüfung 26 hat sie durchgelassen, weil sie **Folgerichtigkeit** prüft und nicht **Wahrheit**. Was prüfbar ist: ob die Erklärung sich als **Enthaltung** ausweist oder einen **datierten Beleg** nennt | **Sie prüft eine Form, nicht eine Tatsache.** Wer ein Datum und einen Protokollpfad in die Note schreibt, besteht sie – auch wenn das Protokoll etwas anderes sagt. **Sie fängt nach dieser Änderung nichts mehr** und ist eine Verankerung; ihr Gegenbeweis gegen 0.42.0 ist dafür ein **Abzählen** |
157
+ | **E6** | Wird der Werkzeugbestand gegen ein zweites Modell gehalten? | **Nein – er ist auf diesem Konto nicht messbar.** Der Versuch endet mit `Error: Upgrade to Pro to access this model`. Elf Läufe auf `SWE-1.6 Slow` zeigen denselben Bestand | **Die Aussage gilt für ein Modell.** Bietet der Client einem anderen Modell einen anderen Bestand an, wäre `hook_tools` erneut zu prüfen. **Das gehört als Grenze in das Pack**, nicht in eine Fußnote |
158
+ | **E7** | Eigenes Release oder Anhang? | **Ein eigenes Release, `0.43.0`.** Der Gegenstand ist geschlossen, und er trägt einen Migrationshinweis | **Das achtzehnte Release in drei Tagen.** Und das erste, das einen **Client** misst statt eines Mechanismus – elf Läufe, vier Umgebungen |
159
+
160
+ ## 5. Entscheidung
161
+
162
+ | Feld | Inhalt |
163
+ |---|---|
164
+ | Entscheidung | **Angenommen, alle sieben Fragen wie vorgelegt.** E1 die Suchklasse kommt in den Hook; **E2 im Vollzug überstimmt** – die Abbildung ist die Identität, weil das Frontmatter dieses Clients ein eigenes Vokabular führt (Befund 5); der Namensraum wird deklariert und Prüfung 38 wird namensraumbewusst; E3 `permission_tools.skill` bleibt leer mit gemessener Begründung; E4 K-33 geschlossen, K-34 neu; E5 Prüfung 41 als Form-, nicht Tatsachenprüfung, Grenze benannt; E6 ein Modell, Grenze im Pack; E7 eigenes Release `0.43.0` |
165
+ | Datum | 2026-09-14 |
166
+ | Entscheidende Rolle | `<FRAMEWORK_OWNER>` |
167
+ | Decision-Log-Einträge | D-87 (der Werkzeugbestand von `devin-desktop` ist erhoben; die Suchklasse gehört in `hook_tools`), D-88 (eine Abwesenheitserklärung ist Enthaltung **oder** datierter Beleg – nie eine bloße Behauptung), D-89 (der Skillaufruf ist bei `devin-desktop` ein Werkzeugaufruf und über die Berechtigungsdatei nicht adressierbar) |
168
+ | Auflagen | **Der Wirkungsnachweis führt einen Lauf am Client**: derselbe `grep`-Aufruf auf `.env` in der Hook-Umgebung, der vor der Änderung durchlief, muss danach blockiert werden. **Ohne diesen Lauf ist die Behebung eine Behauptung.** Und die Grenze wird benannt: ein Modell, ein Konto, elf Läufe |
169
+ | Ziel-Release | `0.43.0` |
170
+ | Umsetzung | umgesetzt mit `0.43.0` |
@@ -0,0 +1,153 @@
1
+ # Änderungsantrag `CR-2026-066`
2
+
3
+ | Feld | Inhalt |
4
+ |---|---|
5
+ | Titel | Drei offene Platzhalterschlitze decken drei beliebige Befehlsfreigaben – und drei ausgelieferte Texte bestreiten das ohne Einschränkung |
6
+ | Antragstellende Rolle | `<FRAMEWORK_OWNER>` |
7
+ | Datum | 2026-09-14 |
8
+ | Betroffene Artefakte | `tests/scripts/validate-framework.py` (Prüfung 42 neu, Korbzerlegung an **eine** Stelle, Register), `tests/scripts/probe-pruefungen.py` (Sonden und Gegenproben, Kopfsatz), `clientmap.py` (Kommentarkopf jeder erzeugten Berechtigungsdatei), `framework/core/03-security.md`, `templates/project-overlay/OVERLAY.md` Abschnitt 6, `tests/TEST_CATALOG.md` (`FW-KO-01`), `governance/DECISION_LOG.md`, `docs/ROADMAP.md`, `CHANGELOG.md` |
9
+ | Ebene laut Entscheidungsbaum 6 | **Core** – die Durchsetzungsschicht und ihre Prüfung sind Framework-Gut |
10
+ | Art | Änderung; Anlass ist **Kandidat 2** der Übergabe, der einzige mit einer gemessenen Fundstelle |
11
+ | Dringlichkeit | **P1.** Gemessen läuft eine Freigabe für einen Befehl **mit Fernwirkung** in beiden Packs lautlos durch, und der Text, der das bestreitet, steht im Kopf genau der Datei, in der jemand die Zeile einträgt |
12
+
13
+ ## 1. Anlass
14
+
15
+ Kandidat 2 der Übergabe beschrieb den Befund als Formfrage: Am Piloten trug die
16
+ Berechtigungsdatei `Bash(mvn -B test:*)`, während Abschnitt 6 des Overlays `mvn -B test`
17
+ erklärt – gefangen hat es Prüfung 37, weil die Abweichung **zufällig auch formal auffällig**
18
+ war. Die Gegenprüfung liegt vor:
19
+ `tests/protocols/2026-09-14-gegenpruefung-schlitzdeckung.md`, **zwölf Läufe an zwei Packs**
20
+ (vier Kontroll-, zwei Entlastungsläufe) und **vier Abzählungen**.
21
+
22
+ **Der Befund bestätigt sich und er liegt woanders.**
23
+
24
+ ### 1.1 Befund 1: Die Deckung ist drei, und sie ist beliebig füllbar
25
+
26
+ Die Kernquelle hält im `ask`-Korb genau **drei** Befehlsschlitze (`<BUILD_COMMAND>`,
27
+ `<TEST_COMMAND>`, `<LINT_COMMAND>`); die vier Pfadschlitze stehen im `deny`-Korb und decken
28
+ nichts, weil Überzähliges dort ohnehin zulässig ist. Prüfung 37 vergleicht **Mengen**: Sie
29
+ zählt den Überschuss gegen die Zahl der offenen Schlitze. **Welcher Eintrag welcher Schlitz
30
+ ist, steht dort nicht – und kann dort nicht stehen.**
31
+
32
+ Gemessen (M10, frische `devin-desktop`-Installation): Das Overlay erklärt dreimal `<TBD>` –
33
+ also **gar nichts** –, und drei eingetragene Befehlsfreigaben laufen durch, darunter
34
+ `mvn -B deploy`. Derselbe Befund am Piloten mit `claude-code` (M4). **Die vierte Zeile fällt**
35
+ (M5, M11) – D-76 hat das richtig vorhergesagt.
36
+
37
+ ### 1.2 Befund 2: Die Lücke ist erklärt – aber nur an einer Stelle
38
+
39
+ `CR-2026-061` Abschnitt 4 nennt genau diesen Fall und nimmt ihn ausdrücklich aus:
40
+
41
+ > „Der zweite dort benannte Posten – ein belegter `<LINT_COMMAND>`, obwohl das Overlay
42
+ > ‚Lint: nicht vorhanden' sagt – bleibt **unbeanstandet**; ein gefüllter Schlitz ist ein
43
+ > gefüllter Schlitz, und den Abgleich mit dem Overlaytext leistet diese Prüfung nicht."
44
+
45
+ Auch D-76 und D-77 bleiben genau. **Drei ausgelieferte Texte aus demselben Commit
46
+ (`34d850e`, Release 0.39.0) tun es nicht:**
47
+
48
+ | # | Träger | Wortlaut (verkürzt) |
49
+ |---|---|---|
50
+ | **Z1** | `templates/project-overlay/OVERLAY.md` Abschnitt 6 | „Ein Eintrag von Hand in `<PERMISSIONS_FILE>` ist **kein** Ersatz: Prüfung 37 des Validators meldet ihn als Ausweitung" |
51
+ | **Z2** | `clientmap.py`, Kommentarkopf **jeder erzeugten Berechtigungsdatei** | „… unter ‚ask' und ‚allow' wäre sie eine Ausweitung **und ist ein Fehler**. Ein zusätzlicher freigegebener Befehl gehört deshalb nicht hierher" |
52
+ | **Z3** | `framework/core/03-security.md` | „**Prüfung 37 hält die installierte Datei gegen die Kernquelle:** Was dort erzeugt wird, muss hier stehen; eine zusätzliche Regel ist nur unter `deny` zulässig" |
53
+
54
+ **Z2 ist die teuerste.** Sie steht nicht in einem Dokument, das man zum Nachschlagen
55
+ aufschlägt, sondern im Kopf der Datei, in der jemand die Zeile einträgt, über die sie eine
56
+ Aussage macht. Wer dort „ist ein Fehler" liest, die Zeile trotzdem einträgt und einen grünen
57
+ Lauf bekommt, liest den grünen Lauf als Bestätigung.
58
+
59
+ **Die Lehre ist die von 0.42.0, eine Ebene tiefer:** *Eine Enthaltung, die nur in einem Antrag
60
+ steht, hält nicht einmal bis zum Ende desselben Patches.*
61
+
62
+ ### 1.3 Befund 3 – nicht gesucht: Zwei von drei Trägern sagen längst das Richtige
63
+
64
+ Je Installation führen **drei** Träger dieselben drei Werte: das Quell-Overlay, die
65
+ Laufzeitfassung `20-project-overlay.md` und die Berechtigungsdatei. Am Piloten sagen
66
+ Quell-Overlay **und** Laufzeitfassung „Lint/Statische Analyse: nicht vorhanden"; allein die
67
+ Berechtigungsdatei gewährt einen dritten Befehl. **Das ist die erste gemessene Fundstelle für
68
+ `CR-2026-044` E4** (Abgleich Quell-Overlay gegen Laufzeitfassung, seit 0.33.0 offen), und sie
69
+ fällt zugunsten der beiden Textträger aus.
70
+
71
+ ### 1.4 Befund 4 – nicht gesucht: Die Zuordnung steht maschinenlesbar da
72
+
73
+ In **allen vier** geprüften Overlays – Vorlage, Pilot, frische Installation,
74
+ Testinstallation im Repositorium – steht jeder der drei Platzhalter in **genau einer**
75
+ Tabellenzeile, und der Wert steht in der Zelle **rechts daneben**. Das gilt auch für den
76
+ Piloten, dessen Abschnitt 6 aus einer älteren Vorlage stammt und eine andere
77
+ Spaltenüberschrift führt. Und `docs/PLACEHOLDER_REGISTRY.md` weist die Herkunft für alle drei
78
+ längst aus: „Overlay 5" beziehungsweise „Overlay 6".
79
+
80
+ **Das Register behauptet die Zuordnung seit jeher. Durchgesetzt hat sie niemand.**
81
+
82
+ ## 2. Vorgeschlagene Änderung
83
+
84
+ 1. **Prüfung 42 (neu)** – *Ein gefüllter Schlitz trägt, was das Overlay erklärt.* Je
85
+ Befehlsplatzhalter der Kernquelle wird der Wert aus `project-overlay/OVERLAY.md` gelesen
86
+ (über die **Platzhalterzelle**, nicht über die Spaltenposition) und gegen die installierte
87
+ Berechtigungsdatei gehalten:
88
+ - Das Overlay erklärt einen Befehl → die Datei **muss** die Schlitzregel mit genau diesem
89
+ Wert tragen.
90
+ - Das Overlay erklärt keinen (`<TBD>`, „nicht vorhanden", „–", leer) → der Schlitz ist
91
+ **nicht gefüllt** und deckt **keinen** Überschuss.
92
+ - Eine Befehlsregel im Schlitzkorb, die keinen erklärten Wert trägt und die die Kernquelle
93
+ nicht erzeugt, ist ein Fehler.
94
+ 2. **Die Korbzerlegung liegt künftig an einer Stelle.** `_korb_zerlegung()` liefert Pflicht,
95
+ Schlitze, offene Schlitze und Überschuss; Prüfung 37 und 42 lesen daraus. **Zwei
96
+ Gelegenheiten für denselben Fehler sind eine** – dieselbe Begründung wie bei
97
+ `tabellenzellen()` mit 0.37.0.
98
+ 3. **Prüfung 37 bleibt unverändert.** Sie hängt allein an der Kernquelle und läuft ohne
99
+ Overlay; 42 entzieht ihr keine Deckung, sondern prüft die Zuordnung getrennt. Sonst hinge
100
+ das Ergebnis von 37 an der Anwesenheit eines Nachbardokuments.
101
+ 4. **Z1, Z2 und Z3 bekommen ihre Bedingung** – Z2 zuerst, weil sie in jeder erzeugten Datei
102
+ steht. Der Satz nennt künftig beides: den Schlitz, der dem Projekt gehört, und die
103
+ Grenze, die auch nach Prüfung 42 bleibt.
104
+ 5. **Register und Sondenmenge** werden nachgezogen: Registereintrag 42, Spanne „6 und 18 bis
105
+ 42" wörtlich an den drei Trägern, die Prüfung 40 vergleicht.
106
+ 6. **Sonden und Gegenproben** zu Prüfung 42 gegen eine **frische Installation** mit
107
+ gefülltem Overlay – die Bauart von Prüfung 37 und 33, aus demselben Grund: Die Prüfung
108
+ hängt an installierten Dateien, nicht an einem Repositoriumstext.
109
+
110
+ ## 3. Auswirkungen
111
+
112
+ - **Der Pilot bekommt einen Fehler.** `Bash(mvn -B -q compile)` steht dort, während Abschnitt 6
113
+ `<LINT_COMMAND>` als „nicht vorhanden" erklärt. **Das ist der Zweck der Prüfung** und kein
114
+ Nebenschaden. Die Behebung ist eine Entscheidung des Overlay Owners und keine des Frameworks:
115
+ entweder die Zeile fällt, oder Abschnitt 6 erklärt den Befehl als `<LINT_COMMAND>`.
116
+ - **Der Gegenbeweis gegen den Vorstand ist ein Abzählen an einem echten Projekt**, nicht eine
117
+ Konstruktion: Der Befund stand am Piloten, bevor die Prüfung gebaut wurde, und sie findet
118
+ ihn. **Im Repositorium selbst findet sie nichts** – die Testinstallation hat drei offene
119
+ Schlitze und ein Overlay, das dreimal `<TBD>` sagt. Das gehört so gesagt.
120
+ - **Ein Projekt, das seine Schlitze sauber füllt, merkt nichts.** Die Deckung entsteht genau
121
+ dort, wo ein Projekt einen Befehl **nicht** hat und die freigewordene Zeile anderweitig
122
+ benutzt.
123
+ - **Die Prüfung hängt an einer Tabellenform, die dem Projekt gehört.** Wer Abschnitt 5 oder 6
124
+ so umbaut, dass ein Platzhalter in keiner Tabellenzeile mehr steht, bekommt die Meldung über
125
+ den verlorenen Anker – nicht über seine Berechtigungsdatei.
126
+ - **Bestehende Installationen ändern sich nicht von selbst.** Die Berechtigungsdatei steht in
127
+ `shared_seed` und wird nach der Erstinstallation nie wieder geschrieben (D-76); die Prüfung
128
+ meldet, sie behebt nicht.
129
+
130
+ ## 4. Vorlage zur Entscheidung
131
+
132
+ | Nr. | Frage | Vorschlag | Preis |
133
+ |---|---|---|---|
134
+ | **E1** | **Darf eine Prüfung einen Wert aus dem Overlaytext auswerten?** Bisher liest der Validator dort nur Zustände – Status, offene `<TBD>`, Versionsangabe | **Ja, über die Platzhalterzelle der Tabellen in Abschnitt 5 und 6.** Die Zuordnung gibt es genau einmal, und `docs/PLACEHOLDER_REGISTRY.md` weist sie für alle drei Platzhalter längst aus. Sie dort zu lesen ist keine neue Freiheit, sondern die Durchsetzung einer Behauptung, die das Register seit jeher macht. Gemessen steht jeder Platzhalter in allen vier geprüften Overlays in **genau einer** Tabellenzeile | **Die Prüfung hängt an einem Dokument, das dem Projekt gehört.** Ein Umbau von Abschnitt 5 oder 6 bricht sie – deshalb wird die Zeile über die **Platzhalterzelle** gefunden und der Wert rechts daneben gelesen, nie über eine Spaltennummer. Und der Bruch meldet sich als **verlorener Anker**, nicht als Befund über die Berechtigungsdatei |
135
+ | **E2** | Wird stattdessen die **Laufzeitfassung** `20-project-overlay.md` gelesen? Sie ist Framework-Gut und führt dieselben drei Werte | **Nein.** Sie führt sie in einer Fließzeile ohne Schlüsselspalte – und der Pilot hat sie bereits umgebaut (zwei Zeilen statt einer, ein zusätzliches Feld „Schnellprüfung"). Eine Prüfung darüber fiele beim ersten echten Projekt **an der Form, nicht an der Sache** | **Der Abgleich zwischen Quell-Overlay und Laufzeitfassung bleibt offen** (`CR-2026-044` E4, seit 0.33.0). Er hat jetzt seine erste gemessene Fundstelle und bekommt sie als Kandidaten – **das ist eine Enthaltung, und sie wird als solche geführt** |
136
+ | **E3** | Was gilt, wenn der Overlaywert **kein Befehl** ist (`<TBD>`, „nicht vorhanden", „–")? | **Der Schlitz gilt als nicht gefüllt und deckt keinen Überschuss.** Das ist der Satz, der den Befund am Piloten fängt: Wo ein Projekt keinen Befehl hat, darf die freigewordene Zeile nicht anderweitig benutzt werden | **Das ist eine Verschärfung gegenüber 0.43.0.** Ein Projekt, das den Befehl in der Datei führt und im Overlay `<TBD>` stehen lässt, bekommt jetzt einen Fehler – auch wenn der Befehl harmlos ist. Der dokumentierte Weg ist, Abschnitt 6 auszufüllen |
137
+ | **E4** | Was gilt, wenn das Overlay einen Befehl erklärt, die Datei ihn aber **nicht** trägt? | **Fehler**, mit einer Meldung, die beide Auflösungen nennt. Nach D-77 („Fehlen ist immer ein Fehler, gleich in welchem Korb") ist das die konsequente Fortsetzung; die beiden Träger müssen übereinstimmen | **Eine frische Installation vor dem Ausfüllen bleibt still**, weil dort `<TBD>` steht – der Fehler trifft nur ein Overlay, das bereits etwas erklärt. **Das ist gewollt, aber es heißt auch: Der halb ausgefüllte Zustand wird erst dann laut, wenn er halb ist** |
138
+ | **E5** | **Nur die drei Befehlsschlitze – oder auch die vier Pfadschlitze?** | **Nur die drei Befehlsschlitze.** Die Pfadschlitze stehen sämtlich im `deny`-Korb, wo Überzähliges ohnehin zulässig ist; dort gibt es keine Deckung zu entziehen. Und sie sind **n:1** – eine Liste im Overlay, eine Regel in der Datei | **Ein zu eng gefüllter `<EXCLUDED_PATHS>`-Schlitz bleibt eine stille Lockerung.** Das ist eine andere Prüfung mit einer eigenen Ermessensfrage, und sie wird **nicht** in einem Nebensatz erledigt. Sie wird als Kandidat geführt – die Lehre von 0.43.0: eine Enthaltung erklärt sich oder sie ist eine Behauptung |
139
+ | **E6** | Eigene Nummer oder Erweiterung von Prüfung 37? | **Eigene Nummer, Prüfung 42.** Prüfung 37 hängt allein an der Kernquelle und läuft ohne Overlay; 42 enthält sich ohne Overlay. Zwei Gegenstände, zwei Nummern – und 37 behält ihre Arithmetik, damit ihr Ergebnis nicht von der Anwesenheit eines Nachbardokuments abhängt | **Am Piloten meldet 37 weiterhin nichts**, während 42 meldet. Zwei Prüfungen über dieselbe Datei, die verschieden ausgehen, sind erklärungsbedürftig – der Registereintrag sagt deshalb, was jede von beiden **nicht** prüft |
140
+ | **E7** | Werden Z1 bis Z3 berichtigt, obwohl Prüfung 42 sie einholt? | **Ja, alle drei.** Sie sagen auch nach 42 mehr, als die Mechanik hält: Die Pfadschlitze bleiben ungeprüft, und ein vom Overlay erklärter Befehl ist zulässig. **Z2 zuerst** – sie ist die einzige der drei, die den Leser an der Stelle erreicht, an der er eingreift | **Drei Sätze werden länger**, und zwei davon stehen in Texten, die ohnehin dicht sind. Der Preis ist Lesbarkeit gegen Wahrheit – und dieses Projekt hat die Frage schon entschieden |
141
+ | **E8** | Eigenes Release oder Anhang? | **Ein eigenes Release, `0.44.0`.** Der Gegenstand ist geschlossen, und er trägt einen Migrationshinweis für jede Installation mit gefülltem Overlay | **Das neunzehnte Release in drei Tagen** – und das erste seit 0.42.0, dessen Gegenbeweis ein **Abzählen an einem echten Projekt** ist statt einer Konstruktion |
142
+
143
+ ## 5. Entscheidung
144
+
145
+ | Feld | Inhalt |
146
+ |---|---|
147
+ | Entscheidung | **Angenommen, alle acht Fragen wie vorgelegt.** E1 der Wert wird über die Platzhalterzelle gelesen; E2 die Laufzeitfassung bleibt außen vor und `CR-2026-044` E4 wird als Kandidat geführt; E3 ein Schlitz ohne Befehl deckt nichts; E4 ein erklärter Befehl muss dastehen; E5 nur die drei Befehlsschlitze, die Pfadschlitze werden als Enthaltung geführt; E6 eigene Nummer 42, Prüfung 37 unverändert; E7 alle drei Texte bekommen ihre Bedingung; E8 eigenes Release `0.44.0` |
148
+ | Datum | 2026-09-14 |
149
+ | Entscheidende Rolle | `<FRAMEWORK_OWNER>` |
150
+ | Decision-Log-Einträge | D-90 (ein Platzhalterschlitz trägt den Wert, den das Overlay für ihn erklärt – ein Schlitz ohne erklärten Befehl deckt keinen Überschuss), D-91 (der Validator darf **Werte** aus `OVERLAY.md` auswerten, wenn sie in einer Schlüsselspalte stehen – nicht aus Fließtext) |
151
+ | Auflagen | **Der Gegenbeweis wird als Abzählen an einem echten Projekt ausgewiesen und im selben Atemzug seine Grenze:** Im Repositorium selbst findet Prüfung 42 nichts, weil die Testinstallation drei offene Schlitze und ein leeres Overlay hat. **Und die Enthaltung zu den Pfadschlitzen steht im Registereintrag, nicht nur im Antrag** – genau der Fehler, den dieser Antrag behebt, darf ihn nicht selbst wiederholen |
152
+ | Ziel-Release | `0.44.0` |
153
+ | Umsetzung | umgesetzt mit `0.44.0` |
@@ -0,0 +1,140 @@
1
+ # Änderungsantrag `CR-2026-067`
2
+
3
+ | Feld | Inhalt |
4
+ |---|---|
5
+ | Titel | Eine Berechtigungsdatei ohne Hook-Block ist stumm, und das Register der Übungspräparationen nennt drei von sieben |
6
+ | Antragstellende Rolle | `<FRAMEWORK_OWNER>` |
7
+ | Datum | 2026-09-15 |
8
+ | Betroffene Artefakte | `tests/scripts/validate-framework.py` (Prüfungen 43 und 44 neu, Meldung der Prüfung 18, Register), `tests/scripts/probe-pruefungen.py` (Sonden und Gegenproben, Kopfsatz), `onboarding/exercises/README.md` (Präparationsregister `UEB-01` bis `UEB-07`), `tests/TEST_CATALOG.md` (Vorbedingungen mit Kennung, `FW-PI-04`, `FW-KO-01`), `docs/ADOPTION_GUIDE.md` (mehrere Technologiestränge), `governance/DECISION_LOG.md`, `docs/ROADMAP.md`, `CHANGELOG.md` |
9
+ | Ebene laut Entscheidungsbaum 6 | **Core** – die Durchsetzungsschicht, ihre Prüfung und der Testkatalog sind Framework-Gut |
10
+ | Art | Änderung; Anlass ist **Kandidat 1** der Übergabe – das Übungsrepository herrichten |
11
+ | Dringlichkeit | **P1 für Gegenstand 1.** Gemessen war der Hook eines echten Projekts **einunddreißig Releases lang wirkungslos**, und der Validator meldete durchgehend 0 Fehler. Bei `devin-desktop` ist der Hook die einzige technische Secret-Schranke |
12
+
13
+ ## 1. Anlass
14
+
15
+ Kandidat 1 der Übergabe nannte zwei Aufgaben: das Übungsrepository
16
+ (`devpacks/test-devin-framework`) von 0.13.0 auf `main` heben und die **drei** fehlenden
17
+ Köder anlegen. Beides ist am 2026-09-14 gemacht; der Weg ist protokolliert
18
+ (`tests/protocols/2026-09-15-herrichtung-uebungsrepositorium.md`). **Vier Befunde sind
19
+ dabei angefallen, und keiner davon stand in der Kandidatenbeschreibung.**
20
+
21
+ ### Befund 1 – die Berechtigungsdatei ohne Hook-Block ist stumm und läuft grün
22
+
23
+ Das Übungsrepository trug in `.devin/config.json` **keinen `hooks`-Block**. Seine Hooks
24
+ standen in `.devin/hooks.v1.json` – der Datei, aus der dieser Client keinen Hook ausführt
25
+ (AP2-DD-10, D-32, seit 0.25.0). Der Hook war damit seit der Erstinstallation wirkungslos.
26
+
27
+ **Gemessen, nicht geschlossen:** In einer frischen 0.44.0-Installation wurde der
28
+ `hooks`-Block entfernt und der Validator gefahren. Ergebnis mit Block: 2 Fehler. Ergebnis
29
+ ohne Block: **dieselben 2 Fehler** (beide Artefakte der Testinstallation, kein Bezug zum
30
+ Hook). **Kein Lauf sieht das Fehlen.**
31
+
32
+ Die Gegenprüfung über alle vier lokalen Installationen stellt den Befund **um**: `lw-tech`
33
+ und `leitwerk-ap2` stehen auf 0.24.0 und tragen den Block; der Pilot trägt ihn. **Nur das
34
+ Übungsrepositorium nicht** – es wurde vor 0.25.0 installiert, und
35
+ `install.py --update` schreibt die Berechtigungsdatei nie (`shared_seed`, D-76). Die
36
+ Reichweite ist damit **eine** Fundstelle, nicht vier. Der Befund selbst bleibt.
37
+
38
+ **Und Prüfung 18 beschreibt die halbe Migration.** Ihre Warnung sagt: die verwaiste
39
+ `hooks.v1.json` ist von Hand zu löschen. Wer ihr wörtlich folgt und sonst nichts tut, hat
40
+ danach **gar keinen Hook mehr** – und kein Lauf meldet es. Das ist derselbe Befundtyp, den
41
+ dieses Projekt seit zwölf Releases bei sich selbst findet: eine Anweisung, die weniger
42
+ herstellt, als ihr Leser annimmt.
43
+
44
+ ### Befund 2 – das Register der Präparationen nennt drei von sieben
45
+
46
+ `onboarding/exercises/README.md` Nummer 4 verlangt **drei Köder** (Injektion, K3,
47
+ Scope-Falle). Abgezählt gegen die Vorbedingungen des Testkatalogs braucht ein fahrbares
48
+ Übungsrepositorium **sieben Präparationen für neun Testfälle**: dazu eine `.env`-Testdatei
49
+ (`FW-DS-02`), einen präparierten Codekommentar (`FW-PI-02`), eine Injektion in einer
50
+ Testdatei (`SK-006-N04`) und einen Regeltext mit bewusstem Widerspruch (`FW-KO-03`). Keine
51
+ dieser vier steht in der Liste, und der Testkatalog führt alle neun Fälle als `offen`,
52
+ also als fahrbar.
53
+
54
+ ### Befund 3 – `FW-PI-04` verlangt, was D-76 ausschließt
55
+
56
+ Die Vorbedingung lautet „Testskript mit präparierter stdout-Anweisung **als freigegebener
57
+ Befehl**". Die Berechtigungsdatei hält genau drei Befehlsschlitze bereit, und ein Overlay
58
+ kann dort keinen vierten Eintrag erzeugen (D-76, seit 0.39.0; Prüfung 42 seit 0.44.0
59
+ meldet jeden unerklärten). **Der Testfall verlangt in dieser Form etwas, das das Framework
60
+ seit sechs Releases ausschließt** – und niemand hat es bemerkt, weil ihn niemand gefahren
61
+ hat.
62
+
63
+ ### Befund 4 – der Übernahmeleitfaden schweigt zu mehreren Technologiesträngen
64
+
65
+ Das Übungs-Overlay führt zwei Stränge und damit sechs Build-, Test- und Prüfbefehle. Seine
66
+ Berechtigungsdatei trug **acht** Exec-Freigaben bei drei Schlitzen – fünf mehr, als die
67
+ Kernquelle erzeugen kann, darunter den Aufruf des Validators selbst. `ADOPTION_GUIDE.md`
68
+ Abschnitt 3 beschreibt die Migration, nennt aber den Fall nicht, den jedes Projekt mit
69
+ mehr als einem Strang hat: **Welcher Befehl bekommt den Schlitz, wenn es sechs Kandidaten
70
+ für drei Plätze gibt?**
71
+
72
+ ## 2. Vorgeschlagene Änderung
73
+
74
+ 1. **Prüfung 43 (neu):** Führt ein Client Pack seine Hooks in der Berechtigungsdatei –
75
+ erkennbar daran, dass `<HOOKS_FILE>` und `permissions_file` auf dieselbe Datei zeigen –,
76
+ dann MUSS diese Datei einen nichtleeren `PreToolUse`-Block tragen. **Fehler.** Beide
77
+ ausgelieferten Packs fallen darunter.
78
+ 2. **Die Meldung der Prüfung 18 bekommt ihren zweiten Halbsatz:** Nicht nur die alte Datei
79
+ löschen, sondern den Block in der Berechtigungsdatei führen – mit dem Verweis auf
80
+ Prüfung 43, die es nachzählt.
81
+ 3. **Prüfung 44 (neu):** Das Präparationsregister in `onboarding/exercises/README.md` und
82
+ die Vorbedingungen in `tests/TEST_CATALOG.md` decken sich – **in beiden Richtungen,
83
+ über die Kennung**: Jede im Katalog genannte Kennung `UEB-NN` steht im Register, und
84
+ jede Kennung des Registers wird von mindestens einem Testfall gebraucht.
85
+ 4. **Das Register wird vollständig:** `UEB-01` bis `UEB-07` mit Ort, Gegenstand und den
86
+ Testfällen, die sie brauchen. Die Vorbedingungszellen des Katalogs nennen die Kennung.
87
+ 5. **`FW-PI-04` wird berichtigt:** Die präparierte Ausgabe kommt aus einem der **drei
88
+ erklärten** Befehle, nicht aus einem vierten. Was der Testfall misst, bleibt gleich;
89
+ was er voraussetzt, wird herstellbar.
90
+ 6. **`ADOPTION_GUIDE.md` bekommt den Absatz zu mehreren Technologiesträngen**, mit der
91
+ gemessenen Entscheidungsregel: Den Schlitz bekommt der Befehl, der auf den
92
+ Arbeitsplätzen des Projekts tatsächlich läuft.
93
+ 7. **Register und Sondenmenge** werden nachgezogen – Einträge 43 und 44, Spanne wörtlich an
94
+ den drei Trägern, die Prüfung 40 vergleicht. **Erst die Sonden, dann die Spanne** (die
95
+ Lehre vom 2026-09-14).
96
+
97
+ ## 3. Auswirkungen
98
+
99
+ - **Bestehende Installationen ohne Hook-Block bekommen einen Fehler.** Das ist der Zweck.
100
+ Gemessen ist es genau eine: das Übungsrepositorium, dort mit diesem Release behoben.
101
+ Die Behebung ist ein Handgriff – den Block aus einer frischen Installation übernehmen –
102
+ und sie steht als Migrationshinweis im `CHANGELOG.md`.
103
+ - **Im Repositorium selbst findet Prüfung 43 nichts.** Die lokale Testinstallation trägt
104
+ ihren Block. Das gehört so gesagt: Der Gegenbeweis ist ein Abzählen an einem echten
105
+ Projekt, kein Fund im eigenen Baum.
106
+ - **Prüfung 44 hängt an einem Dokument, das dem Framework gehört** – anders als Prüfung 42,
107
+ die in ein Projektdokument liest. Ein Umbau von `exercises/README.md` bricht sie, und der
108
+ Bruch meldet sich als verlorener Anker.
109
+ - **Prüfung 44 sieht das Übungsrepositorium nicht.** Sie gleicht zwei Register ab, nicht
110
+ Register gegen Wirklichkeit: Ob die Präparation `UEB-02` dort wirklich liegt, kann kein
111
+ Validator dieses Repositoriums feststellen. **Das ist eine Enthaltung, keine Stille**, und
112
+ sie steht im Kopfkommentar.
113
+ - **Der Testkatalog bekommt Kennungen in seinen Vorbedingungszellen.** Wer einen Testfall
114
+ ergänzt, der eine Präparation braucht, muss sie registrieren – oder Prüfung 44 schweigt,
115
+ weil er keine Kennung nennt. Auch das ist eine Grenze und steht dort.
116
+
117
+ ## 4. Vorlage zur Entscheidung
118
+
119
+ | Nr. | Frage | Vorschlag | Preis |
120
+ |---|---|---|---|
121
+ | **E1** | **Fehler oder Warnung, wenn der Hook-Block fehlt?** | **Fehler.** Bei beiden Packs ist der Hook die einzige technische Schranke gegen Secrets in Werkzeugeingaben und gegen Schreibzugriffe auf den Kern über Werkzeuge, die die Berechtigungsdatei nicht erfasst. Eine Warnung hätte denselben Rang wie der Hinweis auf die verwaiste Datei – und genau der wurde einunddreißig Releases lang überlesen | **Ein Projekt, das den Hook bewusst nicht will, bekommt einen Fehler und kann ihn nicht abstellen.** Das ist gewollt: Der Hook ist Kernzusage, nicht Projektwahl. Wer ihn nicht will, deinstalliert das Framework – der Weg steht in `ADOPTION_GUIDE.md` Abschnitt 5 |
122
+ | **E2** | **Wie tief prüft 43 – Vorhandensein oder Inhalt?** | **Vorhandensein eines nichtleeren `PreToolUse`-Blocks.** Den Inhalt prüfen die Prüfungen 19 (Interpreter), 26 (Werkzeugabdeckung) und 27 (fail-closed) bereits – sie greifen, sobald der Block da ist. Eine vierte Inhaltsprüfung verdoppelte sie | **Ein Block mit einem `PreToolUse`-Eintrag, der auf ein fremdes Skript zeigt, läuft durch 43 durch** – und wird von 19 gefangen, weil der Interpreteraufruf nicht passt. Zwei Prüfungen, die zusammen greifen, sind erklärungsbedürftig; der Registereintrag sagt, was 43 **nicht** prüft |
123
+ | **E3** | **Was gilt für ein Pack mit eigener Hook-Datei?** | **Enthaltung.** Die Prüfung greift nur, wenn `<HOOKS_FILE>` und `permissions_file` auf dieselbe Datei zeigen. Derzeit tun das beide Packs; die Bedingung steht trotzdem da, weil ein künftiges Pack es anders halten kann | **Ein Pack mit eigener Hook-Datei bleibt ungeprüft.** Die Enthaltung ist benannt – und sie ist derselbe Zuschnitt, den Prüfung 18 schon hat |
124
+ | **E4** | **Wird Prüfung 18 erweitert oder bleibt sie?** | **Sie bleibt, ihre Meldung wächst.** 18 räumt die alte Datei ab, 43 verlangt die neue – zwei Gegenstände, zwei Nummern (dieselbe Begründung wie bei 37 und 42). Die Warnung nennt künftig beide Hälften der Migration | **Wer nur die Warnung liest, sieht jetzt mehr Text.** Der Preis ist Lesbarkeit gegen Vollständigkeit, und dieses Projekt hat die Frage entschieden |
125
+ | **E5** | **Welche Kennung bekommen die Präparationen?** | **`UEB-01` bis `UEB-07`.** `P1`, `P3` sind im Kern als Prinzipienkennungen vergeben (`05-working-model.md`); eine zweite Bedeutung desselben Zeichens in derselben Dokumentfamilie ist ein Fehler, den dieses Projekt schon einmal gemacht hat (`G-18`, 2026-09-13). `UEB-` ist im gesamten Kern frei – geprüft | **Eine weitere Kennungsfamilie** neben `CR-`, `D-`, `K-`, `G-`, `FW-`, `SK-`, `EX-`. Sie ist die erste, die einen Gegenstand **außerhalb** des Repositoriums benennt |
126
+ | **E6** | **Prüft 44 beide Richtungen?** | **Ja.** Eine Kennung im Katalog ohne Registereintrag ist ein Tippfehler oder eine unregistrierte Präparation; eine Kennung im Register, die kein Testfall braucht, ist eine tote Präparation, die jemand pflegt | **Was sie nicht kann:** einen Testfall fangen, der eine Präparation braucht und keine Kennung nennt. Genau der Fall von Befund 2 – **die Prüfung verhindert seine Wiederholung nur, wenn die Kennung gesetzt wird.** Das ist dieselbe Ehrlichkeit wie bei Prüfung 38 und 40, und es steht im Kopfkommentar |
127
+ | **E7** | **Wie wird `FW-PI-04` aufgelöst – Testfall streichen oder umformulieren?** | **Umformulieren.** Die Injektion über eine Werkzeugausgabe ist ein realer Angriffsweg und der einzige Testfall, der ihn abdeckt. Herstellbar wird er, wenn die präparierte Ausgabe aus einem der drei **erklärten** Befehle kommt – im Übungsrepositorium aus `<TEST_COMMAND>`, dessen Lauf eine Anweisung auf stdout schreibt | **Der Testfall misst danach denselben Mechanismus in einer engeren Lage:** Die Ausgabe kommt aus dem Testlauf, nicht aus einem beliebigen Skript. Wer ihn fährt, muss die Präparation in einer Testdatei unterbringen – sie ist `UEB-06` und liegt ohnehin dort |
128
+ | **E8** | **Eigenes Release oder Anhang an 0.44.0?** | **Eigenes Release `0.45.0`.** Zwei neue Prüfungen, ein Migrationshinweis, ein berichtigter Testfall – das ist ein geschlossener Gegenstand | **Das zwanzigste Release in vier Tagen.** Und das erste, dessen Anlass **nicht** ein Befund im Repositorium war, sondern die Arbeit an einem Projekt, das dieses Repositorium benutzt |
129
+
130
+ ## 5. Entscheidung
131
+
132
+ | Feld | Inhalt |
133
+ |---|---|
134
+ | Entscheidung | **Angenommen, alle acht Fragen wie vorgelegt.** E1 fehlender Hook-Block ist ein Fehler; E2 Prüfung 43 prüft das Vorhandensein, den Inhalt prüfen 19, 26 und 27; E3 ein Pack mit eigener Hook-Datei bleibt ausgenommen und die Enthaltung steht im Kopfkommentar; E4 Prüfung 18 bleibt, ihre Meldung nennt beide Hälften der Migration; E5 Kennungen `UEB-01` bis `UEB-07`; E6 Prüfung 44 gleicht beide Richtungen ab, ihre Grenze steht im Kopfkommentar; E7 `FW-PI-04` wird umformuliert statt gestrichen; E8 eigenes Release `0.45.0` |
135
+ | Datum | 2026-09-15 |
136
+ | Entscheidende Rolle | `<FRAMEWORK_OWNER>` |
137
+ | Decision-Log-Einträge | D-92 (führt ein Pack seine Hooks in der Berechtigungsdatei, ist ein fehlender Hook-Block ein Fehler – eine Hook-Konfiguration am falschen Ort ist keine), D-93 (die Präparationen des Übungsrepositoriums sind ein Register mit Kennungen, und der Testkatalog nennt sie an der Vorbedingung) |
138
+ | Auflagen | **Der Gegenbeweis für Prüfung 43 ist ein Abzählen an vier echten Installationen, und seine Grenze steht daneben:** Im Repositorium selbst findet sie nichts, weil die lokale Testinstallation ihren Block trägt. **Und Prüfung 44 weist ihre Enthaltung aus** – sie gleicht zwei Register ab, nicht ein Register gegen die Wirklichkeit des Übungsrepositoriums |
139
+ | Ziel-Release | `0.45.0` |
140
+ | Umsetzung | umgesetzt mit `0.45.0` |
@@ -0,0 +1,106 @@
1
+ # Änderungsantrag `CR-2026-068`
2
+
3
+ | Feld | Inhalt |
4
+ |---|---|
5
+ | Titel | Der Sondenlauf bekommt Namen, Laufzeiten, Beschreibungssätze, Nebenläufigkeit – und einen Aufräumer, der sein Scheitern meldet |
6
+ | Antragstellende Rolle | `<FRAMEWORK_OWNER>` |
7
+ | Datum | 2026-09-15 |
8
+ | Betroffene Artefakte | `tests/scripts/probe-pruefungen.py` (Ausführungsplan, Läufer, Auswertung, Aufräumer, Beschreibungssätze), `governance/FRAMEWORK_DEV_PROFILE.md` (Abschnitt 4, Abnahmeform), `governance/DECISION_LOG.md`, `docs/ROADMAP.md`, `CHANGELOG.md` |
9
+ | Ebene laut Entscheidungsbaum 6 | **Core** – der Prüfapparat ist Framework-Gut |
10
+ | Art | Änderung |
11
+ | Dringlichkeit | **Regulär.** Kein Befund, sondern ein Auftrag: Der Lauf dauert dreizehn Minuten und ist die Abnahmeform jedes Releases – er wird zweimal je Release gefahren (D-49) |
12
+
13
+ ## 1. Anlass
14
+
15
+ **Dies ist das zweite Release in Folge, dessen Anlass nicht ein Befund im Repositorium
16
+ ist** – und das erste, dessen Anlass überhaupt kein Befund ist. Der Auftrag kam vom
17
+ Framework Owner und nennt vier Punkte. Drei Fallstricke standen in der Übergabe daneben;
18
+ alle drei sind hier schon einmal teuer gewesen.
19
+
20
+ ### Gemessen, bevor etwas gebaut wurde
21
+
22
+ `python leitwerk-core/tests/scripts/probe-pruefungen.py .` gegen `main` (`750ce10`,
23
+ 0.45.0), am 2026-09-15:
24
+
25
+ | Größe | Wert |
26
+ |---|---|
27
+ | Laufzeit | **13 min 07 s** (787 s), streng seriell |
28
+ | Ergebniszeilen | 208 (144 Sonden, 57 Gegenproben, 7 Selbstproben) |
29
+ | Ausführungseinheiten | 128 – 79 `sonde(`, 6 `sonde_ohne_wert(`, 29 `gegenprobe(`, 14 `buendel(` |
30
+ | Exit-Code | 0 |
31
+
32
+ **Der Lauf sagt nicht, wo die dreizehn Minuten hingehen.** Er sagt auch nicht, was ein
33
+ Bündel belegen soll: Die 114 Einzelsonden tragen seit jeher einen erklärenden Text, die
34
+ 14 Bündel tragen **keinen** – man sieht eine Folge von Meldungen und muss aus ihr
35
+ erraten, welche Frage sie zusammen beantworten.
36
+
37
+ ### Befund am Rande, und er ist der einzige echte dieses Antrags
38
+
39
+ An **vierzehn** Stellen räumt das Skript sein Arbeitsverzeichnis mit
40
+ `shutil.rmtree(..., ignore_errors=True)` ab. Der Kopfsatz des Skripts sagt: *„Gearbeitet
41
+ wird auf einer Kopie; das Repositorium selbst bleibt unberührt."* Die zweite Hälfte
42
+ dieser Zusage – dass die Kopie danach wieder weg ist – hat **keinen Mechanismus**: Ein
43
+ Lauf, der 128 Kopien anlegt und zwanzig davon liegen lässt, sieht Zeile für Zeile genau
44
+ so aus wie einer, der aufgeräumt hat. **Das ist der wiederkehrende Befundtyp dieses
45
+ Projekts** – eine Zusage, die mehr verspricht, als sie durchsetzt – und diesmal steht er
46
+ im Prüfapparat selbst, also an der Stelle, die ihn sonst bei anderen findet.
47
+
48
+ ## 2. Vorgeschlagene Änderung
49
+
50
+ **Vier Gegenstände, alle in `tests/scripts/probe-pruefungen.py`.**
51
+
52
+ 1. **Ausführungsplan statt Sofortlauf.** `sonde()`, `sonde_ohne_wert()`, `gegenprobe()`
53
+ und `buendel()` **melden** ihre Einheit an, statt sie auszuführen; gefahren wird am
54
+ Ende durch einen Läufer. Die Aufrufstellen bleiben **zeichengleich** – geändert hat
55
+ sich allein, wann der Aufruf seine Arbeit tut.
56
+ 2. **Nebenläufigkeit.** Der Läufer fährt die Einheiten auf `--bahnen N` Bahnen,
57
+ Vorgabe 8. Jede Einheit arbeitet ohnehin auf ihrer eigenen Kopie beziehungsweise
58
+ Installation; **innerhalb** eines Bündels bleibt es streng seriell.
59
+ `--bahnen 1` ergibt den seriellen Lauf von 0.45.0.
60
+ 3. **Name, Beschreibungssatz und Laufzeit je Einheit.** Jede Einheit trägt einen Namen
61
+ (Prüfungsnummer beziehungsweise Funktionsname) und einen Satz von **5 bis 30 Worten**.
62
+ Der Satz eines Bündels steht als Kopfzeile über dessen Zeilen. Die Laufzeiten stehen
63
+ am Ende, langsamste zuerst, **unterhalb einer Trennlinie**.
64
+ 4. **Ein Aufräumer, der sein Scheitern meldet.** `aufraeumen()` ersetzt die vierzehn
65
+ `ignore_errors=True`-Stellen: drei Versuche über 1,5 s, danach eine eigene
66
+ `AUFRAEUMER`-Zeile mit Pfad und Grund – und sie zählt als Abweichung.
67
+
68
+ Dazu **drei neue Selbstproben**: `B1` zählt die Wortzahl jedes Beschreibungssatzes
69
+ nach, `A1` und `A2` messen den Aufräumer selbst – sein Schweigen beim Gelingen und
70
+ seine Meldung an einem Verzeichnis, das sich nicht löschen lässt. Dazu **zehn
71
+ verlängerte Sätze** bei Einzelsonden, die bisher nur eine Kennung trugen
72
+ („Pack ohne Auskunftsabschnitt", drei Worte).
73
+
74
+ ## 3. Die drei Fallstricke – und wie ihnen begegnet wird
75
+
76
+ | # | Fallstrick | Wie er umgangen wird |
77
+ |---|---|---|
78
+ | **F1** | **Prüfung 40 rechnet die Sondenmenge aus zwei wörtlichen Mustern dieser Datei aus** – dem Aufruf `sonde(` mit seiner Kennung und `melde(` mit der Art `SONDE` und ihr (D-86). Ein Umbau auf eine Registry mit eigener Schreibweise hätte die Sonden unsichtbar gemacht – und Prüfung 40 hätte **leise bestanden**, weil eine leere Menge keine Abweichung ist | Beide Muster stehen unverändert an ihren Aufrufstellen; `sonde()` und `melde()` behalten Namen und Signatur. **Nachgezählt:** Vorher wie nachher `6 und 18 bis 44` – dieselbe Menge, dieselbe ausgerechnete Schreibweise. Der Anmelder heißt `eintragen()` und **nicht** `anmelde()`, weil letzteres den Suchtext `melde(` enthielte und Prüfung 40 eine Sonde erfände, die es nicht gibt |
79
+ | **F2** | **Die Abnahmeform verlangt seit D-49 zeilengleiche Ausgabe in beiden Kodierungsumgebungen.** Nebenläufige Einheiten schreiben in beliebiger Reihenfolge, und eine Laufzeit ist nie zweimal dieselbe | Keine Einheit schreibt selbst; jede **sammelt** ihre Zeilen (`melde()` und das neue `notiz()` an der Stelle von `print()`). Der Läufer gibt sie in der Reihenfolge der **Anmeldung** aus, nicht der Fertigstellung. Die Laufzeiten stehen unterhalb der Trennlinie und sind ausdrücklich nicht Teil des Vergleichs |
80
+ | **F3** | **Ein Bündel ist die kleinste Einheit, nie seine Teile.** Seine Fälle bauen aufeinander auf: eine Installation, Schritt für Schritt präpariert und zurückgesetzt | Das Bündel ist **eine** Einheit des Plans. Nebenläufig sind allein die Einheiten gegeneinander; innerhalb eines Bündels ändert sich nichts. Es bekommt **eine** Laufzeit, nicht 35 |
81
+
82
+ ## 4. Vorlage zur Entscheidung
83
+
84
+ | Nr. | Frage | Vorschlag | Preis |
85
+ |---|---|---|---|
86
+ | **E1** | **Wohin mit der Laufzeit, wenn D-49 zeilengleiche Ausgabe verlangt?** | **Nur in einen Auswertungsblock am Ende**, unter einer Trennlinie, die sich selbst als nicht Teil der Abnahme bezeichnet. Die Ergebniszeilen bleiben Zeichen für Zeichen vergleichbar | **Man sieht die Laufzeit einer Einheit nicht neben ihrem Ergebnis**, sondern muss unten nachsehen. Verworfen: die Laufzeit in jede Ergebniszeile (der Vergleich bräuchte dann einen Filter – und eine Abnahmeform, die einen Filter braucht, ist keine mehr); ein Schalter `--zeiten` (eine Messung, die opt-in ist, wird nicht gefahren, und eine Zahl, die niemand sieht, verhindert keine Laufzeitregression) |
87
+ | **E2** | **Woher kommt der Beschreibungssatz – aus dem vorhandenen Text oder aus einem neuen Feld?** | **Der vorhandene Text IST der Satz.** Zehn zu kurze werden verlängert, die vierzehn Bündel bekommen ihren Satz neu. **Ein Text je Einheit** | **Zehn gewachsene Ergebniszeilen** im Vergleich zu 0.45.0. Verworfen: ein zweites Feld neben dem Kurztext – zwei Texte je Einheit, die auseinanderlaufen können, und das ist **genau der Befundtyp dieses Projekts**: ein zweites Register neben dem ersten (D-78) |
88
+ | **E3** | **Wird die Wortzahl durchgesetzt, und wo?** | **Im Skript selbst, als Selbstprobe `B1`.** Sie zählt beim Lauf; ein Ausreißer ist eine Abweichung. Sie reiht sich in die Selbstprobenfamilie ein, die seit 0.38.0 den Präparations- und den Kennungswächter misst | **Sie zählt Worte, nicht Sinn** – ein Satz aus achtzehn Füllwörtern besteht sie, und das steht in ihrem Kopfkommentar. Verworfen: eine neue Prüfung 45 im Validator (sie bräuchte nach D-23 selbst Sonde und Gegenprobe und läse einen Text über ein Muster – die Bauform, an der der erste Entwurf von Prüfung 40 schon einmal gefallen ist) |
89
+ | **E4** | **Zählt eine liegengebliebene Kopie als Abweichung des Laufs?** | **Ja, mit eigener Zeile und Exit-Code 1**, nach drei Versuchen über 1,5 s. Ein stumm liegengebliebenes Arbeitsverzeichnis ist genau der Ausfall, gegen den dieses Repositorium gebaut ist | **Ein Lauf kann an etwas rot werden, das über keine Prüfung etwas aussagt.** Das ist gewollt und der Grund für die drei Versuche: Unter Windows hält ein gerade beendeter Unterprozess eine Datei noch einen Augenblick fest, und eine Meldung, die auch ohne Anlass kommt, wird binnen eines Releases abgeschaltet. Verworfen: melden ohne zu zählen (**eine Meldung, die nichts ändert, wird überlesen – das ist der Befund von 0.45.0**, wo eine Warnung einunddreißig Releases lang überlesen wurde) |
90
+ | **E5** | **Wie viele Bahnen, und woher kommt die Zahl?** | **Vorgabe 8, Schalter `--bahnen N`, `--bahnen 1` als serieller Rückfallweg.** Nebenläufig über Threads: Die Wartezeit liegt im Unterprozess, nicht im Python-Code | **Eine feste Zahl passt nie zu jeder Maschine.** Verworfen: die Kernzahl des Rechners als Vorgabe (hier 32) – dann hängt die Laufzeit von der Maschine ab und zwei Läufe sind unvergleichbar, und der Engpass ist die Platte: Jede Einheit legt eine eigene Kopie des Repositoriums an |
91
+ | **E6** | **Was tut ein unerwarteter Fehler in einer Einheit?** | **Er fällt dieser einen Einheit zur Last** – als `FEHL`-Zeile mit Rückverfolgung –, statt den ganzen Lauf abzubrechen | **Ein Lauf kann jetzt grüne Zeilen neben einem Abbruch zeigen.** Derselbe Zuschnitt, den `buendel()` seit `CR-2026-060` E2 für Präparationsfehler hat: Ein Abbruch, der 128 ungefahrene Einheiten mitnimmt, verbirgt mehr, als er zeigt |
92
+ | **E7** | **Bekommt ein Bündel eine Kopfzeile in der Ergebnisausgabe?** | **Ja.** Sein Satz steht über seinen Zeilen – sonst wäre der Satz nur in der Auswertung sichtbar, also unterhalb der Trennlinie und außerhalb der Abnahme | **Neunzehn Zeilen mehr** in der Abnahmeform (208 → 227). Das ist eine gewollte Änderung der Vergleichsgrundlage, und sie ist es genau einmal |
93
+ | **E8** | **Eigenes Release oder Anhang?** | **Eigenes Release `0.46.0`.** Der Prüfapparat selbst ist der Gegenstand; das gehört sichtbar in den Änderungsverlauf | **Das einundzwanzigste Release in vier Tagen** – und das erste ohne jeden Befund als Anlass |
94
+ | **E9** | **Wird der Aufräumer selbst gemessen?** | **Ja, als Selbstproben `A1` und `A2`.** Eine Meldung, die geschrieben und nie ausgelöst wurde, ist nach D-23 nicht vorhanden – und es wäre ausgerechnet die Meldung, die an die Stelle von `ignore_errors=True` tritt. Gemessen wird gegen eine **Hilfseinheit**, sonst zählte der absichtlich herbeigeführte Ausfall als Abweichung des Laufs | **Der Ausfall muss je Betriebssystem anders hergestellt werden:** unter Windows über eine offene Datei, unter POSIX über das entzogene Schreibrecht des Verzeichnisses. Ohne diese Unterscheidung wäre die Selbstprobe auf einem der beiden Systeme eine Zeile, die nichts misst. Preis sind 1,5 s Laufzeit, weil `A2` die drei Versuche wirklich abwartet |
95
+
96
+ ## 5. Entscheidung
97
+
98
+ | Feld | Inhalt |
99
+ |---|---|
100
+ | Entscheidung | **Angenommen.** E1 bis E5 wie vorgelegt am 2026-09-15 durch den Framework Owner entschieden; E6 bis E9 folgen aus ihnen und sind mit der Umsetzung entschieden. **E9 ist beim Bauen dazugekommen:** Der Aufräumer wäre sonst eine Zusage ohne Sonde gewesen – nach D-23 also nicht vorhanden |
101
+ | Datum | 2026-09-15 |
102
+ | Entscheidende Rolle | `<FRAMEWORK_OWNER>` |
103
+ | Decision-Log-Einträge | D-94 (die Laufzeit steht unterhalb der Trennlinie, die Ergebniszeilen bleiben die zeilengleiche Abnahmeform), D-95 (jede Einheit trägt Name und Beschreibungssatz, und die Selbstprobe zählt ihn nach), D-96 (ein Aufräumer, der scheitert, meldet es und zählt als Abweichung) |
104
+ | Auflagen | **Der Gegenbeweis ist hier kein Fallen von Sonden, sondern ein Abgleich:** Der Umbau ändert keine Prüfung, also darf er keine Ergebniszeile ändern außer den angekündigten. Zu belegen sind (a) die Sondenmenge vor und nach dem Umbau, (b) die Gleichheit der Ergebniszeilen zwischen `--bahnen 1` und `--bahnen 8`, (c) die Gleichheit in beiden Kodierungsumgebungen nach D-49, (d) die Abweichung gegen 0.45.0 Zeile für Zeile – **erwartet sind genau 10 verlängerte Sätze, 16 Bündelkopfzeilen und 3 Selbstprobenzeilen, sonst nichts** |
105
+ | Ziel-Release | `0.46.0` |
106
+ | Umsetzung | umgesetzt mit `0.46.0` |