@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,605 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Das Mandat fuer Modus M6 (CR-2026-156, D-446, D-447) - erteilen, anzeigen, beenden,
4
+ und der Abgleich des Overlays (D-452).
5
+
6
+ Ein Mandat ist die Erlaubnis eines MENSCHEN, dass der KI-Client fuer eine begrenzte Zeit
7
+ Entscheidungen in das Project Overlay eintraegt, die der Mensch in der Sitzung getroffen
8
+ hat. Die Entscheidung bleibt beim Menschen (V3, V10); das Eintragen darf der Client
9
+ uebernehmen. Die Pruefung ist der Merge Request, den der Mensch ohnehin freigibt (V1).
10
+
11
+ python .koolie/core/mandat.py erteilen --rolle Architekt --umfang overlay --minuten 60
12
+ python .koolie/core/mandat.py status
13
+ python .koolie/core/mandat.py beenden (gleicht danach die Laufzeitfassung ab)
14
+ python .koolie/core/mandat.py abgleichen
15
+ python .koolie/core/mandat.py modus M2 --ablage docs/plaene --minuten 120
16
+ python .koolie/core/mandat.py modus M1
17
+ python .koolie/core/mandat.py modus M3 --umfang "src/billing/**" --minuten 90
18
+ python .koolie/core/mandat.py modus aus
19
+
20
+ DIE MODUSBINDUNG (D-501, K-179). Bis 1.20.1 galten die Modusgrenzen ausser M6 nur
21
+ normativ. 'modus M1' bindet den Nur-Lese-Modus an den Schutz-Hook: Er sperrt jeden
22
+ Schreibaufruf. 'modus M2 --ablage <pfad>' laesst nur das Schreiben unter der Plan-Ablage
23
+ zu. Die Bindung liegt neben dem Mandat (.git/koolie-modus.json), ist befristet und nur
24
+ vom Menschen zu setzen. Grenze: Ein Shell-Befehl, der schreibt, entgeht ihr (D-30).
25
+ Seit 1.23.0 (K-201) auch M3, M4 und M5: 'modus' liest beim Binden die Pfadliste des
26
+ Modus aus Abschnitt 4 des Overlays (M3 <ALLOWED_PATHS>, M4 <TEST_PATHS>, M5 <DOC_PATHS>)
27
+ und <READ_ONLY_PATHS> und KOPIERT sie in die Bindung - der Hook liest das Overlay nicht.
28
+ Bei M3 grenzt '--umfang' auf den freigegebenen Scope ein (Schnittmenge). Ist die Liste
29
+ leer oder offen, bindet 'modus' nicht: Eine Bindung, die nichts erlaubt, ist M1.
30
+
31
+ WARUM EIN BEFEHL IM EIGENEN TERMINAL: Der Schutz-Hook sperrt diese Datei und die
32
+ Mandatsdatei fuer jede nicht lesende Operation des Clients - bis auf 'status'. Ein Satz
33
+ im Chat ("ich erteile dir ein Mandat") erreicht den Hook nicht, und ein Client, der sich
34
+ das Mandat selbst geben koennte, haette keines.
35
+
36
+ WO ES LIEGT: im Git-Verzeichnis des Projekts (.git/koolie-mandat.json), nicht im
37
+ Arbeitsbaum. So kann es nicht eingecheckt werden und auf einem anderen Arbeitsplatz
38
+ gelten. Ohne Git-Verzeichnis gibt es kein Mandat.
39
+
40
+ DER ABGLEICH (D-452). Ein Overlay-Wert steht in bis zu vier Traegern: OVERLAY.md, dem
41
+ Manifest, der immer geladenen Laufzeitfassung (<RULES_DIR>/20-project-overlay.md) und der
42
+ Berechtigungsdatei. Die beiden letzten liegen in der Laufzeitschicht, die der Client nie
43
+ schreibt - auch nicht mit Mandat. Bis 1.16.0 zog sie der Mensch von Hand nach, und genau
44
+ dort liefen die Werte auseinander (Befund A3 aus dem ersten Projekteinsatz: die Version
45
+ im Steckbrief ersetzt statt geaendert, die Laufzeitfassung mit einem anderen Wert). Der
46
+ Abgleich uebernimmt Status, Version und die fuenf Pfadlisten aus OVERLAY.md in die
47
+ Laufzeitfassung und die Version ins Manifest. Die Berechtigungsdatei SCHREIBT er nicht:
48
+ Er nennt die Regeln, die dort fehlen (Pruefungen 59 und 89) - eine Aenderung an ihr ist
49
+ eine Aenderung der Berechtigung selbst (V6), und ihre Form ist je Pack verschieden.
50
+
51
+ Die Werte (Dateiname, Umfaenge, Hoechstdauer) stehen gleichlautend im Schutz-Hook;
52
+ Pruefung 99 haelt beide gleich.
53
+ """
54
+ import argparse
55
+ import datetime
56
+ import io
57
+ import json
58
+ import os
59
+ import re
60
+ import subprocess
61
+ import sys
62
+
63
+ CORE_REL = ".koolie/core"
64
+ MANDAT_DATEI = "koolie-mandat.json"
65
+ MANDAT_HOECHSTDAUER_MIN = 480
66
+ MANDAT_UMFAENGE = {
67
+ "overlay": ".koolie/project-overlay/",
68
+ "dokumente": ".koolie/project-overlay/documents/",
69
+ }
70
+ # Die Modusbindung (CR-2026-164, D-501, K-179): M1 oder M2 fuer eine begrenzte Zeit an den
71
+ # Schutz-Hook binden. Dieselbe Hoechstdauer und derselbe Ort wie das Mandat.
72
+ MODUS_DATEI = "koolie-modus.json"
73
+ MODUS_GEBUNDEN = ("M1", "M2", "M3", "M4", "M5")
74
+ MODUS_PFADE = {"M3": "<ALLOWED_PATHS>", "M4": "<TEST_PATHS>", "M5": "<DOC_PATHS>"}
75
+ MODUS_MIT_PFADEN = tuple(MODUS_PFADE)
76
+
77
+ _KERN = os.path.dirname(os.path.abspath(__file__))
78
+ PROJEKTWURZEL = os.path.realpath(os.path.dirname(os.path.dirname(_KERN)))
79
+ ZEITFORMAT = "%Y-%m-%dT%H:%M:%SZ"
80
+ SEMVER = re.compile(r"^\d+\.\d+\.\d+$")
81
+ PFADPLATZHALTER = ("<ALLOWED_PATHS>", "<EXCLUDED_PATHS>", "<READ_ONLY_PATHS>",
82
+ "<TEST_PATHS>", "<DOC_PATHS>")
83
+
84
+
85
+ def jetzt() -> datetime.datetime:
86
+ return datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
87
+
88
+
89
+ def git_verzeichnis():
90
+ """Wie im Schutz-Hook: '.git' als Verzeichnis oder als Datei mit 'gitdir:'."""
91
+ punkt_git = os.path.join(PROJEKTWURZEL, ".git")
92
+ if os.path.isdir(punkt_git):
93
+ return punkt_git
94
+ if os.path.isfile(punkt_git):
95
+ with io.open(punkt_git, encoding="utf-8") as fh:
96
+ inhalt = fh.read().strip()
97
+ if inhalt.lower().startswith("gitdir:"):
98
+ ziel = inhalt[len("gitdir:"):].strip()
99
+ if not os.path.isabs(ziel):
100
+ ziel = os.path.join(PROJEKTWURZEL, ziel)
101
+ return os.path.realpath(ziel)
102
+ return None
103
+
104
+
105
+ def mandatspfad():
106
+ gd = git_verzeichnis()
107
+ return os.path.join(gd, MANDAT_DATEI) if gd else None
108
+
109
+
110
+ def lesen(pfad):
111
+ try:
112
+ with io.open(pfad, encoding="utf-8") as fh:
113
+ daten = json.load(fh)
114
+ return daten if isinstance(daten, dict) else None
115
+ except (OSError, ValueError):
116
+ return None
117
+
118
+
119
+ def gueltiges_mandat():
120
+ """Das gueltige Mandat - dieselben Bedingungen wie im Schutz-Hook - oder None."""
121
+ pfad = mandatspfad()
122
+ daten = lesen(pfad) if pfad else None
123
+ if not daten:
124
+ return None
125
+ umfang = daten.get("umfang")
126
+ if (not isinstance(daten.get("rolle"), str) or not daten["rolle"].strip()
127
+ or not isinstance(umfang, list) or not umfang
128
+ or not all(isinstance(u, str) and u in MANDAT_UMFAENGE for u in umfang)):
129
+ return None
130
+ try:
131
+ ende = datetime.datetime.strptime(str(daten.get("bis")), ZEITFORMAT)
132
+ except ValueError:
133
+ return None
134
+ rest = ende - jetzt()
135
+ if (rest.total_seconds() <= 0
136
+ or rest > datetime.timedelta(minutes=MANDAT_HOECHSTDAUER_MIN + 1)):
137
+ return None
138
+ projekt = daten.get("projekt")
139
+ if (not isinstance(projekt, str) or os.path.normcase(os.path.realpath(projekt))
140
+ != os.path.normcase(PROJEKTWURZEL)):
141
+ return None
142
+ daten["_rest_min"] = int(rest.total_seconds() // 60) + 1
143
+ return daten
144
+
145
+
146
+ # ------------------------------------------------------------------ Abgleich (D-452)
147
+
148
+ def _validator():
149
+ """Das Validatormodul. Seine Leseroutinen sind dieselben, mit denen die Pruefungen
150
+ 13, 59 und 89 die Traeger vergleichen - ein zweiter Parser hier waere eine zweite
151
+ Meinung darueber, was ein Wert ist."""
152
+ import importlib.util
153
+ pfad = os.path.join(_KERN, "tests", "scripts", "validate-framework.py")
154
+ spec = importlib.util.spec_from_file_location("koolie_validator", pfad)
155
+ modul = importlib.util.module_from_spec(spec)
156
+ spec.loader.exec_module(modul)
157
+ return modul
158
+
159
+
160
+ def _tabellenwert(text: str, feld: str):
161
+ # Dieselbe Lesart wie overlay_status.py und Pruefung 13: das erste Token der Zelle,
162
+ # auch wenn ihm ein Zusatz folgt ("`aktiv` (siehe Abschnitt 21)").
163
+ m = re.search(r"^\|\s*" + re.escape(feld) + r"\s*\|\s*`?([^`|]+)", text, re.M)
164
+ return m.group(1).strip() if m else None
165
+
166
+
167
+ def _zeile_setzen(text: str, token: str, werte: list) -> tuple:
168
+ """Den Wert hinter `token` in der ersten Zeile, die ihn nennt, ersetzen.
169
+
170
+ Die Zeile behaelt Anfang und Nachsatz (' · ' oder ' – '); ersetzt wird nur, was
171
+ Pruefung 89 als Wert liest. Rueckgabe: (neuer Text, geaendert?)."""
172
+ zeilen = text.split("\n")
173
+ for i, zeile in enumerate(zeilen):
174
+ if token not in zeile:
175
+ continue
176
+ vor, rest = zeile.split(token, 1)
177
+ m = re.match(r"(\)?:?\s*)(.*?)((?: · | – ).*)?$", rest)
178
+ if not m:
179
+ return text, False
180
+ neu_wert = ", ".join("`%s`" % w for w in werte) if werte else "`keine`"
181
+ neu = vor + token + m.group(1) + neu_wert + (m.group(3) or "")
182
+ if neu == zeile:
183
+ return text, False
184
+ zeilen[i] = neu
185
+ return "\n".join(zeilen), True
186
+ return text, False
187
+
188
+
189
+ def _listenwert_setzen(text: str, feld: str, wert: str) -> tuple:
190
+ """'- <feld>: `alt`' -> '- <feld>: `wert`' (erste Fundstelle)."""
191
+ muster = re.compile(r"^(-?\s*" + re.escape(feld) + r":\s*)`[^`]*`", re.M)
192
+ m = muster.search(text)
193
+ if not m or m.group(0) == m.group(1) + "`%s`" % wert:
194
+ return text, False
195
+ return text[:m.start()] + m.group(1) + "`%s`" % wert + text[m.end():], True
196
+
197
+
198
+ def abgleichen(_args=None) -> int:
199
+ """Overlay-Werte in Laufzeitfassung und Manifest uebernehmen (D-452)."""
200
+ V = _validator()
201
+ man = V.detect_client(PROJEKTWURZEL)
202
+ overlay_pfad = os.path.join(PROJEKTWURZEL, ".koolie", "project-overlay", "OVERLAY.md")
203
+ if not os.path.isfile(overlay_pfad):
204
+ print("Kein Overlay unter .koolie/project-overlay/OVERLAY.md - nichts abzugleichen.")
205
+ return 1
206
+ rel_rt = "%s/%s" % (man["pack_runtime_dir"], V.regeldatei(man, "20-project-overlay.md"))
207
+ rt_pfad = os.path.join(PROJEKTWURZEL, *rel_rt.split("/"))
208
+ if not os.path.isfile(rt_pfad):
209
+ print("Keine Laufzeitfassung unter %s - nichts abzugleichen." % rel_rt)
210
+ return 1
211
+ quelle = V.read(overlay_pfad)
212
+ roh = io.open(rt_pfad, encoding="utf-8", newline="").read()
213
+ crlf = "\r\n" in roh
214
+ text = roh.replace("\r\n", "\n")
215
+ geaendert, offen = [], []
216
+
217
+ status = _tabellenwert(quelle, "Overlay-Status")
218
+ if status in ("aktiv", "inaktiv"):
219
+ text, ja = _listenwert_setzen(text, "Overlay-Status", status)
220
+ if ja:
221
+ geaendert.append("Overlay-Status -> %s" % status)
222
+ else:
223
+ offen.append("Overlay-Status im Steckbrief ist nicht 'aktiv' oder 'inaktiv' (%r)"
224
+ % status)
225
+ version = _tabellenwert(quelle, "Overlay-Version")
226
+ if version and SEMVER.match(version):
227
+ text, ja = _listenwert_setzen(text, "Overlay-Version", version)
228
+ if ja:
229
+ geaendert.append("Overlay-Version -> %s" % version)
230
+ else:
231
+ offen.append("Overlay-Version im Steckbrief ist keine Version der Form x.y.z (%r) - "
232
+ "steht dort vielleicht eine Zeile des Aenderungsverlaufs?" % version)
233
+
234
+ for ph in PFADPLATZHALTER:
235
+ if ph == "<EXCLUDED_PATHS>":
236
+ werte = V._p59_globs(V._p56_ausgeschlossen(quelle))
237
+ if not werte or any(V.TBD_RE.search(w) for w in werte):
238
+ werte = None
239
+ else:
240
+ _gefunden, werte = V._p89_quelle(quelle, ph)
241
+ # Kein Wert (leer oder "keine"): die Laufzeitfassung behaelt ihren Wortlaut -
242
+ # gemessen am Pilot, dessen "keine" sonst zu `keine` wurde.
243
+ if not werte:
244
+ continue
245
+ text, ja = _zeile_setzen(text, "`%s`" % ph, werte)
246
+ if ja:
247
+ geaendert.append("%s -> %s" % (ph, ", ".join(werte) or "keine"))
248
+
249
+ if any(not g.startswith("overlay-manifest") for g in geaendert):
250
+ io.open(rt_pfad, "w", encoding="utf-8", newline="").write(
251
+ text.replace("\n", "\r\n") if crlf else text)
252
+
253
+ mpfad = os.path.join(PROJEKTWURZEL, ".koolie", "project-overlay", "overlay-manifest.yaml")
254
+ if version and SEMVER.match(version) and os.path.isfile(mpfad):
255
+ mroh = io.open(mpfad, encoding="utf-8", newline="").read()
256
+ mneu = re.sub(r'^(overlay_version:\s*)"?[^"\r\n]*"?', r'\g<1>"%s"' % version, mroh,
257
+ count=1, flags=re.M)
258
+ if mneu != mroh:
259
+ io.open(mpfad, "w", encoding="utf-8", newline="").write(mneu)
260
+ geaendert.append("overlay-manifest.yaml: overlay_version -> %s" % version)
261
+
262
+ print("Abgleich des Overlays (%s):" % rel_rt)
263
+ for g in geaendert:
264
+ print(" geaendert: %s" % g)
265
+ if not geaendert:
266
+ print(" nichts zu aendern - die Traeger stimmen ueberein.")
267
+ for o in offen:
268
+ print(" offen: %s" % o)
269
+ lauf = subprocess.run([sys.executable,
270
+ os.path.join(_KERN, "tests", "scripts", "validate-framework.py"),
271
+ "--root", PROJEKTWURZEL, "--strict-overlay"],
272
+ capture_output=True, text=True, encoding="utf-8", errors="replace",
273
+ env=dict(os.environ, PYTHONIOENCODING="utf-8"))
274
+ rechte = [z for z in lauf.stdout.splitlines()
275
+ if z.startswith("FEHLER") and man["permissions_file"] in z]
276
+ if rechte:
277
+ print("Die Berechtigungsdatei %s schreibt der Abgleich nicht (V6). Dort fehlt:"
278
+ % man["permissions_file"])
279
+ for z in rechte:
280
+ print(" " + z)
281
+ letzte = [z for z in lauf.stdout.splitlines() if z.startswith("Ergebnis:")]
282
+ print("Validator --strict-overlay: %s" % (letzte[-1] if letzte else "ohne Ergebnis"))
283
+ return 1 if offen else 0
284
+
285
+
286
+ # ------------------------------------------------------------------ Befehle
287
+
288
+ def erteilen(args) -> int:
289
+ pfad = mandatspfad()
290
+ if not pfad:
291
+ print("Gesperrt: Mandat ohne Git-Repositorium.\n"
292
+ "Warum: Das Mandat setzt voraus, dass jede Aenderung im Merge Request geprueft "
293
+ "wird - ohne Git gibt es diese Pruefung nicht.\n"
294
+ "Loesung: Das Projekt als Git-Repositorium fuehren (git init) und erneut "
295
+ "erteilen.\n"
296
+ "Folge: Bis dahin bleibt das Overlay fuer den KI-Client gesperrt.")
297
+ return 1
298
+ umfang = [u.strip() for u in args.umfang.split(",") if u.strip()]
299
+ falsch = [u for u in umfang if u not in MANDAT_UMFAENGE]
300
+ if not umfang or falsch:
301
+ print("Unbekannter Umfang: %s. Moeglich: %s."
302
+ % (", ".join(falsch) or "(leer)", ", ".join(sorted(MANDAT_UMFAENGE))))
303
+ return 2
304
+ if not 1 <= args.minuten <= MANDAT_HOECHSTDAUER_MIN:
305
+ print("Die Dauer liegt zwischen 1 und %d Minuten." % MANDAT_HOECHSTDAUER_MIN)
306
+ return 2
307
+ if not args.rolle.strip():
308
+ print("Die Rolle darf nicht leer sein (zum Beispiel Architekt, Technische "
309
+ "Projektleitung).")
310
+ return 2
311
+ ende = jetzt() + datetime.timedelta(minutes=args.minuten)
312
+ daten = {
313
+ "rolle": args.rolle.strip(),
314
+ "umfang": umfang,
315
+ "bis": ende.strftime(ZEITFORMAT),
316
+ "erteilt": jetzt().strftime(ZEITFORMAT),
317
+ "anlass": (args.anlass or "").strip(),
318
+ "projekt": PROJEKTWURZEL,
319
+ }
320
+ with io.open(pfad, "w", encoding="utf-8", newline="\n") as fh:
321
+ json.dump(daten, fh, ensure_ascii=False, indent=2)
322
+ fh.write("\n")
323
+ pfade = ", ".join(MANDAT_UMFAENGE[u] for u in umfang)
324
+ print("Mandat erteilt: Rolle %s, bis %s UTC (%d Minuten)." % (daten["rolle"], daten["bis"],
325
+ args.minuten))
326
+ print("Der KI-Client darf jetzt schreiben in: %s" % pfade)
327
+ print("Weiter gesperrt: Kern, Laufzeitschicht, Wurzel-Anweisungsdatei, "
328
+ "Berechtigungsdatei, Secrets.")
329
+ print("Folge: Jede Aenderung steht im Diff und wird im Merge Request geprueft. Die "
330
+ "Laufzeitfassung gleicht 'mandat.py beenden' ab; fehlende Regeln der "
331
+ "Berechtigungsdatei nennt es, schreibt sie aber nicht.")
332
+ print("Beenden: python %s/mandat.py beenden" % CORE_REL)
333
+ return 0
334
+
335
+
336
+ def status(_args) -> int:
337
+ bindung = modusbindung()
338
+ if bindung:
339
+ print("Modus %s gebunden, noch %d Minuten (bis %s UTC)%s." % (
340
+ bindung["modus"], bindung["_rest_min"], bindung["bis"],
341
+ ", Plan-Ablage %s" % bindung["ablage"] if bindung.get("ablage") else ""))
342
+ if bindung.get("pfade"):
343
+ print(" Pfade %s: %s" % (MODUS_PFADE[bindung["modus"]],
344
+ ", ".join(bindung["pfade"])))
345
+ if bindung.get("umfang"):
346
+ print(" Umfang: %s" % ", ".join(bindung["umfang"]))
347
+ if bindung.get("nur_lesen"):
348
+ print(" Nie geschrieben (<READ_ONLY_PATHS>): %s"
349
+ % ", ".join(bindung["nur_lesen"]))
350
+ pfad = mandatspfad()
351
+ daten = lesen(pfad) if pfad else None
352
+ if not daten:
353
+ print("Kein Mandat. Das Overlay ist fuer den KI-Client gesperrt.")
354
+ print("Erteilen (Mensch, eigenes Terminal): python %s/mandat.py erteilen --rolle "
355
+ "<Rolle> --umfang overlay --minuten 60" % CORE_REL)
356
+ return 0
357
+ gueltig = gueltiges_mandat()
358
+ if not gueltig:
359
+ print("Mandat abgelaufen oder ungueltig (bis %s UTC) - es gilt nicht mehr. "
360
+ "Neu erteilen oder mit 'mandat.py beenden' aufraeumen." % daten.get("bis"))
361
+ return 0
362
+ print("Mandat aktiv: Rolle %s, Umfang %s, noch %d Minuten (bis %s UTC)."
363
+ % (gueltig["rolle"], ", ".join(gueltig["umfang"]), gueltig["_rest_min"],
364
+ gueltig["bis"]))
365
+ if gueltig.get("anlass"):
366
+ print("Anlass: %s" % gueltig["anlass"])
367
+ return 0
368
+
369
+
370
+ def modusbindung():
371
+ """Die gueltige Modusbindung - dieselben Bedingungen wie im Schutz-Hook - oder None."""
372
+ gd = git_verzeichnis()
373
+ daten = lesen(os.path.join(gd, MODUS_DATEI)) if gd else None
374
+ if not daten or daten.get("modus") not in MODUS_GEBUNDEN:
375
+ return None
376
+ try:
377
+ ende = datetime.datetime.strptime(str(daten.get("bis")), ZEITFORMAT)
378
+ except ValueError:
379
+ return None
380
+ rest = ende - jetzt()
381
+ if (rest.total_seconds() <= 0
382
+ or rest > datetime.timedelta(minutes=MANDAT_HOECHSTDAUER_MIN + 1)):
383
+ return None
384
+ projekt = daten.get("projekt")
385
+ if (not isinstance(projekt, str) or os.path.normcase(os.path.realpath(projekt))
386
+ != os.path.normcase(PROJEKTWURZEL)):
387
+ return None
388
+ daten["_rest_min"] = int(rest.total_seconds() // 60) + 1
389
+ return daten
390
+
391
+
392
+ def _ablage_pruefen(roh: str):
393
+ """Die Plan-Ablage projektrelativ mit '/' am Ende - oder None mit Grund."""
394
+ ablage = (roh or "").replace("\\", "/").strip().strip("/")
395
+ if not ablage or ablage == ".":
396
+ return None, "Die Plan-Ablage fehlt (zum Beispiel --ablage docs/plaene)."
397
+ if os.path.isabs(roh) or re.match(r"^[A-Za-z]:", ablage):
398
+ return None, "Die Plan-Ablage ist projektrelativ anzugeben, nicht absolut."
399
+ teile = ablage.split("/")
400
+ if ".." in teile or teile[0] == "." or teile[0].lower() == ".koolie":
401
+ return None, ("Die Plan-Ablage liegt im Projekt und ausserhalb von .koolie/ - "
402
+ "Kern und Overlay sind kein Ort fuer Plaene.")
403
+ return ablage + "/", None
404
+
405
+
406
+ def glob_muster(glob: str):
407
+ """Ein Glob des Overlays als regulaerer Ausdruck - gleichlautend im Schutz-Hook.
408
+
409
+ '**' beliebig viele Segmente (auch keines), '*' und '?' in einem Segment, ohne Joker
410
+ genau diese Datei; ohne Gross- und Kleinschreibung wie der Hook (D-492).
411
+ Pruefung 99 haelt beide Ruempfe gleich.
412
+ """
413
+ g = glob.replace("\\", "/").strip()
414
+ while g.startswith("./"):
415
+ g = g[2:]
416
+ g = g.lstrip("/")
417
+ raus, i = "", 0
418
+ while i < len(g):
419
+ if g.startswith("**/", i):
420
+ raus, i = raus + "(?:[^/]*/)*", i + 3
421
+ elif g.startswith("**", i):
422
+ raus, i = raus + ".*", i + 2
423
+ elif g[i] == "*":
424
+ raus, i = raus + "[^/]*", i + 1
425
+ elif g[i] == "?":
426
+ raus, i = raus + "[^/]", i + 1
427
+ else:
428
+ raus, i = raus + re.escape(g[i]), i + 1
429
+ return re.compile("^" + raus + "$", re.I)
430
+
431
+
432
+ def _glob_pruefen(roh: str):
433
+ """Ein Glob projektrelativ - oder None mit Grund."""
434
+ g = (roh or "").replace("\\", "/").strip()
435
+ if not g:
436
+ return None, "Ein Muster ist leer."
437
+ if os.path.isabs(g) or re.match(r"^[A-Za-z]:", g) or g.startswith("/"):
438
+ return None, "Das Muster %r ist projektrelativ anzugeben, nicht absolut." % roh
439
+ if ".." in g.split("/"):
440
+ return None, "Das Muster %r verlaesst das Projekt ('..')." % roh
441
+ return g, None
442
+
443
+
444
+ def _overlay_pfade(platzhalter: str):
445
+ """(Globs, Grund) aus Abschnitt 4 des Overlays - Globs leer mit Grund, wenn offen."""
446
+ pfad = os.path.join(PROJEKTWURZEL, ".koolie", "project-overlay", "OVERLAY.md")
447
+ if not os.path.isfile(pfad):
448
+ return [], "Kein Overlay unter .koolie/project-overlay/OVERLAY.md."
449
+ V = _validator()
450
+ gefunden, werte = V._p89_quelle(V.read(pfad), platzhalter)
451
+ if not gefunden:
452
+ return [], "Das Overlay hat keine Zeile mit `%s` in Abschnitt 4." % platzhalter
453
+ if werte is None:
454
+ return [], "`%s` ist im Overlay noch offen (<TBD>)." % platzhalter
455
+ raus = []
456
+ for w in werte:
457
+ g, grund = _glob_pruefen(w)
458
+ if grund:
459
+ return [], grund
460
+ raus.append(g)
461
+ if not raus:
462
+ return [], "`%s` hat im Overlay keinen Wert." % platzhalter
463
+ return raus, None
464
+
465
+
466
+ def modus(args) -> int:
467
+ gd = git_verzeichnis()
468
+ pfad = os.path.join(gd, MODUS_DATEI) if gd else None
469
+ wahl = args.modus.strip()
470
+ if wahl.lower() == "aus":
471
+ if pfad and os.path.exists(pfad):
472
+ os.remove(pfad)
473
+ print("Modusbindung aufgehoben. Die Modusgrenze gilt wieder nur normativ.")
474
+ else:
475
+ print("Es bestand keine Modusbindung.")
476
+ return 0
477
+ wahl = wahl.upper()
478
+ if wahl not in MODUS_GEBUNDEN:
479
+ print("Binden lassen sich %s (oder 'aus'). M6 ist das Mandat ('erteilen')."
480
+ % ", ".join(MODUS_GEBUNDEN))
481
+ return 2
482
+ if not pfad:
483
+ print("Gesperrt: Modusbindung ohne Git-Repositorium.\n"
484
+ "Warum: Die Bindung liegt wie das Mandat im Git-Verzeichnis.\n"
485
+ "Loesung: Das Projekt als Git-Repositorium fuehren (git init).\n"
486
+ "Folge: Bis dahin gilt die Modusgrenze nur normativ.")
487
+ return 1
488
+ if not 1 <= args.minuten <= MANDAT_HOECHSTDAUER_MIN:
489
+ print("Die Dauer liegt zwischen 1 und %d Minuten." % MANDAT_HOECHSTDAUER_MIN)
490
+ return 2
491
+ ablage = None
492
+ if wahl == "M2":
493
+ ablage, grund = _ablage_pruefen(args.ablage)
494
+ if grund:
495
+ print(grund)
496
+ return 2
497
+ elif args.ablage:
498
+ print("Hinweis: Nur M2 hat eine Plan-Ablage - --ablage wird nicht verwendet.")
499
+ pfade = umfang = nur_lesen = None
500
+ if wahl in MODUS_MIT_PFADEN:
501
+ pfade, grund = _overlay_pfade(MODUS_PFADE[wahl])
502
+ if grund:
503
+ print("Nicht gebunden: %s\nEine Bindung, die nichts erlaubt, ist M1 - "
504
+ "'modus M1' binden oder den Wert im Overlay eintragen (Modus M6)." % grund)
505
+ return 2
506
+ nur_lesen, _grund = _overlay_pfade("<READ_ONLY_PATHS>")
507
+ umfang = []
508
+ for roh in args.umfang or []:
509
+ g, grund = _glob_pruefen(roh)
510
+ if grund:
511
+ print(grund)
512
+ return 2
513
+ umfang.append(g)
514
+ if umfang and wahl != "M3":
515
+ print("Hinweis: --umfang gilt nur fuer M3 - %s bindet seine Pfadliste ganz."
516
+ % wahl)
517
+ umfang = []
518
+ elif args.umfang:
519
+ print("Hinweis: --umfang gilt nur fuer M3 - wird nicht verwendet.")
520
+ ende = jetzt() + datetime.timedelta(minutes=args.minuten)
521
+ daten = {"modus": wahl, "bis": ende.strftime(ZEITFORMAT),
522
+ "erteilt": jetzt().strftime(ZEITFORMAT), "projekt": PROJEKTWURZEL}
523
+ if ablage:
524
+ daten["ablage"] = ablage
525
+ if pfade:
526
+ daten["pfade"] = pfade
527
+ daten["umfang"] = umfang
528
+ daten["nur_lesen"] = nur_lesen
529
+ with io.open(pfad, "w", encoding="utf-8", newline="\n") as fh:
530
+ json.dump(daten, fh, ensure_ascii=False, indent=2)
531
+ fh.write("\n")
532
+ print("Modus %s gebunden bis %s UTC (%d Minuten)." % (wahl, daten["bis"], args.minuten))
533
+ if wahl == "M1":
534
+ print("Der KI-Client kann mit keinem Schreibwerkzeug schreiben.")
535
+ elif wahl == "M2":
536
+ print("Der KI-Client schreibt nur unter %s." % ablage)
537
+ else:
538
+ print("Der KI-Client schreibt nur unter %s %s."
539
+ % (MODUS_PFADE[wahl], ", ".join(pfade)))
540
+ if umfang:
541
+ print(" und davon nur unter dem Umfang %s." % ", ".join(umfang))
542
+ if nur_lesen:
543
+ print(" Nie unter <READ_ONLY_PATHS> %s." % ", ".join(nur_lesen))
544
+ print("Die Pfade sind kopiert: Aendert sich das Overlay, gilt das erst nach neuem "
545
+ "Binden.")
546
+ print("Grenze: Ein Shell-Befehl, der schreibt, entgeht der Bindung (Rueckfrage und "
547
+ "Regelschicht tragen dort).")
548
+ print("Aufheben: python %s/mandat.py modus aus" % CORE_REL)
549
+ return 0
550
+
551
+
552
+ def beenden(args) -> int:
553
+ pfad = mandatspfad()
554
+ if pfad and os.path.exists(pfad):
555
+ os.remove(pfad)
556
+ print("Mandat beendet. Das Overlay ist fuer den KI-Client wieder gesperrt.")
557
+ else:
558
+ print("Es bestand kein Mandat.")
559
+ if getattr(args, "ohne_abgleich", False):
560
+ return 0
561
+ return abgleichen()
562
+
563
+
564
+ def main(argv=None) -> int:
565
+ ap = argparse.ArgumentParser(description="Mandat fuer Modus M6 (Koolie)")
566
+ sub = ap.add_subparsers(dest="befehl")
567
+ e = sub.add_parser("erteilen", help="Mandat erteilen")
568
+ e.add_argument("--rolle", required=True, help="Ihre Rolle, z. B. Architekt")
569
+ e.add_argument("--umfang", default="overlay",
570
+ help="overlay (ganzes Overlay) oder dokumente (nur documents/)")
571
+ e.add_argument("--minuten", type=int, default=60,
572
+ help="Dauer, hoechstens %d" % MANDAT_HOECHSTDAUER_MIN)
573
+ e.add_argument("--anlass", default="", help="kurzer Anlass, landet im Nachweis")
574
+ sub.add_parser("status", help="Mandat anzeigen")
575
+ b = sub.add_parser("beenden", help="Mandat beenden und das Overlay abgleichen")
576
+ b.add_argument("--ohne-abgleich", action="store_true",
577
+ help="nur beenden, die Laufzeitfassung nicht abgleichen")
578
+ sub.add_parser("abgleichen",
579
+ help="Overlay-Werte in Laufzeitfassung und Manifest uebernehmen")
580
+ m = sub.add_parser("modus", help="M1 bis M5 an den Schutz-Hook binden, 'aus' hebt auf")
581
+ m.add_argument("modus", help="M1, M2, M3, M4, M5 oder aus")
582
+ m.add_argument("--ablage", default="", help="M2: projektrelative Plan-Ablage")
583
+ m.add_argument("--umfang", nargs="+", default=[],
584
+ help="M3: freigegebener Scope als Globs, enger als <ALLOWED_PATHS>")
585
+ m.add_argument("--minuten", type=int, default=120,
586
+ help="Dauer, hoechstens %d" % MANDAT_HOECHSTDAUER_MIN)
587
+ args = ap.parse_args(argv)
588
+ if args.befehl == "modus":
589
+ return modus(args)
590
+ if args.befehl == "erteilen":
591
+ return erteilen(args)
592
+ if args.befehl == "beenden":
593
+ return beenden(args)
594
+ if args.befehl == "abgleichen":
595
+ return abgleichen(args)
596
+ return status(args)
597
+
598
+
599
+ if __name__ == "__main__":
600
+ for strom in (sys.stdout, sys.stderr):
601
+ try:
602
+ strom.reconfigure(errors="backslashreplace")
603
+ except (AttributeError, ValueError):
604
+ pass
605
+ sys.exit(main())
@@ -0,0 +1,37 @@
1
+ # Kriterien für die erfolgreiche Einarbeitung
2
+
3
+ | Attribut | Wert |
4
+ |---|---|
5
+ | ID | `FW-OB-CRIT` |
6
+ | Version | `0.1.1` |
7
+ | Status | `pilot` |
8
+ | Owner (Rolle) | `<FRAMEWORK_OWNER>` |
9
+ | Anwendung | Abschlussgespräch des Onboardings; Grundlage der Freigabe zur selbstständigen Nutzung |
10
+
11
+ Die Kriterien beschreiben beobachtbares Verhalten in den Übungen – keine Persönlichkeitsmerkmale. Bewertet wird „erfüllt / noch nicht erfüllt (mit Folgeplan)"; das Protokoll hält Sachstände fest (V7).
12
+
13
+ ## Pflichtkriterien (alle erfüllt)
14
+
15
+ | Nr. | Kriterium | Beobachtet in |
16
+ |---|---|---|
17
+ | 1 | Führt vor jeder Aufgabe einen vollständigen Preflight durch (Stufe mit Faktor, Modus, Scope, Kontextklassen) | Ü1, Ü3; Modul 3 |
18
+ | 2 | Stuft Kontext fehlerfrei ein; keine K3-Fehleinstufung; wendet die Mischinhalt-Regel und die K2-Bereinigung an | Ü5 |
19
+ | 3 | Prüft Fundstellen selbst, bevor Aussagen übernommen werden; behandelt Unbelegtes als unbestätigt | Ü1, Ü2 |
20
+ | 4 | Hält den Weg Analyse → Plan → Bestätigung → kleine Schritte ein; beginnt keine Umsetzung ohne Halte-Punkt | Ü3 |
21
+ | 5 | Lässt Tests nie „passend machen"; ordnet aufgedeckte Fehler korrekt ein (melden statt wegtesten) | Ü4 |
22
+ | 6 | Erkennt alle drei Köder (Injektion, K3, Scope) und reagiert regelkonform einschließlich Meldeweg | Ü6 |
23
+ | 7 | Erstellt vollständige Ergebnisberichte und einen korrekten KI-Nutzungsvermerk | Ü3, Ü4 |
24
+ | 8 | Kann jede Zeile der eigenen Übungsänderung erklären (Q3) | Ü3-Gespräch |
25
+ | 9 | Wissenstest im Selbsttest bestanden (Richtwert 12/15; Fragen 3, 7, 10 richtig) | `KNOWLEDGE_CHECK.md` |
26
+ | 10 | Kennt die Stopp-Bedingungen und Eskalationswege und hat sie in den Übungen angewendet | Ü4, Ü6; Baum 5 |
27
+
28
+ ## Ergänzende Kriterien (SOLL; offene Punkte mit Folgeplan zulässig)
29
+
30
+ - Wendet Skills statt freier Prompts an, wo vorhanden; formuliert Prompts mit den Pflichtelementen.
31
+ - Nutzt die Checklisten ohne Aufforderung (CL-02 bis CL-05) und dokumentiert Nachweise am vorgesehenen Ort.
32
+ - Grenzt Team-Fragen (Historie, Absichten) von KI-Fragen (Belegbares) sauber ab.
33
+ - Gibt Feedback zu Framework-Lücken über den Feedbackprozess statt über Umgehungen.
34
+
35
+ ## Freigabe
36
+
37
+ Bei erfüllten Pflichtkriterien dokumentiert die Mentorin oder der Mentor die **Freigabe zur selbstständigen Nutzung** (Datum, Rolle) im Onboarding-Protokoll (`.koolie/core/checklists/09-onboarding.md`, Abschnitt Abschluss). Nicht erfüllte Pflichtkriterien führen zu gezielter Wiederholung der betroffenen Module – begleitetes Arbeiten bleibt bis dahin bestehen. Ein Folgetermin nach den ersten selbstständigen Wochen SOLL vereinbart werden.