@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,1104 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ validate-framework.py – Strukturelle Validierung des Frameworks und eines Project Overlays.
4
+
5
+ Aufruf (im Wurzelverzeichnis des Repositorys):
6
+ python3 .koolie/core/tests/scripts/validate-framework.py [--strict-overlay]
7
+ [--check-overlay-ready] [--mermaid] [--root PFAD]
8
+
9
+ Prüft (statisch, ohne laufenden KI-Client):
10
+ 1. Pflichtdateien und -verzeichnisse
11
+ 2. Berechtigungsdatei: gültiges JSON, Kernregeln vollständig (Abgleich gegen die
12
+ Kernquelle framework/runtime/permissions.json), keine Kernverbote in allow
13
+ 3. weitere JSON-Dateien der Laufzeitschicht (Hooks, mcp-Vorlage): gültiges JSON
14
+ 4. .devin/rules/*.md: Frontmatter (description, trigger, globs), Zeichenlimits
15
+ 5. Skills (.devin/skills/ und die Quellablagen der Packs): Pflichtdateien, Frontmatter,
16
+ Metadatenblock, Pflichtabschnitte,
17
+ Trigger-Regel (schreibende Skills nur user-getriggert), Beispiele und Testfälle
18
+ 6. Verbotene Inhalte (ohne erzeugte Lockdateien): Secret-Muster – dieselben Kategorien,
19
+ die der Schutz-Hook in einer Werkzeugeingabe blockiert –, E-Mail-Adressen, IP-Adressen,
20
+ interne Hostnamen, URLs außerhalb der Quellen-Allowlist, projektspezifische Sperrbegriffe
21
+ (.koolie/project-overlay/forbidden-terms.txt)
22
+ 7. Platzhalter: nur registrierte Platzhalter (.koolie/core/docs/PLACEHOLDER_REGISTRY.md)
23
+ 8. Overlay-Manifest: Kopfschlüssel, Pflichtfelder je Dokumenteintrag, Aufzählungswerte;
24
+ seit 1.6.0 auch, dass `path` und – bei `load: rule` – `rule_file` existieren (D-360)
25
+ 9. --strict-overlay: der **aktive** Zustand - keine offenen <TBD> in
26
+ sicherheitsrelevanten Overlay-Feldern; Status aktiv an *jeder* Stelle, an der das
27
+ Overlay ihn erklärt (Steckbrief und Aktivierung)
28
+ 9a. --check-overlay-ready: die **Aktivierungsreife eines Kandidaten** - derselbe Inhalt,
29
+ aber der Status ist noch nicht aktiv und an allen Stellen gleich. Ohne diese Pruefung
30
+ verlangte der dokumentierte Ablauf, was er herstellen sollte (B08, D-57)
31
+ 10. --mermaid: Syntaxprüfung aller Mermaid-Blöcke mit mmdc (falls installiert)
32
+ 11. Codeblöcke mit vier oder mehr Backticks (brechen die Dokumentassemblierung) –
33
+ einschließlich der Quellen unter <CORE_DIR>/build/doc, aus denen sie entsteht
34
+ 12. Querverweise (FW-KO-04): Markdown-Links und in Backticks genannte Framework-Pfade
35
+ zeigen auf existierende Dateien oder Verzeichnisse
36
+ 13. Versionskette (FW-VN-01): Overlay-Version an allen drei Ablageorten gleich, Steckbrief-
37
+ angabe zur kompatiblen Framework-Version passend zu <CORE_DIR>/VERSION, und das
38
+ Versionsfeld jedes Kernartefakts in der Form MAJOR.MINOR.PATCH
39
+ 14. Clientname im Kern (D-02, D-28, D-129): Der Kern nennt keinen Client - weder als
40
+ Handelnden noch als Produkt, und kein Platzhalter traegt den Namen. Die Namen
41
+ stammen aus den Pack-Kennungen, die Ausnahmen aus NEUTRAL_AUSNAHMEN (dieselbe
42
+ Menge wie Pruefung 48). Bis 0.57.0 war der Produktname MIT ZUSATZ zulaessig; die
43
+ Ausnahme hatte in ihrem Geltungsbereich keinen einzigen berechtigten Fall -
44
+ fuenfzehn Fundstellen in zwoelf Traegern, jede mit einer Aussage ueber das Produkt
45
+ 15. Hook-Interpreter (AP2-CC-13, D-29): Der Interpreter der Hook-Aufrufe startet auf
46
+ dieser Maschine wirklich Python. Geprueft wird die Wirkung, nicht die Anwesenheit
47
+ des Namens - unter Windows ist 'python3' haeufig ein Alias ohne Interpreter
48
+ 16. Hook-Abdeckung (AP2-CC-16, D-30): Der Schutz-Hook erkennt jeden Werkzeugnamen,
49
+ den ein Client Pack in hook_tools abbildet. Geprueft durch Aufruf mit einer Sonde,
50
+ die er blockieren muss - ein Listenvergleich belegt Uebereinstimmung, nicht Wirkung
51
+ 17. Fail-closed (D-31): Der durchsetzende Hook verhaelt sich so, wie das Pack es zusagt -
52
+ geprueft am Skript und an der erzeugten Konfiguration, nicht am Manifestfeld
53
+ 18. Hook-Ablageort (D-32): keine verwaiste Hook-Datei neben der wirksamen, und keine
54
+ root-template-Vorlage, die eine solche Datei als geliefertes Artefakt fuehrt
55
+ 19. Quellenauskunft (D-34, D-37): Jedes Client Pack fuehrt den Abschnitt
56
+ "Anweisungs- und Konfigurationsquellen ausserhalb des Projekts", mit mindestens einer
57
+ Quellenzeile oder einem datierten Abwesenheitsbeleg. Belegt Anwesenheit, nicht
58
+ Richtigkeit - siehe Kopfkommentar der Pruefung
59
+ 20. Dokumenttabellen (CR-2026-036): Die Client-Spalten von PLACEHOLDER_REGISTRY.md und
60
+ RUNTIME_GLOSSARY.md stimmen je Pack mit dessen manifest.json ueberein. Belegt
61
+ Uebereinstimmung, nicht Richtigkeit; seit 1.14.0 hat jedes Pack eine Spalte (D-421)
62
+ 21. Hook-Skripte (D-30, CR-2026-037): Ein Hook-Skript des Kerns leitet seine Pfade nicht
63
+ aus einer clientgebundenen Umgebungsvariablen oder Laufzeitschicht ab; es bekommt sie
64
+ als Argumente aus der Semantikabbildung
65
+ 22. Importsteuerung (D-37): Die installierte Berechtigungsdatei fuehrt sie so, wie das
66
+ Manifest sie abbildet. Belegt Anwesenheit und Uebereinstimmung, nicht Wirkung -
67
+ die Benutzerkonfiguration der Arbeitsstation hat Vorrang (K-27)
68
+ 23. Normative Kommentare (D-38): kein normatives Schluesselwort in einem HTML-Kommentar
69
+ der Laufzeitartefakte - ein Kommentar erreicht nicht jede Sitzung (ERH-01, K-28)
70
+ 24. Regelablage (D-36): In der Vorlage der Regelablage liegt nur, was dem Nummernschema
71
+ der Regeltexte folgt; erklaerender Text steht in der Laufzeit-README eine Ebene hoeher
72
+ 25. Ausfall mit Ersatz (D-41): Eine Matrixzeile eines Client Packs auf [NICHT ABBILDBAR]
73
+ benennt den Ersatz - oder haelt ausdruecklich fest, dass es keinen gibt
74
+ 26. Werkzeugabwesenheit (D-47): Eine erklaerte Abwesenheit in hook_tools_absent ist
75
+ belegt und folgerichtig - sie darf keine Werkzeugklasse aus der Durchsetzung nehmen
76
+ 27. Zusagenfelder (D-50): Verwirft ein Pack das Skill-Frontmatter-Feld permissions oder
77
+ triggers, benennt es den Ersatz - ein zusagentragendes Feld entfaellt nicht ersatzlos
78
+ 28. Lesesperre gegen Schreibsperre (D-55, B07): Die Deklaration von <EXCLUDED_PATHS>
79
+ nennt keinen Strukturpfad des Frameworks. Diese Pfade sind schreibgeschuetzt, nicht
80
+ lesegesperrt - als Ausschluss erzeugen sie eine Lesesperre auf die eigenen Regeln
81
+ 29. K3-Kategorien (D-52, B09): Kurzform, Langform, Laufzeitregel, Entscheidungsbaum und
82
+ Checkliste fuehren dieselben acht Kategorien, und keine traegt eine Bedingung
83
+ 30. Grenzfaelle (B07, B09): Die Grenzfalltabelle ist vollstaendig, jede Spalte gefuellt,
84
+ jede entschiedene Auslegungsfrage durch mindestens einen Grenzfall gedeckt
85
+ 31. Durchsetzungstiefe (D-60): Die Summen der Fachmatrix eines Client Packs sind aus ihr
86
+ ausgerechnet - Zeilenzahl und Anzahl je Einstufung. Eine Zeile zaehlt bei ihrer
87
+ schwaechsten Einstufung; eine Kanalgrenze ist keine technische Durchsetzung (D-47)
88
+ 32. Hook-Eingabeschema (D-62, B06): Der Schutz-Hook wird mit dem VOLLSTAENDIGEN
89
+ Umschlag jedes aufgezeichneten Schemas aufgerufen, nicht mit selbst gebauter
90
+ Eingabe - und er darf an einem Feld des Umschlags nicht haengenbleiben
91
+ 33. Werkzeugsperre je Skill (D-64 bis D-66): Die erzeugte Fassung bildet
92
+ permissions.deny ab, und kein Eintrag traegt ein Argumentmuster - ein solcher
93
+ wirkt gemessen LAUTLOS gar nicht
94
+ 34. Startwerkzeug fuer Unteragenten (D-70): Ein Pack nennt es in agent_start_tools
95
+ oder erklaert seine Abwesenheit ausdruecklich; wer Zeile A1 ohne offenen
96
+ Beleg zusagt, muss nennen statt erklaeren. Der Vorbehalt steht seit 0.87.0
97
+ auf der Nachfolgeform BELEG OFFEN - die Markerform ist abgeschafft (D-291)
98
+ 35. Agentenprofil ohne Startwerkzeug (D-73): Weder agent_frontmatter.tool_names
99
+ bildet eines ab, noch nennt ein ausgeliefertes Profil eines. Eine Verankerung -
100
+ sie faengt heute nichts
101
+ 36. Zellen des Decision Logs (D-75): Jede Tabellenzeile fuehrt so viele Zellen wie
102
+ der Kopf ihrer Tabelle; ein maskierter Strich zaehlt als Inhalt
103
+ 37. Berechtigungskoerbe (D-77): Die drei Koerbe der installierten Datei werden gegen
104
+ die aus der Kernquelle erzeugte Regelmenge gehalten. Fehlen ist immer ein Fehler,
105
+ Ueberzaehliges nur in ask und allow; ein gefuellter Befehlsschlitz traegt das
106
+ Praefixzeichen des Clients nicht
107
+ 38. Werkzeugabbildung des Frontmatters (D-78 bis D-80): Jedes Verb des
108
+ Frontmatter-Vokabulars ist je Pack abgebildet oder ausdruecklich als nicht
109
+ abgebildet erklaert; die Sperrliste hook_tools ist fuer kein Verbpaar enger als
110
+ die Vorabfreigabe tool_names; keine Quelle nennt ein Verb ausserhalb des Vokabulars
111
+ 39. Vorabfreigabe des Skillaufrufs (D-81 bis D-84): Jeder ausgelieferte Skill des
112
+ Kerns hat genau eine allow-Regel und jede Regel nennt einen ausgelieferten Skill;
113
+ kein Musterzeichen in einer Skill-Regel - gemessen gaebe es lautlos nichts frei;
114
+ die Skillwahl steht an allen vier Regeltraegern
115
+ 40. Register des Pruefapparats (D-85, D-86): Dieses Register ist lueckenlos und endet
116
+ bei der hoechsten Nummer, die die beiden Pruefskripte nennen; die Sondenmenge steht
117
+ im Satz darunter, im Kopfsatz von probe-pruefungen.py und in FW-KO-01 in derselben
118
+ ausgerechneten Schreibweise; die Grenzfallanzahl in FW-KO-05 ist die gezaehlte
119
+ 41. Abwesenheitsbeleg (D-88): Eine erklaerte Werkzeugabwesenheit weist sich als
120
+ Enthaltung aus oder belegt sich mit Datum und Fundstelle - eine blosse Behauptung
121
+ nimmt eine Werkzeugklasse aus der Durchsetzung und begruendet es
122
+ 42. Schlitzinhalte (D-90, D-91): Ein gefuellter Befehlsschlitz der Berechtigungsdatei
123
+ traegt den Befehl, den Abschnitt 5 oder 6 des Overlays fuer seinen Platzhalter
124
+ erklaert; ein Schlitz ohne erklaerten Befehl deckt keinen Ueberschuss. Geprueft
125
+ werden die drei BEFEHLSSCHLITZE, nicht die vier Pfadschlitze des deny-Korbs - die
126
+ stehen dort, wo Ueberzaehliges ohnehin zulaessig ist, und ihr Vergleich waere n:1.
127
+ Ohne Overlay enthaelt sie sich; fehlt dort ein Platzhalter, meldet sie es
128
+ 43. Hook-Block der Berechtigungsdatei (D-92): Fuehrt ein Pack seine Hooks dort - und
129
+ beide ausgelieferten tun das -, traegt die Datei einen nichtleeren
130
+ PreToolUse-Block. Eine Konfiguration in der eigenen Hook-Datei des Packs ist keine,
131
+ weil der Client sie nicht liest; gemessen war der Hook eines Projekts so
132
+ einunddreissig Releases lang stumm, bei 0 Fehlern im Lauf. Geprueft wird das
133
+ VORHANDENSEIN - den Inhalt pruefen 15, 16 und 17
134
+ 44. Register der Uebungspraeparationen (D-93, D-131): Jede Kennung UEB-NN, die eine
135
+ Vorbedingung des Testkatalogs oder eines dezentralen Testblatts nennt, steht im
136
+ Register in onboarding/exercises/README.md - und jede registrierte Kennung wird von
137
+ mindestens einem Testfall gebraucht. DRITTER GEGENSTAND seit 0.58.0: Jede
138
+ registrierte Zeile fuehrt eine nichtleere Belegzelle. Sie gleicht ZWEI REGISTER ab,
139
+ nicht ein Register gegen das Uebungsrepositorium: Das liegt ausserhalb dieses
140
+ Repositoriums, und ob eine Praeparation dort wirklich liegt, sieht kein Validator
141
+ 45. Bytecode des Kerns (D-97): Die .gitignore des Projekts deckt __pycache__ ab,
142
+ und unter <CORE_DIR>/ ist kein Bytecode versioniert. Zwei Gegenstaende, weil
143
+ einer nicht reicht: git liest die .gitignore fuer bereits verfolgte Dateien
144
+ nicht. Gegenstand 2 laeuft nur, wo git erreichbar ist - sonst sagt die
145
+ Pruefung das als Warnung, statt stumm auszufallen. Gegenstand 3 (D-383), nur
146
+ im Quellrepositorium: Die .gitignore schliesst jedes Wurzelerzeugnis aller
147
+ Client Packs aus - abgeleitet aus shared_core und shared_seed der Manifeste
148
+ 46. Der 1.0.0-Stand (D-98, D-99): Die vier maschinell zaehlbaren Kriterien
149
+ aus D-11 werden ausgerechnet und gegen die Standzeile in docs/ROADMAP.md
150
+ gehalten - Markerfundstellen, offene Ergebniszellen, Modulstatus auf
151
+ `entwurf`, Decision Records auf `entschieden (Vorschlag)`. Abweichung in
152
+ BEIDE Richtungen ist ein Fehler. Am 2026-09-15 lagen alle vier Zahlen
153
+ daneben, ohne dass eine je falsch geschrieben worden waere: Jede war das
154
+ richtige Ergebnis einer Zaehlregel, die weniger kann als ihr Kriterium
155
+ verlangt. Kriterium 5 zaehlt sie nicht - das ist eine Enthaltung.
156
+ SEIT 0.87.0 IST KRITERIUM 1 EINE RUECKFALLSPERRE UND KEIN ARBEITSVORRAT
157
+ (D-291): Die Markerform ist abgeschafft, die Zahl steht auf null, und was
158
+ der Zaehler ab jetzt meldet, ist ihre WIEDEREINFUEHRUNG. Die Null ist
159
+ gemessen und nicht konstruiert, und das ist belegt: Sonde 46c legt einen
160
+ Marker in den Kern und verlangt die Meldung, Gegenprobe 46c legt einen in
161
+ ein datiertes Protokoll und verlangt ihr Ausbleiben - beide bringen ihren
162
+ Gegenstand SELBST mit und sind vom Schnitt nicht betroffen (D-23)
163
+ 47. Statusvokabular jedes Modultraegers (D-105, D-108): Jeder Steckbrief des Kerns
164
+ fuehrt eine Statuszeile, und ihr Wert gehoert zum Vokabular aus
165
+ 08-skill-conventions.md Abschnitt 7. Der Ausfuellschlitz einer Vorlage gehoert
166
+ ihr allein - in beide Richtungen. Bis 0.50.0 griff die Vokabularregel nur in
167
+ einer SKILL.md, und der Modultraeger war ueber die Zeile definiert, die er
168
+ tragen soll: Wer sie weglaesst, entkommt dem Lebenszyklus. Zwoelf taten es
169
+ 48. Werkzeugneutralitaet des Kerns (D-02, D-128): Kein anweisender Traeger des Kerns
170
+ nennt einen Pfad oder Dateinamen, der genau einem Client Pack gehoert. Die Marken
171
+ stammen aus den runtime_placeholders der Manifeste, nicht aus einer gepflegten
172
+ Liste. Ausgenommen sind Chronik, Werkzeuge und die Abbildungstabellen; die
173
+ Gattungen stehen in docs/RUNTIME_GLOSSARY.md. In tests/TEST_CATALOG.md steht die
174
+ Regel nur vor der letzten Zelle - dort ist ein Pfad der Beleg einer Messung. Die
175
+ Regel galt seit 0.31.0 und wurde von nichts durchgesetzt: Pruefung 12 liest nur
176
+ Token in Backticks, meldet nur Pfade, die es NICHT GIBT, und fuehrte ihre eigenen
177
+ Wurzeln clientgebunden. Siebzehn Fundstellen in vierzehn Traegern
178
+ 49. Ausdruecklicher Skill-Aufruf im Testkatalog (D-146): Nennt der Ausloeser eines
179
+ Testfalls mit Pruefmethode `sitzung` einen Kernskill, dessen Quelle `triggers`
180
+ ohne `- model` fuehrt, muss er ihn als `/name` nennen. Ein solcher Skill ist nur
181
+ ueber den ausdruecklichen Aufruf einer Person erreichbar - das Client Pack
182
+ `claude-code` bildet die fehlende Modellzulassung auf `disable-model-invocation`
183
+ ab. Ein nicht-interaktiver Messlauf bekommt sonst eine Abweisung statt des
184
+ Ablaufs, und der Testfall misst etwas anderes als seinen Gegenstand. Gemessen am
185
+ 2026-09-18 an `FW-SC-01`: Der Hauptlauf rief `fw-change-small` auf, wurde
186
+ abgewiesen, arbeitete den Ablauf nicht nach - und damit fiel Schritt 3 des Skills
187
+ aus, der die Verwender der geaenderten Einheit erhebt. Neun von zwoelf Skills
188
+ betroffen, vier Fundstellen im Katalog
189
+ 50. Vollstaendigkeit des Klaerungspunktregisters (D-147): Jede im Kern genannte
190
+ Kennung `K-NN` steht als Zeile im Register des Decision Logs. Ausgenommen sind
191
+ allein die belegten synthetischen Kennungen des Pruefapparats; ihre Menge steht in
192
+ dem Dokument, das die Regel traegt, und wird von dort abgeleitet. Am 2026-09-18
193
+ fehlten zwei: `K-34` seit 0.32.0 in sieben Traegern (Stand vor der Behebung) - darunter ein Manifest und
194
+ eine Faehigkeitsmatrix -, `K-55` von CR-2026-083 in drei Traegern als neu
195
+ angekuendigt und nie eingetragen. Die Uebersicht der offenen Punkte war beide Male
196
+ zu klein, und nichts hat es gemeldet
197
+ 51. Ausfuellschlitz fuer einen festgelegten Overlay-Wert (D-150): Traegt die
198
+ Kontextquellentabelle der Overlay-Vorlage fuer ein Feld einen FESTEN Wert, darf die
199
+ Overlay-Laufzeitfassung fuer dasselbe Feld keinen <TBD>-Schlitz fuehren. Die
200
+ Feldmenge ist aus der Vorlage ABGELEITET. Eine Regel kann als Satz oder als Schlitz
201
+ ausgedrueckt sein, und ein Sweep nach der Formulierung findet nur den Satz: 0.33.0
202
+ hat die Domain-Ausnahme in sechzehn Traegern angefasst, davon acht anweisenden -
203
+ darunter eine Datei im selben Verzeichnis; rules/20-project-overlay.md war nicht
204
+ darunter, weil dort kein Satz stand. Die
205
+ Laufzeitfassung bot dreiunddreissig Releases lang an, was ihre eigene Quelle
206
+ ausschliesst (Grenzfall G-13)
207
+ 52. V6-Gegenstand mit Freigabefolge (D-151): In keiner anweisenden Fassung steht ein
208
+ Gegenstand der V6-Zeile in einer Einheit, die zugleich `Kontrollstufe hoch` und eine
209
+ Umsetzungsfreigabe traegt. V6 ist auch nach Freigabe nicht delegierbar; die
210
+ Abgrenzung trennt Anwendungslogik vom Betrieb (D-53). Die Begriffe stammen aus der
211
+ V6-Zeile selbst, ausgenommen ist die Langform, die sie traegt - sie MUSS beide
212
+ Seiten nennen. Zwei Fassungen fuehrten beides in EINER Aufzaehlung, sechzig Releases
213
+ lang (Grenzfaelle G-05 und G-06)
214
+ 53. Kriterium-2-Kette des Releaseplans (D-153): Was ein Posten des Releaseplans in
215
+ docs/ROADMAP.md erreicht, ist der Ausgangswert des naechsten, und der letzte Wert ist
216
+ null - Kriterium 2 muss dort ankommen. Sie beurteilt NICHT, ob eine Vorhersage
217
+ stimmt; sie prueft, ob die Tabelle mit sich selbst uebereinstimmt. Das Protokoll zu
218
+ 0.56.0 hatte ausdruecklich entschieden, die Vorhersagen ungeprueft zu lassen - mit
219
+ 0.60.0 ist eingetreten, was eine Pruefung verhindert haette: Eine Zelle wurde aus
220
+ einem Posten genommen, seine Zahl nachgezogen, die des Folgepostens nicht. Die Kette
221
+ riss um eins und wurde so gemergt
222
+ 54. Zusatzschluessel auf der deklarierten Ebene (D-155): Jeder Schluessel aus
223
+ settings_extra steht in der erzeugten Berechtigungsdatei auf der OBERSTEN Ebene,
224
+ jeder aus permissions_extra INNERHALB von permissions - je mit dem deklarierten
225
+ Wert. Ein Pack fuehrt beide Felder, notfalls leer: Der Unterschied zwischen "nicht
226
+ abgebildet" und "gibt es nicht" gehoert deklariert, nicht aus einem fehlenden Feld
227
+ erraten. Die Ebene ist keine Kosmetik - ein Schluessel auf der falschen Ebene wird
228
+ stillschweigend nicht gelesen, und nichts meldet es. Anlass ist eine FREMDE Messung
229
+ (FW-AK-01, CR-2026-087, 2026-09-18): Beim Client des Schwesterpacks ist genau diese
230
+ Bauform als CVE-2026-81376 aufgetreten - der Restricted Mode setzte eine
231
+ eingeschraenkte Arbeitsbereichseinstellung in gepunkteter Schreibweise durch und
232
+ dieselbe in verschachtelter nicht. Behoben in 3.10.31 vom 2026-09-16; die
233
+ verbindliche Zielspanne des Packs devin-desktop liegt vollstaendig davor
234
+ 55. Pflichtplatzhalter, gebunden statt ersetzt (D-160): ZWEI GEGENSTAENDE. (a) Jeder
235
+ Platzhalter, den docs/PLACEHOLDER_REGISTRY.md als "Pflicht vor Aktivierung" fuehrt
236
+ und im Overlay verortet, kommt in der Overlay-Vorlage mindestens einmal vor - sonst
237
+ bietet die Vorlage ihn nie zum Ausfuellen an. (b) Unter --strict-overlay: Jeder
238
+ solche Platzhalter, den ein Traeger der geladenen Laufzeitschicht NENNT, ist im
239
+ aktiven Overlay GEBUNDEN, also dort beim Namen genannt. Ein Overlay, das den
240
+ Platzhalter durch seinen WERT ERSETZT statt ihn zu binden, ist fuer sich stimmig und
241
+ laesst jeden Kerntext unaufloesbar, der denselben Platzhalter traegt. Gemessen am
242
+ 2026-09-18 am Uebungsrepositorium: acht Pflichtplatzhalter ungebunden, davon fuenf
243
+ mit zusammen 65 Fundstellen in der geladenen Schicht - <ISSUE_TRACKER> allein in
244
+ vierzehn Traegern. Der Validator meldete 0 Fehler
245
+ 56. Kein ausgeschlossener Traeger als Vorbedingung (D-161): Keine Vorbedingung des
246
+ Testkatalogs und keines Testblatts verlangt einen Traeger, den dasselbe Overlay
247
+ unter <EXCLUDED_PATHS> fuehrt - weder lesen noch aendern. Aufgeloest wird ueber die
248
+ Bindungszeile des genannten Platzhalters. Gemessen am 2026-09-18: SK-012-P01
249
+ verlangt <MR_TEMPLATE_PATH>, und dessen Wert liegt unter .github/**, das im selben
250
+ Overlay ausgeschlossen ist; drei weitere Zellen erben es ueber "wie P01"
251
+ 57. Kein ungebundener Pflichtplatzhalter als Vorbedingung (D-166): Keine
252
+ Vorbedingung des Testkatalogs und keines Testblatts verlangt einen Pflichtplatzhalter
253
+ als NICHT GESETZT oder UNGEBUNDEN. Sie ist die Kehrseite von 55b: Was 55b im aktiven
254
+ Overlay als Fehler meldet, darf eine Testzelle nicht als Vorbedingung fordern - sonst
255
+ stehen eine Pruefung und ein Testfall desselben Repositoriums gegeneinander, und der
256
+ Testfall ist nur in einem Baum fahrbar, den der Validator beanstandet. Gemessen am
257
+ 2026-09-18: RE-001-N09 verlangte das Uebungs-Overlay "ohne gesetztes
258
+ <ISSUE_TRACKER>", und Pruefung 55b war im SELBEN Release entstanden. Gegen den Skill
259
+ gehalten trifft die Zelle etwas anderes: role-re-ticket nennt den Fall
260
+ "<ISSUE_TRACKER> unbekannt", also Bindung OHNE Wert - ein Ausfuellschlitz, kein
261
+ fehlender Platzhalter. Der Zuschnitt arbeitet auf TEILSAETZEN, nicht auf Zellen: Eine
262
+ Vorbedingung, die den Platzhalter in einem Teilsatz fordert und in einem anderen eine
263
+ Verneinung traegt, ist zulaessig. Die Pflichtmenge wird aus dem Platzhalterregister
264
+ ABGELEITET, nicht gepflegt
265
+ 58. Vollstaendigkeit des Decision-Record-Registers (D-169): Jede im Kern genannte
266
+ Zeichenfolge `D-` mit folgender Ziffer ist eine Kennung der Form D-NNN, und sie
267
+ steht als Zeile im Register des Decision Logs. Ausgenommen sind allein die belegten
268
+ synthetischen Kennungen des Pruefapparats - dieselbe Menge und derselbe
269
+ Ableitungsweg wie bei Pruefung 50. Sie ist deren Schwester eine Kennungsfamilie
270
+ weiter: Pruefung 50 gilt fuer K-, und ihr Muster wuerde den gemessenen Fall auch
271
+ dann nicht treffen, wenn man es auf D- umstellte. Gemessen am 2026-09-18: Die
272
+ Registereintraege der Pruefungen 55 und 56 verwiesen seit 0.63.0 auf zwei Kennungen
273
+ mit einem PLATZHALTER statt einer Zahl; die Meldungen derselben Pruefungen nannten
274
+ die richtigen. Zwischen Ziffer und Platzhalter steht keine Wortgrenze - eine
275
+ Kennung, die die Form knapp verfehlt, ist fuer jeden Zaehler unsichtbar
276
+ 59. Der Overlay-Wert in der Schicht, die ihn durchsetzt (D-171): Unter
277
+ --strict-overlay drei Gegenstaende. (a) Die Laufzeitfassung des Overlays NENNT
278
+ <EXCLUDED_PATHS>, bindet ihn also, statt seinen Wert einzusetzen - das ist 55b eine
279
+ Schicht tiefer. (b) Die Zeile, die ihn nennt, traegt dieselbe Globmenge wie die
280
+ Bindungszeile des Quell-Overlays; massgeblich ist die Quelle. (c) Jeder Glob der
281
+ Quelle hat im deny-Korb der Berechtigungsdatei eine Lese- UND eine Schreibsperre.
282
+ ANLASS: 0.63.0 hat die Sperre eines Overlays von .github/** auf .github/workflows/**
283
+ eingeengt, weil sie sonst die Merge-Request-Vorlage mitsperrt (D-161). Die Einengung
284
+ steht in der QUELLE; die beiden Traeger, die den Client wirklich binden, tragen
285
+ weiterhin den alten, weiteren Wert - unveraendert seit dem ersten Commit jenes
286
+ Repositoriums. Pruefung 56 sah es nicht, weil sie ueber die Bindungszeile der Quelle
287
+ aufloest; 55b nicht, weil sie die BINDUNG prueft und nicht den WERT; --strict-overlay
288
+ nicht, weil es allein den Status vergleicht (CR-2026-044 E4). GRENZE: geprueft wird
289
+ EIN Platzhalter - der einzige mit maschinell vergleichbarer Wertgestalt, der
290
+ zugleich zwei Schichten bindet. Und (c) prueft nur die Richtung Quelle -> Korb:
291
+ Ueberzaehliges bleibt zulaessig, wie schon bei Pruefung 42
292
+
293
+ 60. Der Befehlsschlitz, den der Ausloeser braucht (D-178): Eine sitzung-Zelle, deren
294
+ Ausloeser einen Skill als /name aufruft, dessen Frontmatter einen Befehlsschlitz
295
+ AUSFUEHRT (Exec(<..._COMMAND>) unter permissions), nennt diesen Schlitz in ihrer
296
+ VORBEDINGUNG. ANLASS: FW-SC-01 ist am 2026-09-18 zum dritten Mal gefahren worden
297
+ und zum dritten Mal nicht abnehmbar gewesen - der Lauf hat NICHTS geaendert, weil
298
+ fw-change-small den Testbefehl VOR dem ersten Schreibzugriff verlangt und der
299
+ Befehl im Messbaum im ask-Korb stand; ask ist nicht-interaktiv eine Abweisung
300
+ (D-134). Derselbe Fehler kostete FW-PO-02 einen Durchgang. GRENZE: Geprueft wird
301
+ die NENNUNG des Schlitzes, nicht die Aussage darueber - die Pruefung faengt das
302
+ Vergessen, nicht den Irrtum. Und sie gilt nur fuer sitzung-Zellen
303
+ 61. Das Pruefmittelwort stammt aus dem Vokabular (D-181): Das erste Wort der Spalte
304
+ Pruefmethode ist skript, sitzung oder review - im zentralen Katalog und in den
305
+ dreizehn Testblaettern. ANLASS: Die Blaetter fuehrten bis 0.67.0 das Wort manuell,
306
+ 87 von 87 Zellen. Es steht in keinem Vokabular; es ist das ADJEKTIV aus der
307
+ Definition von sitzung, zum Methodennamen befoerdert, und jedes Blatt erklaerte es
308
+ im eigenen Vorspann. Die Pruefungen 49 und 60 laufen ausdruecklich ueber die
309
+ Blaetter und filtern auf sitzung - beide hatten dort NULL Gegenstand. Nach der
310
+ Umstellung meldete Pruefung 60 sofort ZWANZIG Zellen. GRENZE: Geprueft wird das
311
+ erste Wort gegen eine feste Menge; ein Zusatz dahinter bleibt zulaessig. Nicht
312
+ geprueft wird, ob das Wort das RICHTIGE ist
313
+ 62. Version der Ausgabevorlage (D-185): Keine SKILL.md nennt eine Versionsnummer
314
+ woertlich. Die Ausgabevorlage verweist auf den Steckbrief ("v<Version aus dem
315
+ Steckbrief>"), und der Client setzt sie beim Rendern ein. ANLASS: Gemessen am
316
+ 2026-09-19 im ersten Buendellauf - dreizehn Traeger fuehrten eine woertliche
317
+ Version, ZEHN davon eine andere als ihr eigener Steckbrief. Die drei, die
318
+ uebereinstimmten, sind die drei, deren Version seit der Erstfassung nicht
319
+ gestiegen ist: Die Uebereinstimmung war Stillstand, nicht Pflege. Gefunden hat es
320
+ ein gemessener Lauf selbst, in einer Nebenbemerkung seines Ergebnisberichts
321
+ 63. Der Nummernverweis, der ins Leere zeigt (D-193): Nennt ein anweisender
322
+ Traeger des Kerns eine Datei und dahinter `Abschnitt N` oder `Abschnitt N.M`,
323
+ fuehrt das Ziel eine Ueberschrift mit genau dieser Nummer. ANLASS: Der
324
+ Vorbedingungsdurchgang von Buendel 2 hat gemessen, dass drei Zellen eine
325
+ Bereinigung "nach 02-privacy.md Abschnitt 3.3" erwarten - und dass Abschnitt 3
326
+ jener Datei zehn nummerierte REGELN fuehrte und keine einzige Unterueberschrift.
327
+ Gegen den unberuehrten Vorstand: 30 Verweise in 15 anweisenden Traegern auf vier
328
+ Nummern, die es als Abschnitt nicht gab. Dieselbe Form bedeutete in DERSELBEN
329
+ Datei zweierlei - `Abschnitt 2.1` war eine Ueberschrift. Aufzeichnungen sind
330
+ ausgenommen (D-141); ihre Liste ist keine neue, sondern NEUTRAL_CHRONIK
331
+ 64. Die Ausgabemarke, die der Skill nicht verlangt (D-197): Nennt die Spalte
332
+ Erwartetes oder Unzulaessiges Verhalten einer Zelle eine Ausgabemarke
333
+ ([HALT], [RUECKFRAGE]), fuehrt der im Ausloeser aufgerufene Skill sie in
334
+ Abschnitt 5 (Ausgabeformat) oder Abschnitt 6 (Qualitaetskriterien). ANLASS:
335
+ Ausgezaehlt am 2026-09-19 nach dem ABSCHNITT, in dem die Marke steht -
336
+ [RUECKFRAGE] steht in KEINEM Abschnitt 5 und KEINEM Abschnitt 6 der zwoelf
337
+ Skills und ist durchgehend Handlungsmarke; [HALT] ist Ausgabemarke in genau
338
+ dreien. 18 Nennungen in 17 Zellen verlangten mehr, als ihr Skill vorschreibt,
339
+ und ein gemessener Lauf hatte es vorgefuehrt: sk004n01 schrieb [HALT] und
340
+ [RUECKFRAGE] nicht - richtig, denn nur die erste ist verlangt. GRENZE:
341
+ Geprueft wird die Deckung, nicht die Formulierung; die LETZTE Zelle ist
342
+ Ergebnisstatus und damit Aufzeichnung (D-117), dieselbe Spalten-Ausnahme wie
343
+ bei Pruefung 48
344
+ 65. Der Ergebnisstatus ohne Beleg (D-202): Ein Ergebnisstatus ausserhalb von
345
+ `offen` nennt ein Protokoll unter tests/protocols/, und bei Pruefmethode
346
+ `sitzung` zusaetzlich das gemessene Client Pack mit Produktversion (D-117).
347
+ Das Statuswort selbst stammt aus dem Vokabular von TEST_CATALOG.md Punkt 4 -
348
+ abgeleitet aus jener Zeile, nicht gepflegt. ANLASS: Punkt 4 sagt "Ein
349
+ Ergebnisstatus ausser `offen` MUSS auf ein Protokoll verweisen", D-117
350
+ verlangt Pack und Version - und keine der vierundsechzig Pruefungen setzte es
351
+ durch. Gezaehlt am 2026-09-19 ueber alle 125 Ergebniszellen: NULL Verstoesse,
352
+ die Regel trug allein durch Sorgfalt. Gebaut wird sie in dem Release, das
353
+ achtzehn neue `bestanden` in einem Zug eintraegt. GRENZE: Geprueft wird die
354
+ NENNUNG, nicht ihre Richtigkeit - ein Verweis auf das falsche Protokoll und
355
+ eine Version, die nicht die gemessene ist, laufen durch
356
+ 66. Das verirrte Steuerzeichen (D-217): Kein Textraeger traegt einen
357
+ Wagenruecklauf ohne folgenden Zeilenvorschub. Er ist im Text unsichtbar - und
358
+ er nimmt git die Normalisierung der Zeilenenden: Ein Traeger mit einem
359
+ einzelnen CR gilt als BINAER und wird weder von core.autocrlf noch von einem
360
+ text=auto einer .gitattributes angefasst. ANLASS: Der Nachtrag zur Uebergabe
361
+ vom 2026-09-20 setzte ein echtes CR dorthin, wo die zwei Zeichen einer
362
+ Escape-Folge gemeint waren - in genau dem Satz, der den CRLF-Befund von 0.78.1
363
+ beschreibt. Der Blob stand danach auf CRLF gegen 426 von 440 LF-Traegern, und
364
+ der Commit schrieb 1981 von 1983 Zeilen neu. Ausgezaehlt ueber den Bestand: 14
365
+ Traeger mit verirrtem CR - und genau diese 14 sind die 14, die git nicht
366
+ normalisiert hat, die Deckung ist vollstaendig. 🔴 KEINE DER 65 AELTEREN
367
+ PRUEFUNGEN KONNTE ES SEHEN: `read` oeffnet im Universal-Newline-Modus, dort ist
368
+ jedes CR schon ein Zeilenvorschub, bevor eine Pruefung hinsieht. Diese liest
369
+ Bytes. GRENZE: Gemessen wird das Zeichen, nicht die Zeilenende-Form eines
370
+ Traegers - welche Form gilt, entscheidet kein Validator (K-81)
371
+ 67. ENTFALLEN mit 1.4.1 (D-350). Sie hielt die Titelzeile der Uebergabe
372
+ gegen <CORE_DIR>/VERSION und wies eine Merge-Request-Nummer ab (D-216).
373
+ Seit 1.4.1 ist UEBERGABE.md ein lokales Arbeitsdokument und nicht mehr
374
+ versioniert; eine frische Auscheckung fuehrt sie nicht, und eine Pruefung
375
+ darauf liefe nur an einem Arbeitsplatz. Die Nummer bleibt stehen, damit
376
+ das Register lueckenlos bleibt (Pruefung 40) und keine andere Pruefung
377
+ sie erbt. PREIS, benannt: Stand und Zahlen der Uebergabe prueft seither
378
+ niemand - sie sind wieder Zahlen, die gepflegt werden muessen
379
+ 68. Das Praefix, das mehr sperrt als sein Befehl (D-219): Jede exec-Regel in
380
+ framework/runtime/permissions.json, deren `prefix` kuerzer ist als ihr
381
+ `command`, traegt ein Feld `_uebererfasst` mit der Begruendung. ANLASS, und er
382
+ ist gemessen: Der Eintrag { command: "git branch -D", prefix: "git branch" }
383
+ nennt als Gegenstand das LOESCHEN eines Branches und sperrt ueber sein Praefix
384
+ auch das blosse AUFLISTEN. Das erklaert alle 25 Abweisungen des Messtags vom
385
+ 2026-09-20 (23 von 50 Laeufen; elf davon tragen `git branch`) - und es macht zwei
386
+ Skills eine Zusage unmoeglich, die sie in Arbeitsschritt 1 und in ihrer
387
+ Fehlerbehandlung selbst vorschreiben: eine Kandidatenliste vorhandener
388
+ Branches. Vier der 29 exec-Regeln erfassen ueber, und KEINE hat es bisher
389
+ gesagt. 🔴 Der Waechter in clientmap.py prueft nur, ob das Praefix ein Praefix
390
+ des Befehls IST - nicht, ob es mehr trifft. GRENZE, und sie steht hier:
391
+ Geprueft wird die NENNUNG, nicht ihre Richtigkeit; eine Begruendung, die nicht
392
+ traegt, laeuft durch. Dieselbe Enthaltung wie bei Pruefung 65
393
+ 69. Der Messapparat schreibt nicht in das Repositorium (D-222): In
394
+ <CORE_DIR>/tests/erhebungen/ liegen Werkzeuge - Skripte und eine README -,
395
+ sonst nichts. ANLASS, und er kostete nichts, weil er vor dem Lauf kam: D-222
396
+ hat die Skripte mit 0.79.0 hierher geholt und ihre Belege ausdruecklich
397
+ draussen gelassen; fuenf von ihnen legten ihre Belege aber neben SICH ab
398
+ (os.path.dirname(os.path.abspath(__file__)) + "belege"). Solange sie daneben
399
+ lagen, war das richtig - seither zeigt derselbe Ausdruck HINEIN, und lauf.py
400
+ legt das Verzeichnis selbst an. Der Nachlauf haette seine Sitzungsmitschriften
401
+ versioniert, ohne dass jemand es entschieden haette. Geprueft wird nicht der
402
+ Quelltext, sondern das ERGEBNIS: eine Belegdatei oder Zustandsaufnahme an
403
+ diesem Ort ist der Befund, gleich welcher Ausdruck sie erzeugt hat. GRENZE,
404
+ und sie steht hier: Diese Pruefung sieht nur, was schon geschrieben IST; den
405
+ Waechter davor traegt ablage.py, der die Erhebungsablage als Angabe verlangt
406
+ und einen Pfad im Repositorium abweist
407
+ 70. Jedes Werkzeug des Kerns nennt nur Namen, die es gibt (D-229): Jede .py-Datei
408
+ unter <CORE_DIR>/ laedt als Symboltabelle, und kein Name wird gelesen, der
409
+ nirgends gebunden ist - weder als Zuweisung noch als Import, Parameter oder
410
+ eingebauter Name. ANLASS, und er kostete nichts, weil er vor dem Lauf kam: Der
411
+ Wiederaufnahmepunkt des Nachlaufs fuehrte stand-b4.py als Befehl 1 von 4. Das
412
+ Skript brach beim Import mit NameError ab - zwei Vorkommen eines Namens S, der
413
+ mit dem Umzug nach D-222 verschwunden war, weil er den Ablageort NEBEN dem
414
+ Skript trug. Seit 0.79.0 war es damit tot, und keine der 69 Pruefungen sah es:
415
+ Pruefung 45 prueft den Bytecode auf Abwesenheit, Pruefung 69 die ART der
416
+ Dateien in der Erhebungsablage - dass eine davon LAEUFT, prueft keine.
417
+ GRENZE, und sie steht hier: Geprueft wird der Name, nicht der Wert. Ein Modul,
418
+ das einen Namen bindet und ihn falsch belegt, laeuft durch - dieselbe
419
+ Enthaltung, die Pruefung 68 zur Begruendung sagt. Ein Lauf des Werkzeugs
420
+ bliebe der staerkere Nachweis; er kostet Kontingent und legt Dateien an,
421
+ diese Pruefung nicht
422
+ 71. Kein Traeger des Kerns nennt einen Arbeitsplatz (D-231): Ein absoluter Pfad in
423
+ ein Benutzerprofil - C:\\Users\\<konto>, /home/<konto>, /Users/<konto> - wird
424
+ gemeldet, sofern das Kontosegment kein Platzhalter ist und die Zeile keine
425
+ Begruendung traegt. ANLASS, und er ist gemessen: Neun Werkzeuge des
426
+ Messapparats fuehrten
427
+ C:\\Users\\<konto>\\Documents\\devpacks\\test-devin-framework im Quelltext -
428
+ mit dem Kontonamen einer natuerlichen Person. Solange der Apparat NEBEN dem
429
+ Repositorium lag, stand das in einer unversionierten Ablage; mit D-222 ist er
430
+ hineingewandert und hat den Pfad mitgebracht - in genau das Repositorium, fuer
431
+ das 0.78.1 eigens UEBERGABE.local.md eingefuehrt hat, weil eine Uebergabe mit
432
+ Servername und Konto den Validator mit drei Fehlern beantwortet. Keine der
433
+ siebzig Pruefungen sah es: Pruefung 6 kennt Secret-Muster, E-Mail-Adressen,
434
+ IP-Adressen und Hostnamen - keinen Benutzerprofilpfad. GRENZE, und sie steht
435
+ hier: Aufzeichnungen sind ausgenommen - tests/protocols/ und
436
+ governance/change-requests/ halten fest, WO gemessen wurde, und ein Protokoll,
437
+ das man umschreibt, ist keines mehr (D-141). Zehn von ihnen tragen den
438
+ Kontonamen weiter; was daraus folgt, ist als K-85 geführt und hier nicht
439
+ entschieden
440
+ 72. Ein aktiviertes Pack steht auch im Berechtigungskorb (D-238): In einer
441
+ Installation deckt sich die Skillablage des Client Packs mit den
442
+ Namenseintraegen der Berechtigungsdatei - in beide Richtungen. ANLASS, und er
443
+ ist gemessen: Der Messbaum von Buendel 5 trug nach der Aktivierung WORTGETREU
444
+ nach framework/role-packs/README.md dreizehn Skillverzeichnisse und zwoelf
445
+ Skill(...)-Eintraege; role-re-ticket fehlte, und der Validator meldete 0 Fehler.
446
+ Ein nicht genannter Aufruf faellt in den Rueckfragekorb und im
447
+ rueckfragefreien Betrieb in die Abweisung - die Sitzung liest die SKILL.md dann
448
+ ersatzweise als Datei, OHNE die Werkzeugbeschraenkung des Skills (D-81).
449
+ WARUM PRUEFUNG 39 ES NICHT SIEHT, obwohl sie dafuer gebaut ist: Sie haelt
450
+ framework/runtime/permissions.json gegen framework/skills/ - Regelmenge des
451
+ Kerns gegen Skills des Kerns, beides Ebene 3, und dort deckt es sich. Ein
452
+ Packskill ist Ebene 6 und kommt in keiner der beiden Mengen vor. GRENZE, und
453
+ sie ist deklariert: Die Schreibweise des Skillaufrufs steht je Client als
454
+ permission_tools.skill im Manifest; ist sie leer (devin-desktop, D-89), schweigt
455
+ die Pruefung - fehlt das FELD, meldet sie es (D-155)
456
+ 73. Jede [DOK]-Matrixzeile nennt ihre Quelle (D-263): In der Faehigkeitsmatrix
457
+ jedes Client Packs nennt der BELEGKOPF jeder mit [DOK] belegten Zeile eine
458
+ Quellenkennung der Liste in Anhang 31.4 (QC-n/QD-n/QK-n/QU-n); ein Verweisbeleg
459
+ ("wie B3") wird aufgeloest. ANLASS, und er ist gezaehlt: Anhang 31.4 sagt
460
+ ueber sich selbst, die massgebliche Zuordnung stehe je Zeile in der Matrix -
461
+ das traf am 2026-09-18 fuer 14 von 43 Zeilen zu (K-62, D-156). DER PREIS IST
462
+ GEMESSEN: Der Durchgang von FW-AK-01 musste alle 22 Quellen abrufen, weil ohne
463
+ Zuordnung je Zeile nicht zu sagen ist, welche Seite welche Zusage traegt.
464
+ DIE KOPFREGEL ist der Grund, weshalb die Pruefung ueberhaupt etwas sagt:
465
+ Geprueft wird die Zelle bis zum ersten Satzbruch; was danach steht, ist
466
+ Erlaeuterung. Ohne sie zaehlte jede NENNUNG der Marke mit - Zeile R5 des Packs
467
+ claude-code erklaert, "ein Dokumentenabgleich belegt [DOK], nicht
468
+ [TECHNISCH]", und das ist eine Aussage ueber die Marke, kein Beleg. Dieselbe
469
+ Trennlinie, die der VERIFY-Marker am Ende braucht (CR-2026-070 E3).
470
+ WARUM DIE KENNUNG UND NICHT DER SEITENPFAD: Nur die Kennung laesst sich gegen
471
+ die Liste halten; ein Pfad kann eine Seite nennen, die die Liste nicht fuehrt.
472
+ GRENZE, und sie ist deklariert: Gibt der Bestand keine Seite her, sagt die
473
+ Zeile QUELLE NICHT ZUGEORDNET - geraten wird nicht, eine geratene Zuordnung
474
+ saehe wie ein Beleg aus (D-156). Die zugelassenen Luecken stehen als MENGE in
475
+ P73_OFFEN, in beide Richtungen geprueft: eine neue faellt auf, eine
476
+ geschlossene ebenso
477
+ 74. Eine Matrixzeile steht in ihrer Tabelle (D-264): Zwischen einer Zeile der
478
+ Faehigkeitsmatrix und der Trennzeile ihrer Tabelle liegt keine Leerzeile und
479
+ kein Fremdtext. ANLASS, und er stand 73 Releases da: Das Pack devin-desktop
480
+ fuehrt sieben Modus-Zeilen, und zwischen M5 und M6 stand seit 0.26.0 eine
481
+ Leerzeile - eingefuegt von genau dem Release, das M6 und M7 anlegte, weil
482
+ AP2-DD-03 gefunden hatte, dass zwei geregelte Modi keine Matrixzeile haben.
483
+ Nach einer Leerzeile beginnt in Markdown ein neuer Block, und ein Block aus
484
+ Datenzeilen ohne Kopf- und Trennzeile ist ein ABSATZ: Beide Zeilen erscheinen
485
+ im Pack wie im Hauptdokument als Fliesstext mit Strichen. Die Zusammenfassung
486
+ desselben Packs zaehlt sie dagegen mit ("20 von 36"). WARUM EINE EIGENE
487
+ PRUEFUNG: 73 fragt, WAS in einer Zeile steht, 74, ob sie ueberhaupt eine ist -
488
+ eine gebrochene Tabelle laesst 73 unberuehrt, weil sie die Zeile am Muster
489
+ erkennt und nicht am Block. Genau deshalb hat es 73 Releases lang niemand
490
+ gemerkt
491
+ 75. Kein Restbestand des alten Namens (D-271): Kein verfolgter Traeger nennt
492
+ `leitwerk` in irgendeiner Schreibweise - ausser den DEKLARIERTEN Ausnahmen.
493
+ ANLASS: Mit 0.88.0 heisst das Framework Koolie und der Kern liegt unter
494
+ .koolie/core. Ohne diese Pruefung ist "der Name ist weg" eine Behauptung
495
+ ohne Pruefung, und genau das ist der wiederkehrende Befundtyp dieses
496
+ Repositoriums. ZAEHLBEREICH: jeder verfolgte Traeger, NICHT nur der Kern -
497
+ die Lehre von D-295, wonach der Zaehlbereich von Kriterium 1 kleiner war
498
+ als die Wirkungsflaeche. AUSGENOMMEN in drei Klassen, alle als MENGE:
499
+ (a) die Chronik, die einen vergangenen Zustand beschreibt (D-273);
500
+ (b) die Namen datierter Belegablagen ausserhalb des Repositoriums, die
501
+ NICHT umbenannt werden, weil eine Reihe mit wechselnder Namenskonvention
502
+ nicht mehr als Reihe auffindbar ist (D-300); (c) Aussagen UEBER den alten
503
+ Namen, die ein Sweep ins Sinnlose kehrt (D-301). IN BEIDE RICHTUNGEN
504
+ GEPRUEFT: eine neue Fundstelle faellt auf, eine leer gewordene Ausnahme
505
+ ebenso. PREIS, benannt: Die Ausnahme gilt je TRAEGER, nicht je Zeile
506
+ 76. Die Lage des Kerns steht an vier Stellen - und ueberall gleich (D-299):
507
+ clientmap.py, dieser Validator, der Schutz-Hook und ablage.py fuehren
508
+ dieselbe Lageangabe, und KEINE leitet sie ueber os.path.basename ab.
509
+ ANLASS: Bis 0.87.0 taten es alle vier, weil der Kern EIN Verzeichnis-
510
+ segment war - in install.py mit dem Satz, die Zeile stehe dort, "damit
511
+ eine spaetere Umbenennung nur eine Stelle beruehrt". Sie haette die
512
+ Umbenennung nicht ueberlebt: basename(".koolie/core") ist "core". UND ES
513
+ WAERE KEIN VALIDATORFEHLER GEWESEN - dieser Validator band denselben Wert
514
+ auf dieselbe Weise und haette ihn bestaetigt. Zwei Stellen, die einander
515
+ decken (0.57.0), ueber Werkzeuggrenzen hinweg. Der zweite Gegenstand
516
+ traegt den ersten: Gleichheit allein waere erfuellbar, indem alle vier
517
+ denselben Fehler machen
518
+ 77. Der Stand des Hauptdokuments (D-312): Die Zeile `| Dokumentversion | X.Y.Z
519
+ (entspricht Framework-Release X.Y.Z) |` in build/doc/00-kopf.md nennt beide Male
520
+ denselben Wert, und dieser Wert ist der aus <CORE_DIR>/VERSION. ANLASS: Das
521
+ Hauptdokument stand am 2026-09-22 auf Dokumentversion 0.9.0 vom 2026-09-10 -
522
+ ZWEIUNDVIERZIG Releases zurueck. Es behauptete dort "Alle Module im Status
523
+ entwurf", waehrend seit 0.53.0 kein einziger Traeger darauf steht; es nannte
524
+ einen Produktstand, den das Pack zwei Zielspannen weiter hinter sich gelassen
525
+ hatte; und es fuehrte eine Client-Pack-Groesse, die seit 0.26.0 nicht mehr
526
+ stimmte. KEINE dieser Zahlen war falsch geschrieben - alle waren bei ihrer
527
+ Einfuehrung richtig und sind stehen geblieben, waehrend ihr Gegenstand weiterlief.
528
+ Das ist die Bauform von Pruefung 40 an einem groesseren Gegenstand. ZWEI
529
+ GEGENSTAENDE: (1) Der Anker - fehlt die Zeile, bestuende die Pruefung leise, und
530
+ sie meldet sein Fehlen deshalb selbst (D-23). (2) Beide Werte gleich und gleich
531
+ VERSION - die Gleichheit der beiden untereinander traegt den Vergleich mit
532
+ VERSION, denn eine Zeile, die zwei verschiedene Staende nennt, laesst offen,
533
+ welcher gemeint ist. PREIS, benannt: Jedes Release fasst diese Zeile an. Das ist
534
+ derselbe Preis, den bis 1.4.0 Pruefung 67 fuer die Uebergabe verlangt hat,
535
+ und er hat dort getragen. GRENZE: Sie misst die VERSION, nicht den INHALT. Ein Dokument, dessen
536
+ Zahlen veralten, waehrend jemand die Versionszeile mitzieht, laeuft durch - was
537
+ dagegen hilft, ist der Durchgang vor dem Commit und keine Pruefung.
538
+ 78. Die zaehlbaren Aussagen des Hauptdokuments (D-315): Der Satz ueber den
539
+ Pruefapparat in build/doc/26-qs-test.md nennt die GEZAEHLTE Zahl der
540
+ Pruefungen, der versionierten Dateien des Kerns und der Markdown-Dateien
541
+ darunter. ANLASS: 0.89.0 hat das Dokument nach 42 Releases auf den Stand
542
+ gesetzt und geschrieben, die Behebung brauche eine PRUEFUNG und nicht nur
543
+ eine Textaenderung. Gebaut wurde Pruefung 77, und die misst die VERSION.
544
+ EIN Release spaeter standen dort "76 Pruefungen ueber 502 versionierte
545
+ Dateien, davon 450 Markdown" - richtig waren 77, 504 und 452, und die
546
+ beiden fehlenden Dateien waren der Antrag und das Protokoll DESSELBEN
547
+ Releases. ZUSCHNITT (D-318): nur die GEGENWARTSFORM. Datierte Zahlen in
548
+ den ausgewiesenen Zeitdokumenten veralten nicht und werden nicht geprueft.
549
+ Die Abnahmezeile der Uebergabe, seit 1.0.0 ihr zweiter Gegenstand (D-325),
550
+ ist mit 1.4.1 entfallen (D-350)
551
+ 79. Die Lizenz liegt an zwei Stellen und ist dieselbe (D-317): LICENSE in der
552
+ Wurzel (dort suchen die Hostingdienste sie) und <CORE_DIR>/LICENSE (dort
553
+ wandert sie mit, wenn ein uebernehmendes Projekt den Kern als Ganzes
554
+ kopiert) tragen byteweise denselben Inhalt, und dieser Inhalt ist die
555
+ GPL-3.0. ANLASS: Zwei Stellen mit demselben Inhalt laufen auseinander,
556
+ sobald eine angefasst wird - der haeufigste Befundtyp dieses
557
+ Repositoriums, und die Antwort darauf ist dieselbe wie bei Pruefung 76
558
+ 80. Jedes Abnahmeprotokoll traegt seine Gegenzeichnung (D-319): Ein Protokoll
559
+ des Testkatalogs (Dateiname JJJJ-MM-TT-FW-<Klasse>-<NN>.md) fuehrt einen
560
+ Abschnitt `Gegenzeichnung` ohne offenes <TBD>. ANLASS: AP11 verlangte sie,
561
+ und 0.89.0 hat sie als ABGRENZUNG stehen gelassen - eine Gegenzeichnung ist
562
+ die Handlung einer ZWEITEN Rolle, und ein Werkzeug, das sie ausfuellt,
563
+ faelscht sie. Die Folge hatte niemand benannt: An diesem Framework arbeitet
564
+ EINE Person, die Pflicht war konstruktiv unerfuellbar - die Bauform der
565
+ Regel mit leerer Schnittmenge an einer Governance-Regel. ZUSCHNITT: nur
566
+ Abnahmeprotokolle. Gemessen ueber BEIDE Zaehlregeln ergibt der Gesamtbestand
567
+ 17/47/61 oder 13/45/64; die zehn Abnahmeprotokolle ergeben 3/2/5 unter
568
+ beiden - ein Gegenstand, der unter zwei Regeln derselbe ist, ist der
569
+ richtige. GRENZE: Sie verlangt eine Unterschrift und erzeugt keine. Die
570
+ Zeile sagt, WAS gegengezeichnet wurde; der Commit sagt, WER
571
+ 81. Eine Zeilenendeform je Repositorium (D-320, schliesst K-81): Alle versionierten
572
+ Texttraeger des Arbeitsbaums tragen DIESELBE Form, und keiner mischt beide in
573
+ sich. ANLASS: Eine Sitzung hat 28 LF-Zeilen in einen durchgehenden CRLF-Bestand
574
+ eingeschleppt; gefunden hat es keine der 80 Pruefungen, sondern ein Suchtext, der
575
+ danach nicht mehr traf. Pruefung 66 prueft die GEGENRICHTUNG und greift nicht.
576
+ 🔴 UND DER AUSLOESENDE BEFUND WAR AM FALSCHEN GEGENSTAND GEMESSEN: "kein
577
+ versionierter Traeger traegt reine LF" gilt fuer den ARBEITSBAUM (515 CRLF); im
578
+ BLOB, also im Versionierten, liegen dieselben 515 auf reinem LF. Ursache ist
579
+ core.autocrlf, eine Einstellung des Arbeitsplatzes - genau die Frage, die K-81
580
+ seit 0.78.2 offen fuehrte. ZUSCHNITT: der Arbeitsbaum; den Blob setzt seit D-320
581
+ die .gitattributes mit `text=auto`, und die aendert gemessen null Blobs. SIE
582
+ SCHREIBT KEINE FORM VOR, sondern verlangt, dass es eine ist - Einheitlichkeit ist
583
+ in jeder Installation richtig, eine bestimmte Form nur an einem Arbeitsplatz.
584
+ GRENZE: Sie liest Bytes und misst den Arbeitsbaum; ohne Git-Bestand meldet sie
585
+ eine Warnung und KEIN Messergebnis
586
+ 82. Die Bestandsliste steht auf dem Stand des Releases (D-331): Jede Zeile von
587
+ governance/ADOPTION_REGISTRY.md nennt in der Spalte `Framework-Version` den
588
+ Inhalt von VERSION. ANLASS: zweimal in zwei Releases. 1.0.0 hat die Liste
589
+ angelegt, und ihr erster Eintrag war ihr erster Befund - beide uebernehmenden
590
+ Projekte standen drei Releases zurueck; 1.0.1 hat es wiederholt. Ursache ist die
591
+ REIHENFOLGE: Gehoben wurde nach dem Merge, und damit war FW-CL-11 Pruefpunkt 20
592
+ zum Merge-Zeitpunkt nicht erfuellt. 🔴 UND SIE WAR AN ZWEI STELLEN FALSCH: Das
593
+ Framework hatte seine Liste berichtigt, die AUSGELIEFERTEN Kopien in beiden
594
+ Projekten trugen weiter den alten Stand - wer eine Liste nach dem Heben
595
+ fortschreibt, schreibt sie an einer Stelle fort und liefert sie an zwei.
596
+ D-299-PROBE BESTANDEN: In einem uebernehmenden Projekt sind Liste und VERSION
597
+ byte-gleich aus demselben Release ausgeliefert, also gleich - auch mehrere
598
+ Releases zurueck. 🔴 GRENZE: Sie misst die BEHAUPTUNG der Zeile, nicht den Stand
599
+ des Projekts; wer die Zeile aendert ohne zu heben, kommt durch. Dieselbe Bauform
600
+ wie Pruefung 77 (Version, nicht Inhalt). PREIS: Jedes Release fasst diese Tabelle
601
+ an - wie bei Pruefung 67 und 77
602
+ 83. Die Chronik zaehlt ihr eigenes Release zu Ende (D-335): Die hoechste
603
+ Release-Spanne "**D-NNN** bis **D-NNN**" in docs/ROADMAP.md endet bei der
604
+ hoechsten vergebenen Kennung des Decision Logs. ANLASS: 1.1.0 stand auf
605
+ "D-329 bis D-332", vergeben sind D-329 bis D-334. URSACHE GEMESSEN: D-333 und
606
+ D-334 sind BEIM UMSETZEN gefallen, die Zeile war da laengst geschrieben - eine
607
+ Zahl, die vor ihrem Gegenstand geschrieben wird, ist danach nicht mehr richtig.
608
+ 🔴 DER SCHWERERE TEIL: Von vier beschreibenden Traegern nennt keiner alle sechs,
609
+ und D-333 steht in keinem - nur die MARKE nennt die Menge vollstaendig, und sie
610
+ ist der einzige Traeger, den keine Pruefung erreichen kann (K-111, K-113).
611
+ WARUM PRUEFUNG 58 ES NICHT FAENGT: Sie haelt die Gegenrichtung (jede genannte
612
+ Kennung steht im Register); hier fehlt die Nennung einer vergebenen Kennung.
613
+ D-299-PROBE BESTANDEN: Beide Traeger liegen im Kern und werden byte-gleich
614
+ ausgeliefert. 🔴 GRENZE: Sie misst die OBERGRENZE, nicht die Vollstaendigkeit der
615
+ Nennungen - dieselbe Bauform wie 77 und 82 (K-112). PREIS: Jedes Release fasst
616
+ diese Zeile an - wie bei Pruefung 67, 77 und 82
617
+ 84. Die Client-Pack-Vorlage ist kein Client Pack (D-336): clients/_template traegt
618
+ genau eine CLIENT_PACK.md und weder manifest.json noch root-template/. ANLASS:
619
+ `_client_packs()` nahm jedes Verzeichnis mit CLIENT_PACK.md auf, und _template
620
+ erfuellt das - was die Vorlage vor allen Pruefungen schuetzte, war allein ihr
621
+ fehlendes Manifest. GEMESSEN am 2026-09-23 mit einem Probemanifest (Kopie des
622
+ Manifests von claude-code, also eines FREMDEN Clients): drei Packs mit Manifest,
623
+ Validator 0 Fehler, 0 Warnungen. Und clients/README.md Schritt 5 verlangt genau
624
+ dieses Manifest fuer jedes neue Pack. ➡️ EINE VORLAGE, DIE NUR DESHALB KEINE
625
+ PRUEFUNG AUSLOEST, WEIL IHR EIN BESTANDTEIL FEHLT, IST NICHT AUSGENOMMEN - SIE IST
626
+ UNVOLLSTAENDIG. 🔴 Die Bauform "zwei Stellen, die einander decken" (0.57.0).
627
+ ⚠️ Die Ausnahme existierte an zwei anderen Stellen (Pruefung 73,
628
+ LINK_PATH_EXCEPTIONS) und nicht dort, wo die Packmenge ENTSTEHT; seit D-336 steht
629
+ sie in `_client_packs()`. 🔴 GRENZE: Sie prueft die ANWESENHEIT von Bestandteilen,
630
+ nicht deren Inhalt
631
+ 85. Eine Zielangabe ueberlebt ihr eigenes Release nicht (D-342): Jede Ueberschrift
632
+ "### Geplant: … – Ziel-Release <Version>" in docs/ROADMAP.md nennt eine Version,
633
+ die groesser ist als .koolie/core/VERSION. ANLASS, gemessen im
634
+ Vorbedingungsdurchgang von 1.3.0: ALLE DREI vorhandenen Abschnitte nannten eine
635
+ Version, die die Gegenwart ueberholt hatte - die Umbenennung auf ~0.68.0
636
+ (erledigt mit 0.88.0, seit fuenfzehn Releases "Geplant"), openai-codex auf 1.1.0
637
+ (die Releasetabelle DERSELBEN Datei fuehrt ihn auf 1.3.0) und die Projekt-Overlays
638
+ auf 1.2.0 (ausgeliefert, Posten nicht gefahren). ➡️ EINE ZIELANGABE IST EINE ZAHL,
639
+ DIE VOR IHREM GEGENSTAND GESCHRIEBEN WIRD - die Bauform von Pruefung 83, hier an
640
+ der PLANSEITE derselben Datei statt an der Chronikseite. URSACHE GEMESSEN: Die
641
+ Verschiebungen sind je einzeln ausgewiesen worden (D-127, D-339), und keine hat
642
+ die Ueberschrift angefasst - wer eine Zahl an zwei Stellen fuehrt, pflegt eine.
643
+ D-299-PROBE BESTANDEN: Beide Traeger liegen im Kern und werden byte-gleich
644
+ ausgeliefert; ein uebernehmendes Projekt traegt dieselbe ROADMAP und dieselbe
645
+ VERSION aus demselben Release. 🔴 GRENZE: Sie misst die ZIELANGABE, nicht den
646
+ STAND des Postens - ein Abschnitt, dessen Ziel in der Zukunft liegt, kann laengst
647
+ erledigt sein und kommt durch; dieselbe Bauform wie 77 (Version, nicht Inhalt) und
648
+ 82 (Behauptung, nicht Tatsache), K-116. PREIS: Wer einen Posten verschiebt, fasst
649
+ die Ueberschrift an - und genau das ist der Zweck
650
+ 86. Die Sperrform des Schutz-Hooks wirkt beim genannten Client (D-347): Ein Pack, das
651
+ eine eigene Sperrform nennt (hook_block_form), bekommt sie nur, wenn das Skript
652
+ sie kennt, fuer sie WIRKLICH eine Sperre dieser Form ausgibt und die erzeugte
653
+ Hook-Konfiguration sie am Kommando durchreicht. ANLASS, gemessen am 2026-09-23 an
654
+ einer realen Installation von openai-codex: Die bis dahin einzige Sperrform -
655
+ {"decision": "block"} und Exit 2 - bewirkt bei diesem Client NICHTS. Der Client
656
+ meldet den Hook als fehlgeschlagen und FUEHRT DIE OPERATION AUS; im Gegenlauf kam
657
+ der Koederinhalt woertlich heraus. Dieselbe Sperre in seiner Form blockiert, und
658
+ zwar auch im Betriebsmodus ohne Rueckfragen und ohne Sandkasten.
659
+ ➡️ EIN HOOK, DER LAEUFT UND DESSEN SPERRFORM DER CLIENT NICHT LIEST, IST EINE
660
+ ZUSAGE OHNE MECHANISMUS - und nichts meldet es. Geprueft wird die Kette und nicht
661
+ das Manifestfeld, dieselbe Bauform wie Pruefung 17
662
+ 87. Die formatgebundenen Pruefungen stehen im Pack (D-346): Ein Client Pack, dessen
663
+ Berechtigungsdatei eine andere Ausgabeform hat als JSON (permissions_format),
664
+ nennt in Abschnitt 5 seines CLIENT_PACK.md jede Nummer aus
665
+ FORMATGEBUNDENE_PRUEFUNGEN, die seine Form nicht erreicht - und keine andere
666
+ (seit 1.13.0 je Form, D-416). ANLASS: Mit dem
667
+ dritten Pack gibt es zum ersten Mal zwei Ausgabeformen; sechs Pruefungen lesen die
668
+ eine und haben fuer die andere keinen Gegenstand. Sie still zu ueberspringen waere
669
+ die Bauform von 0.57.0 - zwei Stellen, die einander decken: Der Validator liefe
670
+ gruen, und niemand wuesste, dass sechs Pruefungen dieses Pack nicht erreichen.
671
+ ➡️ EINE LUECKE, DIE ERKLAERT IST, IST EINE AUSSAGE; EINE, DIE NUR BESTEHT, IST EIN
672
+ BLINDER FLECK. ⚠️ GRENZE: Sie prueft die NENNUNG, nicht die Richtigkeit der
673
+ Begruendung - dieselbe Bauform wie Pruefung 19
674
+ 88. Keine Datei, die die Wurzel-Anweisung verdraengt (D-341): Bei einem Client, dessen
675
+ Pack root_instruction_override fuehrt, darf die Datei aus
676
+ <ROOT_INSTRUCTION_LOCAL> nicht im Projektbaum liegen. ANLASS, gemessen mit
677
+ Gegenprobe in der Erhebung von 1.3.0: Liegt AGENTS.override.md im Projekt, steht
678
+ die Wurzel-Anweisung des Frameworks in KEINER Nachricht der Sitzung; ohne sie
679
+ steht sie darin. Ein Projekt, das die Datei in sein .gitignore schreibt - der
680
+ naheliegende Ort fuer eine persoenliche Fassung -, haette eine unversionierte
681
+ Ebene 1 je Arbeitsplatz. ➡️ EINE WURZEL-ANWEISUNG, DIE EINE UNGEPRUEFTE DATEI IM
682
+ SELBEN VERZEICHNIS ERSETZEN KANN, IST KEINE EBENE 1 - SIE IST EIN STANDARD. Der
683
+ Schutz hat drei Teile: Der deny-Korb stellt die Datei schreibgeschuetzt, der
684
+ Schutz-Hook fuehrt sie in seinen Mustern, und diese Pruefung meldet sie, wenn sie
685
+ trotzdem da ist - ein Mensch kann sie weiterhin anlegen, und dann soll es nicht
686
+ still bleiben
687
+ 89. Die uebrigen Pfadplatzhalter in den Schichten, die sie tragen (K-69, D-357): Unter
688
+ --strict-overlay fuer <ALLOWED_PATHS>, <TEST_PATHS>, <DOC_PATHS> und
689
+ <READ_ONLY_PATHS> dieselben drei Gegenstaende wie Pruefung 59 fuer
690
+ <EXCLUDED_PATHS>: (a) die Laufzeitfassung NENNT den Platzhalter, (b) ihr Wert ist
691
+ dieselbe Menge wie in der dreispaltigen Zeile von Abschnitt 4 des Quell-Overlays,
692
+ (c) jeder Nur-Lese-Pfad hat im deny-Korb eine Schreibsperre - seit 1.20.1 auch
693
+ jeder Glob von <CI_CONFIG_PATHS> und <QUALITY_GATE_CONFIG_PATHS> (K-35, D-493). ANLASS: Laufzeitfassung
694
+ und Berechtigungsdatei bleiben Saat (D-353), die Handpflege an drei Stellen bleibt -
695
+ und nur eine Pruefung faengt sie auf; von sechs Werten des Uebungs-Overlays wich am
696
+ 2026-09-18 einer ab. Ein Overlay, das anders bindet, bekommt eine eigene Meldung und
697
+ wird nicht uebergangen. "Kein Wert" hat gemessen mehrere Schreibweisen
698
+ (`nicht vorhanden`, `keine`) und ist die leere Menge. GRENZE: (c) prueft nur die
699
+ Richtung Quelle -> Korb, und (c) ist wie bei 59 an die Ausgabeform 'json' gebunden
700
+ 90. Der Lieferumfang einer Installation (D-367): (a) .koolie/core/LIEFERUMFANG traegt
701
+ einen bekannten Wert, (b) "nutzung" stimmt mit dem Bestand - keine Ablage der
702
+ Nachweisschicht (clientmap.NACHWEIS_ABLAGEN) liegt da, (c) das Quellrepositorium
703
+ fuehrt keine solche Datei. In einer Installation mit "nutzung" meldet Pruefung 12
704
+ Verweise in die Nachweisschicht nicht, und 76, 77 und 80 pruefen nur, was geliefert
705
+ ist - jeweils mit einer HINWEIS-Zeile, die weder als Fehler noch als Warnung zaehlt.
706
+ GRENZE: Ob die Nutzung ohne die Nachweisschicht auskommt, belegt nicht diese
707
+ Pruefung, sondern der zeilengleiche Vergleich mit einer vollen Installation (L367)
708
+ 91. Die Standueberschrift der Roadmap (D-372): "## Stand nach Release X.Y.Z" steht in
709
+ docs/ROADMAP.md genau einmal und nennt .koolie/core/VERSION. ANLASS: Bei 1.8.0 stand
710
+ sie auf 1.4.4, direkt ueber "Wird mit jedem Release fortgeschrieben"; bis 0.88.1
711
+ zweiunddreissig Releases lang auf 0.56.0. GRENZE: Sie prueft die Zahl der
712
+ Ueberschrift, nicht den Abschnitt darunter - dieselbe Bauform wie 77
713
+ 92. Die Rechtschreibung (D-373): Dokumente der Klassen A, B und D (D-371) enthalten
714
+ ausserhalb von Code kein Wort der Schreibung vor 1996 aus einer festen Stammliste
715
+ (dass, muss, misst, Messbaum ...). ANLASS: 603 alte gegen 1.192 geltende
716
+ Schreibungen, neunzehn Dokumente mischten beide. Register (C) bleiben, wie sie
717
+ geschrieben wurden; die Einstiegsdokumente der Wurzel (README, Quickstart und ihre
718
+ englischen Fassungen, D-437) nur im Quellrepositorium. GRENZE: Ein Wort,
719
+ das nicht auf der Liste steht, kommt durch
720
+ 93. Die Form (D-374): In jedem Dokument der Klassen A bis D ist jeder Codeblock
721
+ geschlossen, es gibt genau eine Hauptueberschrift (mit Frontmatter hoechstens eine),
722
+ keine uebersprungene Ueberschriftenebene, und jede Tabellenzeile hat die Spaltenzahl
723
+ ihrer Kopfzeile. Ein Waechter: Der Bestand war bis auf eine Datei sauber. GRENZE:
724
+ Gestalt, nicht Gliederung
725
+ 94. Der Steckbrief (D-375): Dokumente der Klassen A und B tragen vor dem ersten
726
+ Abschnitt eine Tabelle "| Attribut | Wert |" mit Kennung (ID oder <Art>-ID),
727
+ Version und Status. Ausgenommen mit Grund: README-Verzeichnisse und die
728
+ Einstiegsdokumente der Wurzel (D-437), die
729
+ Laufzeitschicht, Ausfuellvorlagen und Beispielausgaben. GRENZE: Anwesenheit der
730
+ Zeilen; ihren Wert pruefen 13 und 55
731
+ 95. Die Art einer Skill-Aenderung (D-403): Die Zeile der aktuellen Version im
732
+ Aenderungsverlauf eines Skills und jede Zeile nach dem 2026-09-22 nennt, ob sie
733
+ eine Anweisung beruehrt (D-303). ANLASS: K-146 - die Einordnung entscheidet, ob
734
+ die Zellen des Testblatts offen sind, und keine Pruefung sah, ob sie dasteht.
735
+ Nur die Skills des Kerns; projekteigene Skills bleiben aussen vor.
736
+ GRENZE: die Nennung, nicht ihre Richtigkeit
737
+ 96. Das Agentenprofil, das die Berechtigungen traegt, ist auch das aktive (D-414):
738
+ Bei einem Pack mit permissions_format 'kiro-agent' traegt die Einstellungsdatei
739
+ des Arbeitsbereichs die Werte des Manifests (Agent, Engine), das Profil ist
740
+ gueltiges JSON mit dem gewaehlten Namen, jede Regel hat eine bekannte Faehigkeit,
741
+ und jedes deny- und ask-Muster der Kernquelle steht darin, kein fremdes allow.
742
+ ANLASS, gemessen am 2026-09-26: Fehlt das Profil oder ist es kaputt, faellt der
743
+ Client STILL auf seinen eingebauten Agenten zurueck, und .env war lesbar; eine
744
+ unbekannte Faehigkeit ueberspringt er regelweise. GRENZE: die Dateien, nicht der
745
+ Start - wer mit --agent einen anderen Agenten waehlt, entgeht ihr
746
+ 97. Die Berechtigungsdatei, mit der der Client startet und die trifft (D-440): Bei
747
+ einem Pack mit permissions_format 'cursor-json' traegt die Datei NUR den
748
+ Schluessel permissions mit allow und deny, jeder Eintrag hat einen Regeltyp des
749
+ Clients, jedes deny-Muster der Kernquelle steht darin (die Kernzusagen einzeln
750
+ benannt), kein fremdes allow. Ein Pfadverbot, das der Client nie trifft, weil
751
+ es nicht mit '*' oder einem absoluten Pfad beginnt, ist eine Warnung. ANLASS,
752
+ gemessen am 2026-09-26: Mit einem weiteren Schluessel startet der Client nicht;
753
+ 'Read(.env)' und 'Read(**/.env)' liessen den Koeder unter Windows durch. GRENZE:
754
+ die Datei, nicht die Wirkung auf einem anderen Betriebssystem
755
+ 98. Das Ziel, nicht der Inhalt (D-449): Der Schutz-Hook laesst ein Schreibwerkzeug
756
+ durch, dessen ZIEL frei ist, auch wenn sein Inhalt Kern-, Overlay- oder
757
+ Laufzeitpfade nennt; er sperrt dasselbe Werkzeug mit einem Ziel im Kern. Bei einem
758
+ Patchtext (apply_patch) zaehlen nur die Dateikoepfe. ANLASS, gemessen am
759
+ 2026-09-27 in einem Projekt mit devin-desktop: Ein Aenderungsantrag unter docs/,
760
+ der Overlay- und Kernpfade nannte, wurde gesperrt. GRENZE: die Werkzeugnamen der
761
+ Manifeste, nicht jede Eingabeform eines Clients
762
+ 99. Das Mandat gibt sich der Client nicht selbst (D-447, D-448): Der Hook sperrt
763
+ mandat.py und die Mandatsdatei fuer Schreiben und Ausfuehren, laesst nur die
764
+ Auskunft 'mandat.py status' durch und sperrt das Overlay ohne Mandat; Hook und
765
+ mandat.py fuehren dieselben Werte (Dateiname, Umfaenge, Hoechstdauer); die
766
+ Kernquelle der Berechtigungen sperrt das Overlay nicht statisch, sonst hebt kein
767
+ Mandat die Sperre auf. Seit 1.20.2 ebenso die Modusbindung (D-501, K-179):
768
+ 'mandat.py modus' und die Datei koolie-modus.json sind fuer den Client gesperrt,
769
+ Hook und mandat.py fuehren denselben Dateinamen und dieselben Modi. GRENZE: Ein
770
+ Befehl, der den Namen verschleiert, entgeht dem Muster - wie bei K-32
771
+ 100. Der Modellaufruf nur fuer rein lesende Skills (D-451): Ein Skill des Kerns oder
772
+ eines Packs mit dem Trigger 'model' sperrt in permissions.deny 'edit' und 'exec'
773
+ (08-skill-conventions.md, Zeile triggers). ANLASS: Drei rein lesende Skills trugen
774
+ nur 'user', und die Wurzelanweisung trug dem Client zugleich auf, sie aufzurufen
775
+ (Befund A1 aus dem ersten Projekteinsatz). GRENZE: die Richtung model -> lesend;
776
+ ob ein rein lesender Skill 'model' tragen soll, entscheidet der Skill
777
+ 101. Die MCP-Freigaben (D-459): Die Kernquelle der Berechtigungen gibt kein MCP-Werkzeug
778
+ frei. In einer Installation, deren Pack die Regelform seiner MCP-Werkzeuge kennt
779
+ (mcp_permission_rule), steht in allow nur ein Lesewerkzeug, das Overlay Abschnitt
780
+ 13.2 einem Server mit dem Zweck 'lesen fuer Planung' zuweist - kein
781
+ Schreibwerkzeug, kein Muster fuer einen ganzen Server. Mit --strict-overlay
782
+ zusaetzlich: jedes freigegebene Lesewerkzeug steht in allow, und bei einem Client,
783
+ bei dem eine Rueckfrage die Freigabe schlaegt, steht die pauschale MCP-Rueckfrage
784
+ nicht mehr im ask-Korb. ANLASS, GEMESSEN: Mit 'mcp__*' im ask-Korb wies claude-code
785
+ das einzeln freigegebene Lesewerkzeug ab (Vorpruefung zu 1.18.0, V5). GRENZE: Ein
786
+ Pack ohne erhobene Regelform wird nicht abgeglichen; ob die Werkzeugliste des
787
+ Overlays zum Server passt, sieht die Pruefung nicht
788
+ 102. Die Form des Klaerungsregisters (D-465): Jeder Klaerungspunkt steht in der
789
+ Klaerungstabelle (Abschnitt 1 des Decision Logs), seine Statuszelle beginnt mit
790
+ einem Wert der Legende, und ein zusammengelegter Punkt zeigt auf einen bestehenden,
791
+ der nicht selbst zusammengelegt ist. Das Vokabular leitet sie aus der Legende ab.
792
+ ANLASS: 114 von 184 Punkten standen in der Entscheidungstabelle, elf erledigte
793
+ trugen 'offen' (Triage 2026-09-29). GRENZE: der Anfang der Zelle, nicht ihre
794
+ Richtigkeit
795
+ 103. Der Stand einer Ergebniszelle (D-472, K-61): Traegt eine Ergebniszelle eines
796
+ Testblatts oder des Testkatalogs eine Standmarke, rechnet die Pruefung den Stand
797
+ ihres Gegenstands nach; weicht er ab, warnt sie, nennt die Marke einen Pfad, den
798
+ es nicht gibt, ist es ein Fehler. ANLASS: FW-KO-02 stand auf 'bestanden', waehrend
799
+ drei spaetere Befunde in seinem Gegenstand lagen. GRENZE: Zellen ohne Marke
800
+ bleiben ungeprueft
801
+ 104. Die Verdrahtung der Pruefwerkzeuge (D-481): Jede Funktion check_* des Pakets
802
+ pruefungen/ wird gerufen - von main() genau einmal oder im Paket -, und der
803
+ Sondenlauf laedt jeden Teil unter sonden/ in der Reihenfolge seiner Nummer.
804
+ ANLASS: die Aufteilung in 1.19.1 (D-479); eine verschobene, nicht gerufene
805
+ Pruefung liefe nie. GRENZE: die Verdrahtung, nicht, was eine Pruefung tut
806
+ 105. Die gepruefte Clientversion in der Zielspanne (D-482, K-40): Je Client Pack
807
+ liegt die erste Punktversion der Zeile 'Gepruefte Clientversion' in einer
808
+ Spanne der Zeile 'Verbindliche Zielversion', und jede Spanne ist durch eine
809
+ Punktversion belegt. WARNUNG, kein Fehler. GRENZE: ein Praefixvergleich der
810
+ Schreibweise, kein Beleg fuer gleiches Verhalten in der Spanne
811
+ 106. Das Entscheidungsprotokoll des Schutz-Hooks (D-487, K-192): In einem Wegwerfbaum
812
+ haelt der Hook eine Sperre und einen Durchlass auf Client-Ereignisse als je eine
813
+ JSON-Zeile mit genau fuenf Feldern fest, nie Inhalt oder Pfadwert; ein Aufruf ohne
814
+ hook_event_name steht nicht darin, 'hook_protokoll: aus' schaltet es ab. ANLASS:
815
+ Sperren hinterliessen keine Spur ausserhalb der Mitschrift. GRENZE: nicht
816
+ manipulationsgeschuetzt; ob ein Client so aufruft, belegt die Messung
817
+ 107. Die Gegenfaelle der Wirksamkeitsprobe (D-488, D-490, K-195): An einem Wegwerfbaum mit
818
+ der erzeugten Hook-Konfiguration von claude-code meldet wirksamkeit.pruefe_hook
819
+ nichts, ohne Hook-Skript H3 und H4, mit einem Matcher ohne mcp H2. ANLASS: Die
820
+ Hook-Vorpruefung des Messapparats bestand seit 1.19.0 auch einen Baum ohne Hook,
821
+ weil Exit 2 als Sperre galt. GRENZE: der Hook-Teil der Probe an einem Pack
822
+ 108. Ein allow-Befehl, der ein deny-Praefix umschliesst (D-494, K-47): Warnung, wenn
823
+ in der Kernquelle oder im installierten JSON-Korb eines Packs mit Praefixabgleich
824
+ der Befehl eines allow-Eintrags ein echtes Wortpraefix eines deny-Befehls desselben
825
+ Werkzeugs ist. ANLASS: Bei Bash(git:*) lief 'git -C <pfad> push' an
826
+ Bash(git push:*) vorbei (D-123). GRENZE: die Schreibweise, nicht die
827
+ Befehlsaequivalenz; nur Befehlsregeln, keine Pfadmuster
828
+ 109. Die beiden Werkzeugfelder eines Skills (D-505, K-93): Fuehrt ein Skill in einer
829
+ Ablage, die das Feld 'permissions' behaelt, 'allowed-tools' oder 'permissions',
830
+ dann fuehrt er beide. ANLASS: Bei devin-desktop wirkt die Beschraenkung nur mit
831
+ beiden Feldern, eines allein bleibt ohne Meldung folgenlos (D-287). GRENZE: die
832
+ Anwesenheit, nicht die Wirkung
833
+ 110. Die aktivierten Packs gegen die Regelablage (D-504, K-44), nur --strict-overlay:
834
+ Die Zeilen 'Aktivierte Role Packs' und 'Aktivierte Technology Packs' des Overlays
835
+ und die Laufzeitfassungen 30-role-* und 40-tech-* stimmen in beide Richtungen
836
+ ueberein; fehlt die Zeile bei vorhandenen Fassungen, gibt es eine Warnung. ANLASS:
837
+ Vier Regeldateien entfernt, und --strict-overlay meldete dasselbe wie vorher
838
+ (2026-09-17). GRENZE: die Laufzeitfassung und die Nennung, nicht Skills und Version
839
+ 111. Fremde Skills, deklariert (D-514, K-31): Fehler, wenn ein Praefix unter
840
+ 'fremde_skills:' im Overlay-Manifest einen Koolie-Skill treffen koennte; Warnung bei
841
+ einer Deklaration ohne Gegenstand und bei einem erkannten fremden Rahmenwerk ohne
842
+ Deklaration. Deklarierte Skills prueft Pruefung 5 nicht, den Korb verlangt Pruefung
843
+ 72 weiter. ANLASS: sechs OpenSpec-Skills ergaben 60 Fehler und 18 Warnungen
844
+ (2026-09-30). GRENZE: die Deklaration und die Ablage, nicht der Inhalt
845
+ 112. Die Paketquellen und das Banner (D-519, D-520, K-155), nur im Quellrepositorium:
846
+ Fehler, wenn eine Datei unter paketquellen/ fehlt, wenn der Befehl koolie ueber
847
+ eine Pipe install.py ohne die Textvariante des Banners davor startet, wenn
848
+ --version nicht die Version aus VERSION nennt, wenn KOOLIE_NO_BANNER=1 das Banner
849
+ nicht abschaltet, wenn der Dialog ohne Argumente das Verzeichnis des Aufrufs nicht
850
+ mit Enter als Projekt nimmt (D-532), und wenn bauen.py aus einem Wegwerfarchiv nicht ohne Befund baut -
851
+ auch als Vorabversion (--vorab 1), mit der Beschreibung fuer PyPI und npm ohne
852
+ relativen Link (D-528, D-529) und mit dem oeffentlichen npm-Namen @renoxar/koolie (D-535).
853
+ ANLASS: pip, npm und Chocolatey geben dem Installationsschritt kein Terminal
854
+ (gemessen 2026-09-30). GRENZE: ob eine Paketquelle dem Befehl ein Terminal gibt
855
+ (gemessen, nicht geprueft); die Veroeffentlichung
856
+ Der Wirksamkeitsnachweis nach D-23 fuer die Pruefungen 4, 6, 8, 14, 18 bis 66 und 68 bis 112 laeuft als eigenes
857
+ Skript: .koolie/core/tests/scripts/probe-pruefungen.py (je Pruefung eine Sonde und eine
858
+ Gegenprobe, auf einer Kopie des Repositoriums).
859
+
860
+ Ohne PyYAML laufen die Prüfungen 4, 5 und 8 eingeschränkt; das Skript sagt es dann als
861
+ Warnung. Für einen Release- oder Übernahmenachweis ist PyYAML erforderlich.
862
+
863
+ Exit-Code 0 = keine Fehler (Warnungen möglich), 1 = Fehler.
864
+ Status des Skripts: entwurf. Es prüft Struktur, nicht Semantik; die semantische Prüfung
865
+ (Widerspruchsfreiheit, Verhalten des KI-Clients) erfolgt über .koolie/core/tests/TEST_CATALOG.md.
866
+ """
867
+ from __future__ import annotations
868
+
869
+ import argparse
870
+ import os
871
+ import sys
872
+
873
+ # Die Pruefungen liegen seit 1.19.1 im Paket pruefungen/ neben diesem Skript, nach
874
+ # Gegenstand geteilt (K-174). Dieses Skript ist der Einstieg: oben das
875
+ # Register, unten main(). Daneben liegen zwei geteilte Module, die das Paket
876
+ # importiert:
877
+ # - overlay_status: Die Auswertung des Overlay-Status liegt seit 0.33.0 in einem
878
+ # eigenen Modul, weil der Status-Hook sie ebenso braucht und sie dort anders
879
+ # umgesetzt war (B08, D-58). Der Hook importiert dieses Modul; er importiert
880
+ # nicht dieses Skript.
881
+ # - mermaid_renderer: Browsersuche und Puppeteer-Konfiguration des Mermaid-
882
+ # Renderers teilt der Validator mit dem Bau der Word-Fassung (K-145, D-398).
883
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
884
+ from pruefungen.gemeinsam import ( # noqa: E402
885
+ detect_client, ERRORS, HINWEISE, warn, WARNINGS, yaml)
886
+ from pruefungen.bestand import ( # noqa: E402
887
+ check_actor_naming, check_artefakt_versionen, check_config, check_content,
888
+ check_links, check_manifest, check_mermaid, check_placeholder_naming,
889
+ check_required, check_rules, check_runtime_placeholders, check_skills,
890
+ check_tool_neutrality, check_versions)
891
+ from pruefungen.hooks import ( # noqa: E402
892
+ check_durchsetzungstiefe, check_hook_ablageort, check_hook_eingabeschema,
893
+ check_hook_fail_closed, check_hook_interpreter, check_hook_skripte_neutral,
894
+ check_hook_protokoll, check_hook_tool_coverage, check_hook_ziel_statt_inhalt,
895
+ check_hookblock, check_sperrform)
896
+ from pruefungen.berechtigungen import ( # noqa: E402
897
+ check_agent_profil_ohne_start, check_agent_startwerkzeug, check_agentenprofil,
898
+ check_berechtigungskoerbe, check_cursor_berechtigungen, check_importsteuerung,
899
+ check_mandatsschutz, check_mcp_freigaben, check_modellaufruf_nur_lesend,
900
+ check_pack_im_korb, check_skill_deny_abbildung, check_skillfreigabe,
901
+ check_verdraengende_wurzelanweisung, check_werkzeugabbildung)
902
+ from pruefungen.packs import ( # noqa: E402
903
+ check_abwesenheitsbeleg, check_allow_umschliesst_deny, check_ausfall_mit_ersatz,
904
+ check_clientversion_in_spanne, check_dokumenttabellen, check_formatgebundene_pruefungen,
905
+ check_matrixzeile_in_tabelle, check_normative_kommentare, check_quellenauskunft,
906
+ check_regelablage_sauber, check_schlitzinhalte, check_vorlage_kein_pack,
907
+ check_skill_werkzeugfelder, check_werkzeugabwesenheit, check_zusagenfelder,
908
+ check_zusatzschluessel)
909
+ from pruefungen.overlay import ( # noqa: E402
910
+ check_aktivierte_packs, check_ausgeschlossene_vorbedingung, check_befehlsschlitz_in_vorbedingung,
911
+ check_excluded_paths, check_fremde_skills, check_overlay_pfadabgleich, check_overlay_ready,
912
+ check_overlay_schlitze, check_overlay_wertabgleich, check_pflichtplatzhalter,
913
+ check_platzhalterbindung, check_strict_overlay, check_ungebundene_vorbedingung,
914
+ check_v6_freigabefolge)
915
+ from pruefungen.testkatalog import ( # noqa: E402
916
+ check_ausgabemarke_gedeckt, check_belegquelle, check_ergebnisstand,
917
+ check_ergebnisstatus_beleg, check_grenzfaelle, check_k3_kategorien,
918
+ check_nummernverweis, check_praeparationsregister, check_pruefmittel_vokabular,
919
+ check_skill_aenderungsart, check_skillaufruf_im_katalog,
920
+ check_skillversion_vorlage)
921
+ from pruefungen.register import ( # noqa: E402
922
+ check_d11_stand, check_decision_log_zellen, check_decisionregister,
923
+ check_klaerungsregister, check_klaerungsregister_form, check_pruefregister,
924
+ check_releaseplan_kette, check_roadmapstand, check_status_vokabular)
925
+ from pruefungen.dokumente import ( # noqa: E402
926
+ check_altname_restbestand, check_bestandsliste_stand, check_chronikspanne,
927
+ check_dokumentform, check_dokumentstand, check_dokumentzahlen,
928
+ check_gegenzeichnung, check_lizenz, check_rechtschreibung, check_steckbrief,
929
+ check_verirrtes_steuerzeichen, check_zeilenendeform, check_zielangabe)
930
+ from pruefungen.werkzeuge import ( # noqa: E402
931
+ check_arbeitsplatzpfad, check_bytecode_versioniert, check_erhebungen_sauber,
932
+ check_gitignore_erzeugnisse, check_kernlage, check_lieferumfang, check_paketquellen,
933
+ check_praefix_uebererfassung, check_verdrahtung, check_werkzeugnamen,
934
+ check_wirksamkeitsprobe)
935
+
936
+ # Die Schnittstelle fuer die Werkzeuge, die dieses Skript als Modul laden:
937
+ # mandat.py
938
+ # tests/erhebungen/apparat/stand.py
939
+ # tests/erhebungen/mcp-waechter.py und zaehlen46.py
940
+ # Sie bleibt hier, damit kein Lader sich aendern muss (1.19.1, K-174).
941
+ from pruefungen.gemeinsam import read, regeldatei, tabellenzellen, TBD_RE # noqa: E402,F401
942
+ from pruefungen.overlay import _p56_ausgeschlossen, _p59_globs, _p89_quelle # noqa: E402,F401
943
+ from pruefungen.testkatalog import stand_wert # noqa: E402,F401
944
+
945
+
946
+ def main() -> int:
947
+ # 🔴 DER BERICHTSWEG IN BEIDEN KODIERUNGSUMGEBUNGEN (K-168, Bauform D-223). Mehrere
948
+ # Meldungen tragen Zeichen ausserhalb von cp1252 (⚠️, ➡️, 🔴). Feuerte eine davon in
949
+ # der cp1252-Umgebung, die D-49 verlangt, endete der Lauf mit UnicodeEncodeError statt
950
+ # mit der Liste der Befunde - gemessen am 2026-09-26 an Pruefung 82. Ein Zeichen, das
951
+ # die Konsole nicht kennt, erscheint jetzt als Escape-Folge; der Befund bleibt lesbar.
952
+ for strom in (sys.stdout, sys.stderr):
953
+ try:
954
+ strom.reconfigure(errors="backslashreplace")
955
+ except (AttributeError, ValueError):
956
+ pass
957
+ ap = argparse.ArgumentParser()
958
+ ap.add_argument("--root", default=os.getcwd())
959
+ ap.add_argument("--strict-overlay", action="store_true")
960
+ ap.add_argument("--check-overlay-ready", action="store_true")
961
+ ap.add_argument("--mermaid", action="store_true")
962
+ args = ap.parse_args()
963
+ root = os.path.abspath(args.root)
964
+
965
+ if yaml is None:
966
+ # Ohne PyYAML pruefen drei Pruefungen nur noch, ob ein Frontmatter da ist - nicht,
967
+ # was darin steht. Ein Release-Nachweis, der das nicht sagt, behauptet mehr als er
968
+ # geprueft hat; deshalb steht es hier und nicht nur in der Roadmap.
969
+ warn("PyYAML nicht installiert – Prüfung 4 (Frontmatter der Regeltexte), Prüfung 5 "
970
+ "(Frontmatter der Skills) und Prüfung 8 (Overlay-Manifest) laufen eingeschränkt: "
971
+ "Das Vorhandensein wird geprüft, die Feldinhalte nicht. Für einen Release- oder "
972
+ "Übernahmenachweis (FW-KO-01, FW-CL-11, CL-10) muss PyYAML installiert sein")
973
+
974
+ man = detect_client(root)
975
+ check_required(root, man)
976
+ check_config(root, man)
977
+ check_berechtigungskoerbe(root, man)
978
+ check_rules(root, man)
979
+ check_skills(root, man)
980
+ check_runtime_placeholders(root, man)
981
+ check_content(root)
982
+ check_links(root)
983
+ check_manifest(root)
984
+ check_versions(root, man)
985
+ check_artefakt_versionen(root)
986
+ check_actor_naming(root)
987
+ check_placeholder_naming(root)
988
+ check_hook_interpreter(root, man)
989
+ check_hook_tool_coverage(root, man)
990
+ check_hook_fail_closed(root, man)
991
+ check_hook_ablageort(root, man)
992
+ check_quellenauskunft(root)
993
+ check_dokumenttabellen(root)
994
+ check_hook_skripte_neutral(root)
995
+ check_importsteuerung(root, man)
996
+ check_normative_kommentare(root, man)
997
+ check_regelablage_sauber(root)
998
+ check_ausfall_mit_ersatz(root)
999
+ check_werkzeugabwesenheit(root)
1000
+ check_zusagenfelder(root)
1001
+ check_excluded_paths(root, man)
1002
+ check_k3_kategorien(root)
1003
+ check_grenzfaelle(root)
1004
+ check_durchsetzungstiefe(root)
1005
+ check_hook_eingabeschema(root, man)
1006
+ check_skill_deny_abbildung(root, man)
1007
+ check_agent_startwerkzeug(root)
1008
+ check_agent_profil_ohne_start(root)
1009
+ check_decision_log_zellen(root)
1010
+ check_werkzeugabbildung(root)
1011
+ check_skillfreigabe(root)
1012
+ check_pruefregister(root)
1013
+ check_abwesenheitsbeleg(root)
1014
+ check_schlitzinhalte(root, man)
1015
+ check_hookblock(root, man)
1016
+ check_praeparationsregister(root)
1017
+ check_bytecode_versioniert(root)
1018
+ check_gitignore_erzeugnisse(root)
1019
+ check_d11_stand(root)
1020
+ check_status_vokabular(root)
1021
+ check_tool_neutrality(root)
1022
+ check_skillaufruf_im_katalog(root)
1023
+ check_klaerungsregister(root)
1024
+ check_klaerungsregister_form(root)
1025
+ check_ergebnisstand(root)
1026
+ check_overlay_schlitze(root)
1027
+ check_v6_freigabefolge(root)
1028
+ check_releaseplan_kette(root)
1029
+ check_zusatzschluessel(root, man)
1030
+ check_pflichtplatzhalter(root)
1031
+ check_erhebungen_sauber(root)
1032
+ check_ungebundene_vorbedingung(root)
1033
+ check_decisionregister(root)
1034
+ check_befehlsschlitz_in_vorbedingung(root)
1035
+ check_skillversion_vorlage(root)
1036
+ check_pruefmittel_vokabular(root)
1037
+ check_nummernverweis(root)
1038
+ check_ausgabemarke_gedeckt(root)
1039
+ check_ergebnisstatus_beleg(root)
1040
+ check_verirrtes_steuerzeichen(root)
1041
+ check_praefix_uebererfassung(root)
1042
+ check_werkzeugnamen(root)
1043
+ check_arbeitsplatzpfad(root)
1044
+ check_pack_im_korb(root, man)
1045
+ check_belegquelle(root)
1046
+ check_matrixzeile_in_tabelle(root)
1047
+ check_altname_restbestand(root, man)
1048
+ check_kernlage(root)
1049
+ check_dokumentstand(root)
1050
+ check_dokumentzahlen(root)
1051
+ check_lizenz(root)
1052
+ check_gegenzeichnung(root)
1053
+ check_lieferumfang(root)
1054
+ check_zeilenendeform(root)
1055
+ check_bestandsliste_stand(root)
1056
+ check_chronikspanne(root)
1057
+ check_vorlage_kein_pack(root)
1058
+ check_zielangabe(root)
1059
+ check_sperrform(root, man)
1060
+ check_formatgebundene_pruefungen(root)
1061
+ check_verdraengende_wurzelanweisung(root, man)
1062
+ check_agentenprofil(root, man)
1063
+ check_cursor_berechtigungen(root, man)
1064
+ check_roadmapstand(root)
1065
+ check_rechtschreibung(root)
1066
+ check_dokumentform(root)
1067
+ check_steckbrief(root)
1068
+ check_skill_aenderungsart(root, man)
1069
+ check_hook_ziel_statt_inhalt(root, man)
1070
+ check_mandatsschutz(root, man)
1071
+ check_modellaufruf_nur_lesend(root, man)
1072
+ check_mcp_freigaben(root, man, args.strict_overlay)
1073
+ check_verdrahtung(root)
1074
+ check_clientversion_in_spanne(root)
1075
+ check_hook_protokoll(root)
1076
+ check_wirksamkeitsprobe(root)
1077
+ check_allow_umschliesst_deny(root, man)
1078
+ check_skill_werkzeugfelder(root, man)
1079
+ check_fremde_skills(root, man)
1080
+ check_paketquellen(root)
1081
+ if args.strict_overlay:
1082
+ check_strict_overlay(root, man)
1083
+ check_platzhalterbindung(root, man)
1084
+ check_ausgeschlossene_vorbedingung(root, man)
1085
+ check_overlay_wertabgleich(root, man)
1086
+ check_overlay_pfadabgleich(root, man)
1087
+ check_aktivierte_packs(root, man)
1088
+ if args.check_overlay_ready:
1089
+ check_overlay_ready(root, man)
1090
+ if args.mermaid:
1091
+ check_mermaid(root)
1092
+
1093
+ for h in HINWEISE:
1094
+ print(f"HINWEIS {h}")
1095
+ for w in WARNINGS:
1096
+ print(f"WARNUNG {w}")
1097
+ for e in ERRORS:
1098
+ print(f"FEHLER {e}")
1099
+ print(f"\nErgebnis: {len(ERRORS)} Fehler, {len(WARNINGS)} Warnungen")
1100
+ return 1 if ERRORS else 0
1101
+
1102
+
1103
+ if __name__ == "__main__":
1104
+ sys.exit(main())