@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.
- package/.gitattributes +16 -0
- package/.gitignore +51 -0
- package/.koolie/QUELLREPOSITORIUM.md +18 -0
- package/.koolie/core/CHANGELOG.md +11832 -0
- package/.koolie/core/LICENSE +674 -0
- package/.koolie/core/LICENSE-HINWEIS.md +98 -0
- package/.koolie/core/OWNERS.md +36 -0
- package/.koolie/core/VERSION +1 -0
- package/.koolie/core/banner.py +397 -0
- package/.koolie/core/build/README.md +34 -0
- package/.koolie/core/build/assemble.py +354 -0
- package/.koolie/core/build/build-docx.py +194 -0
- package/.koolie/core/build/doc/00-kopf.md +18 -0
- package/.koolie/core/build/doc/01-executive-summary.md +24 -0
- package/.koolie/core/build/doc/02-zielbild.md +13 -0
- package/.koolie/core/build/doc/03-ziele-nichtziele.md +28 -0
- package/.koolie/core/build/doc/04-geltungsbereich.md +25 -0
- package/.koolie/core/build/doc/05-glossar.md +47 -0
- package/.koolie/core/build/doc/06-leitprinzipien.md +5 -0
- package/.koolie/core/build/doc/07-architektur.md +60 -0
- package/.koolie/core/build/doc/07a-abbildungsschicht.md +66 -0
- package/.koolie/core/build/doc/08-trennung.md +24 -0
- package/.koolie/core/build/doc/09-betriebsmodi.md +18 -0
- package/.koolie/core/build/doc/10-arbeitsablauf.md +5 -0
- package/.koolie/core/build/doc/11-datenschutz.md +5 -0
- package/.koolie/core/build/doc/12-sicherheit.md +5 -0
- package/.koolie/core/build/doc/13-risiko.md +5 -0
- package/.koolie/core/build/doc/14-rollen.md +9 -0
- package/.koolie/core/build/doc/15-referenzstruktur.md +124 -0
- package/.koolie/core/build/doc/16-agentenanweisung.md +8 -0
- package/.koolie/core/build/doc/17-overlay.md +29 -0
- package/.koolie/core/build/doc/18-skill-standard.md +5 -0
- package/.koolie/core/build/doc/19-skill-template.md +5 -0
- package/.koolie/core/build/doc/20-referenz-skills.md +70 -0
- package/.koolie/core/build/doc/21-prompts.md +53 -0
- package/.koolie/core/build/doc/22-checklisten.md +49 -0
- package/.koolie/core/build/doc/23-entscheidungsbaeume.md +29 -0
- package/.koolie/core/build/doc/24-onboarding.md +33 -0
- package/.koolie/core/build/doc/25-governance.md +35 -0
- package/.koolie/core/build/doc/26-qs-test.md +9 -0
- package/.koolie/core/build/doc/27-pilot.md +13 -0
- package/.koolie/core/build/doc/28-uebernahme.md +5 -0
- package/.koolie/core/build/doc/29-grenzen.md +87 -0
- package/.koolie/core/build/doc/30-roadmap.md +5 -0
- package/.koolie/core/build/doc/31-anhaenge.md +151 -0
- package/.koolie/core/build/doc/32-abschluss.md +92 -0
- package/.koolie/core/build/ref-a4.docx +0 -0
- package/.koolie/core/checklists/01-preflight.md +54 -0
- package/.koolie/core/checklists/02-privacy-context.md +51 -0
- package/.koolie/core/checklists/03-before-code-change.md +51 -0
- package/.koolie/core/checklists/04-review-ai-code.md +58 -0
- package/.koolie/core/checklists/05-testing.md +48 -0
- package/.koolie/core/checklists/06-security.md +50 -0
- package/.koolie/core/checklists/07-new-dependency.md +57 -0
- package/.koolie/core/checklists/08-merge-request.md +47 -0
- package/.koolie/core/checklists/09-onboarding.md +52 -0
- package/.koolie/core/checklists/10-project-adoption.md +74 -0
- package/.koolie/core/checklists/11-framework-release.md +71 -0
- package/.koolie/core/checklists/README.md +28 -0
- package/.koolie/core/clientmap.py +1358 -0
- package/.koolie/core/clients/README.md +113 -0
- package/.koolie/core/clients/_template/CLIENT_PACK.md +197 -0
- package/.koolie/core/clients/claude-code/CLIENT_PACK.md +383 -0
- package/.koolie/core/clients/claude-code/manifest.json +232 -0
- package/.koolie/core/clients/claude-code/root-template/.claude/README.md +127 -0
- package/.koolie/core/clients/cursor/CLIENT_PACK.md +229 -0
- package/.koolie/core/clients/cursor/manifest.json +330 -0
- package/.koolie/core/clients/cursor/root-template/.cursor/README.md +36 -0
- package/.koolie/core/clients/devin-desktop/CLIENT_PACK.md +251 -0
- package/.koolie/core/clients/devin-desktop/manifest.json +163 -0
- package/.koolie/core/clients/devin-desktop/root-template/.devin/README.md +79 -0
- package/.koolie/core/clients/kiro/CLIENT_PACK.md +223 -0
- package/.koolie/core/clients/kiro/manifest.json +300 -0
- package/.koolie/core/clients/kiro/root-template/.kiro/README.md +37 -0
- package/.koolie/core/clients/openai-codex/CLIENT_PACK.md +257 -0
- package/.koolie/core/clients/openai-codex/manifest.json +208 -0
- package/.koolie/core/clients/openai-codex/root-template/.codex/README.md +35 -0
- package/.koolie/core/decision-trees/01-context-allowed.md +46 -0
- package/.koolie/core/decision-trees/02-may-ai-do-task.md +47 -0
- package/.koolie/core/decision-trees/03-analyze-or-modify.md +50 -0
- package/.koolie/core/decision-trees/04-required-review.md +49 -0
- package/.koolie/core/decision-trees/05-stop-or-escalate.md +47 -0
- package/.koolie/core/decision-trees/06-rule-placement.md +58 -0
- package/.koolie/core/decision-trees/README.md +14 -0
- package/.koolie/core/docs/ADOPTION_GUIDE.md +582 -0
- package/.koolie/core/docs/DOCUMENTATION_STANDARD.md +91 -0
- package/.koolie/core/docs/PLACEHOLDER_REGISTRY.md +79 -0
- package/.koolie/core/docs/ROADMAP.md +848 -0
- package/.koolie/core/docs/RUNTIME_GLOSSARY.md +113 -0
- package/.koolie/core/examples/README.md +11 -0
- package/.koolie/core/examples/example-ergebnisbericht.md +31 -0
- package/.koolie/core/examples/example-mr-description.md +31 -0
- package/.koolie/core/examples/example-overlay-runtime.md +48 -0
- package/.koolie/core/framework/core/00-principles.md +93 -0
- package/.koolie/core/framework/core/01-governance.md +58 -0
- package/.koolie/core/framework/core/02-privacy.md +141 -0
- package/.koolie/core/framework/core/03-security.md +86 -0
- package/.koolie/core/framework/core/04-quality.md +48 -0
- package/.koolie/core/framework/core/05-working-model.md +199 -0
- package/.koolie/core/framework/core/06-prompting-rules.md +51 -0
- package/.koolie/core/framework/core/07-review-rules.md +52 -0
- package/.koolie/core/framework/core/08-skill-conventions.md +115 -0
- package/.koolie/core/framework/core/09-risk-model.md +87 -0
- package/.koolie/core/framework/core/10-error-escalation.md +53 -0
- package/.koolie/core/framework/org-policies/MAPPING_CLASSIFICATION.md +16 -0
- package/.koolie/core/framework/org-policies/README.md +29 -0
- package/.koolie/core/framework/overlay-patterns/general/documents/branching-strategy/muster-general.md +43 -0
- package/.koolie/core/framework/overlay-patterns/general/documents/coding-guidelines/muster-general.md +82 -0
- package/.koolie/core/framework/overlay-patterns/general/documents/definition-of-done/muster-general.md +52 -0
- package/.koolie/core/framework/overlay-patterns/general/documents/definition-of-ready/muster-general.md +54 -0
- package/.koolie/core/framework/overlay-patterns/general/documents/quality/muster-general.md +59 -0
- package/.koolie/core/framework/overlay-patterns/general/documents/security/muster-general.md +52 -0
- package/.koolie/core/framework/overlay-patterns/general.md +150 -0
- package/.koolie/core/framework/role-packs/README.md +63 -0
- package/.koolie/core/framework/role-packs/_template/ROLE_PACK.md +58 -0
- package/.koolie/core/framework/role-packs/requirements-engineering/ROLE_PACK.md +158 -0
- package/.koolie/core/framework/role-packs/requirements-engineering/runtime/30-role-requirements-engineering.md +88 -0
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/CHANGELOG.md +10 -0
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/EXAMPLES.md +148 -0
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/SKILL.md +195 -0
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/TESTS.md +22 -0
- package/.koolie/core/framework/role-packs/software-development/ROLE_PACK.md +95 -0
- package/.koolie/core/framework/role-packs/software-development/runtime/30-role-software-development.md +26 -0
- package/.koolie/core/framework/runtime/agents/fw-reviewer.md +34 -0
- package/.koolie/core/framework/runtime/client-settings.json +3 -0
- package/.koolie/core/framework/runtime/hooks.json +20 -0
- package/.koolie/core/framework/runtime/mcp-config.example.json +4 -0
- package/.koolie/core/framework/runtime/permissions.json +106 -0
- package/.koolie/core/framework/runtime/root-instruction-local.example.md +19 -0
- package/.koolie/core/framework/runtime/root-instruction.md +116 -0
- package/.koolie/core/framework/runtime/rules/00-framework-core.md +49 -0
- package/.koolie/core/framework/runtime/rules/10-privacy-security.md +49 -0
- package/.koolie/core/framework/runtime/rules/15-development-rules.md +41 -0
- package/.koolie/core/framework/runtime/rules/16-plan-spezifikation.md +32 -0
- package/.koolie/core/framework/runtime/rules/20-project-overlay.md +60 -0
- package/.koolie/core/framework/skills/fw-bugfix-prepare/CHANGELOG.md +14 -0
- package/.koolie/core/framework/skills/fw-bugfix-prepare/EXAMPLES.md +57 -0
- package/.koolie/core/framework/skills/fw-bugfix-prepare/SKILL.md +177 -0
- package/.koolie/core/framework/skills/fw-bugfix-prepare/TESTS.md +15 -0
- package/.koolie/core/framework/skills/fw-change-analyze/CHANGELOG.md +12 -0
- package/.koolie/core/framework/skills/fw-change-analyze/EXAMPLES.md +66 -0
- package/.koolie/core/framework/skills/fw-change-analyze/SKILL.md +167 -0
- package/.koolie/core/framework/skills/fw-change-analyze/TESTS.md +16 -0
- package/.koolie/core/framework/skills/fw-change-small/CHANGELOG.md +13 -0
- package/.koolie/core/framework/skills/fw-change-small/EXAMPLES.md +68 -0
- package/.koolie/core/framework/skills/fw-change-small/SKILL.md +175 -0
- package/.koolie/core/framework/skills/fw-change-small/TESTS.md +13 -0
- package/.koolie/core/framework/skills/fw-code-explain/CHANGELOG.md +11 -0
- package/.koolie/core/framework/skills/fw-code-explain/EXAMPLES.md +61 -0
- package/.koolie/core/framework/skills/fw-code-explain/SKILL.md +163 -0
- package/.koolie/core/framework/skills/fw-code-explain/TESTS.md +11 -0
- package/.koolie/core/framework/skills/fw-docs-update/CHANGELOG.md +10 -0
- package/.koolie/core/framework/skills/fw-docs-update/EXAMPLES.md +59 -0
- package/.koolie/core/framework/skills/fw-docs-update/SKILL.md +160 -0
- package/.koolie/core/framework/skills/fw-docs-update/TESTS.md +12 -0
- package/.koolie/core/framework/skills/fw-error-analyze/CHANGELOG.md +10 -0
- package/.koolie/core/framework/skills/fw-error-analyze/EXAMPLES.md +67 -0
- package/.koolie/core/framework/skills/fw-error-analyze/SKILL.md +160 -0
- package/.koolie/core/framework/skills/fw-error-analyze/TESTS.md +12 -0
- package/.koolie/core/framework/skills/fw-mr-description/CHANGELOG.md +12 -0
- package/.koolie/core/framework/skills/fw-mr-description/EXAMPLES.md +69 -0
- package/.koolie/core/framework/skills/fw-mr-description/SKILL.md +170 -0
- package/.koolie/core/framework/skills/fw-mr-description/TESTS.md +12 -0
- package/.koolie/core/framework/skills/fw-overlay-pflege/CHANGELOG.md +7 -0
- package/.koolie/core/framework/skills/fw-overlay-pflege/EXAMPLES.md +48 -0
- package/.koolie/core/framework/skills/fw-overlay-pflege/SKILL.md +147 -0
- package/.koolie/core/framework/skills/fw-overlay-pflege/TESTS.md +13 -0
- package/.koolie/core/framework/skills/fw-plan/CHANGELOG.md +14 -0
- package/.koolie/core/framework/skills/fw-plan/EXAMPLES.md +69 -0
- package/.koolie/core/framework/skills/fw-plan/SKILL.md +168 -0
- package/.koolie/core/framework/skills/fw-plan/TESTS.md +14 -0
- package/.koolie/core/framework/skills/fw-refactor/CHANGELOG.md +10 -0
- package/.koolie/core/framework/skills/fw-refactor/EXAMPLES.md +70 -0
- package/.koolie/core/framework/skills/fw-refactor/SKILL.md +173 -0
- package/.koolie/core/framework/skills/fw-refactor/TESTS.md +14 -0
- package/.koolie/core/framework/skills/fw-repo-analyze/CHANGELOG.md +10 -0
- package/.koolie/core/framework/skills/fw-repo-analyze/EXAMPLES.md +52 -0
- package/.koolie/core/framework/skills/fw-repo-analyze/SKILL.md +149 -0
- package/.koolie/core/framework/skills/fw-repo-analyze/TESTS.md +11 -0
- package/.koolie/core/framework/skills/fw-review-support/CHANGELOG.md +12 -0
- package/.koolie/core/framework/skills/fw-review-support/EXAMPLES.md +69 -0
- package/.koolie/core/framework/skills/fw-review-support/SKILL.md +179 -0
- package/.koolie/core/framework/skills/fw-review-support/TESTS.md +13 -0
- package/.koolie/core/framework/skills/fw-tests/CHANGELOG.md +9 -0
- package/.koolie/core/framework/skills/fw-tests/EXAMPLES.md +65 -0
- package/.koolie/core/framework/skills/fw-tests/SKILL.md +169 -0
- package/.koolie/core/framework/skills/fw-tests/TESTS.md +12 -0
- package/.koolie/core/framework/tech-packs/README.md +15 -0
- package/.koolie/core/framework/tech-packs/_template/TECH_PACK.md +61 -0
- package/.koolie/core/governance/ADOPTION_REGISTRY.md +89 -0
- package/.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md +60 -0
- package/.koolie/core/governance/DECISION_LOG.md +779 -0
- package/.koolie/core/governance/EXCEPTION_PROCESS.md +31 -0
- package/.koolie/core/governance/FEEDBACK_PROCESS.md +34 -0
- package/.koolie/core/governance/FRAMEWORK_DEV_PROFILE.md +135 -0
- package/.koolie/core/governance/INCIDENT_HANDLING.md +47 -0
- package/.koolie/core/governance/PRIORITY_HIERARCHY.md +61 -0
- package/.koolie/core/governance/RACI.md +37 -0
- package/.koolie/core/governance/RELEASE_PROCESS.md +183 -0
- package/.koolie/core/governance/change-requests/CR-2026-001-definition-release-1-0-0.md +67 -0
- package/.koolie/core/governance/change-requests/CR-2026-002-client-packs.md +63 -0
- package/.koolie/core/governance/change-requests/CR-2026-003-install-client-schalter.md +70 -0
- package/.koolie/core/governance/change-requests/CR-2026-004-client-pack-claude-code.md +82 -0
- package/.koolie/core/governance/change-requests/CR-2026-005-kern-neutralisierung.md +75 -0
- package/.koolie/core/governance/change-requests/CR-2026-006-gemeinsame-skill-quelle.md +77 -0
- package/.koolie/core/governance/change-requests/CR-2026-007-geteilte-kernbestandteile.md +80 -0
- package/.koolie/core/governance/change-requests/CR-2026-008-berechtigungen-und-hooks.md +85 -0
- package/.koolie/core/governance/change-requests/CR-2026-009-umbenennung-leitwerk.md +77 -0
- package/.koolie/core/governance/change-requests/CR-2026-010-restduplikation.md +73 -0
- package/.koolie/core/governance/change-requests/CR-2026-011-hauptdokument.md +72 -0
- package/.koolie/core/governance/change-requests/CR-2026-012-schreibschutz-kernverzeichnis.md +106 -0
- package/.koolie/core/governance/change-requests/CR-2026-013-validator-blindstellen.md +128 -0
- package/.koolie/core/governance/change-requests/CR-2026-014-kurzform-langform.md +125 -0
- package/.koolie/core/governance/change-requests/CR-2026-015-versionskette.md +150 -0
- package/.koolie/core/governance/change-requests/CR-2026-016-ap2-claude-code.md +127 -0
- package/.koolie/core/governance/change-requests/CR-2026-017-ladebedingungen-claude-code.md +173 -0
- package/.koolie/core/governance/change-requests/CR-2026-018-quellenliste-claude-code.md +121 -0
- package/.koolie/core/governance/change-requests/CR-2026-019-strukturentscheidungen-fortschreiben.md +143 -0
- package/.koolie/core/governance/change-requests/CR-2026-020-akteursbezeichnung.md +118 -0
- package/.koolie/core/governance/change-requests/CR-2026-021-hook-interpreter.md +113 -0
- package/.koolie/core/governance/change-requests/CR-2026-022-artefaktversionen.md +73 -0
- package/.koolie/core/governance/change-requests/CR-2026-023-shell-lesesperre.md +128 -0
- package/.koolie/core/governance/change-requests/CR-2026-024-clientbindungen.md +78 -0
- package/.koolie/core/governance/change-requests/CR-2026-025-betriebsmodi.md +110 -0
- package/.koolie/core/governance/change-requests/CR-2026-026-fail-closed.md +134 -0
- package/.koolie/core/governance/change-requests/CR-2026-027-zeichenlimit-einstufung.md +105 -0
- package/.koolie/core/governance/change-requests/CR-2026-028-berechtigungsmodi.md +130 -0
- package/.koolie/core/governance/change-requests/CR-2026-029-hook-ablageort.md +115 -0
- package/.koolie/core/governance/change-requests/CR-2026-030-lesende-werkzeuge.md +143 -0
- package/.koolie/core/governance/change-requests/CR-2026-031-regelquellen-ausserhalb.md +182 -0
- package/.koolie/core/governance/change-requests/CR-2026-032-fremde-skill-ablage.md +151 -0
- package/.koolie/core/governance/change-requests/CR-2026-033-modusabhaengige-durchsetzung.md +131 -0
- package/.koolie/core/governance/change-requests/CR-2026-034-nachweisbedingungen.md +116 -0
- package/.koolie/core/governance/change-requests/CR-2026-035-readme-in-der-regelablage.md +115 -0
- package/.koolie/core/governance/change-requests/CR-2026-036-ortsangaben-hook-konfiguration.md +108 -0
- package/.koolie/core/governance/change-requests/CR-2026-037-meldender-hook-clientgebunden.md +133 -0
- package/.koolie/core/governance/change-requests/CR-2026-038-importsteuerung.md +159 -0
- package/.koolie/core/governance/change-requests/CR-2026-039-normative-saetze-in-kommentaren.md +124 -0
- package/.koolie/core/governance/change-requests/CR-2026-040-erh01-ist-clientgebunden.md +115 -0
- package/.koolie/core/governance/change-requests/CR-2026-041-s5-nicht-abbildbar.md +128 -0
- package/.koolie/core/governance/change-requests/CR-2026-042-abwesenheitsnachweis-suchwerkzeug.md +102 -0
- package/.koolie/core/governance/change-requests/CR-2026-043-validator-gibt-trefferwerte-aus.md +135 -0
- package/.koolie/core/governance/change-requests/CR-2026-044-aktivierungspruefung-clientgebunden.md +112 -0
- package/.koolie/core/governance/change-requests/CR-2026-045-update-verliert-die-clientwahl.md +116 -0
- package/.koolie/core/governance/change-requests/CR-2026-046-erstinstallation-ueberschreibt-projektdatei.md +125 -0
- package/.koolie/core/governance/change-requests/CR-2026-047-zusagen-je-zugriffskanal.md +133 -0
- package/.koolie/core/governance/change-requests/CR-2026-048-modusgrenze-ohne-durchsetzung.md +137 -0
- package/.koolie/core/governance/change-requests/CR-2026-049-sondenlauf-kodierungsabhaengig.md +126 -0
- package/.koolie/core/governance/change-requests/CR-2026-050-allowed-tools-und-verworfene-permissions.md +110 -0
- package/.koolie/core/governance/change-requests/CR-2026-051-quellenkarte-und-ueberholter-stand.md +110 -0
- package/.koolie/core/governance/change-requests/CR-2026-052-drei-regelkonflikte.md +166 -0
- package/.koolie/core/governance/change-requests/CR-2026-053-lesesperre-und-entwicklungsprofil.md +144 -0
- package/.koolie/core/governance/change-requests/CR-2026-054-aktivierung-verlangt-aktivitaet.md +124 -0
- package/.koolie/core/governance/change-requests/CR-2026-055-domain-ausnahme-ohne-mechanismus.md +173 -0
- package/.koolie/core/governance/change-requests/CR-2026-056-eingabeschema-und-pfadidentitaet.md +245 -0
- package/.koolie/core/governance/change-requests/CR-2026-057-disallowed-tools-und-s3.md +148 -0
- package/.koolie/core/governance/change-requests/CR-2026-058-unteragent-reichweite.md +203 -0
- package/.koolie/core/governance/change-requests/CR-2026-059-unteragent-tiefe-und-widerspruch.md +125 -0
- package/.koolie/core/governance/change-requests/CR-2026-060-stumme-brueche.md +170 -0
- package/.koolie/core/governance/change-requests/CR-2026-061-berechtigungsdatei-ohne-pruefung.md +169 -0
- package/.koolie/core/governance/change-requests/CR-2026-062-werkzeugabbildung-des-frontmatters.md +178 -0
- package/.koolie/core/governance/change-requests/CR-2026-063-skillaufruf-ohne-freigabe.md +207 -0
- package/.koolie/core/governance/change-requests/CR-2026-064-pruefregister-nicht-nachgezaehlt.md +141 -0
- package/.koolie/core/governance/change-requests/CR-2026-065-devin-suchwerkzeuge-erhoben.md +170 -0
- package/.koolie/core/governance/change-requests/CR-2026-066-schlitzdeckung-ohne-abgleich.md +153 -0
- package/.koolie/core/governance/change-requests/CR-2026-067-hookblock-und-praeparationsregister.md +140 -0
- package/.koolie/core/governance/change-requests/CR-2026-068-sondenlauf-nebenlaeufig.md +106 -0
- package/.koolie/core/governance/change-requests/CR-2026-069-bytecode-des-kerns.md +108 -0
- package/.koolie/core/governance/change-requests/CR-2026-070-d11-zaehler.md +114 -0
- package/.koolie/core/governance/change-requests/CR-2026-071-strukturentscheidungen-bestaetigen.md +322 -0
- package/.koolie/core/governance/change-requests/CR-2026-072-modulstatus-heben.md +315 -0
- package/.koolie/core/governance/change-requests/CR-2026-073-nicht-skill-traeger-heben.md +246 -0
- package/.koolie/core/governance/change-requests/CR-2026-074-restliche-nicht-skill-traeger-heben.md +271 -0
- package/.koolie/core/governance/change-requests/CR-2026-075-ap2-zielversion-devin-desktop.md +335 -0
- package/.koolie/core/governance/change-requests/CR-2026-076-erster-sitzungstest.md +455 -0
- package/.koolie/core/governance/change-requests/CR-2026-077-sitzungstest-schranken.md +425 -0
- package/.koolie/core/governance/change-requests/CR-2026-078-planung-nach-1-0-0.md +294 -0
- package/.koolie/core/governance/change-requests/CR-2026-079-umbenennung-vorziehen.md +233 -0
- package/.koolie/core/governance/change-requests/CR-2026-080-clientbindung-des-kerns.md +321 -0
- package/.koolie/core/governance/change-requests/CR-2026-081-produktnamen-im-kern.md +297 -0
- package/.koolie/core/governance/change-requests/CR-2026-082-sitzungstest-pi-ds-2.md +145 -0
- package/.koolie/core/governance/change-requests/CR-2026-083-sitzungstest-ne-sc.md +300 -0
- package/.koolie/core/governance/change-requests/CR-2026-084-trockenlauf-gegen-den-committeten-stand.md +117 -0
- package/.koolie/core/governance/change-requests/CR-2026-085-vorbedingungen-sitzungstest-5.md +182 -0
- package/.koolie/core/governance/change-requests/CR-2026-086-grenzfaelle-gegen-die-fassungen.md +164 -0
- package/.koolie/core/governance/change-requests/CR-2026-087-produktbeobachtung-quellenliste.md +206 -0
- package/.koolie/core/governance/change-requests/CR-2026-088-vorbedingungen-testblaetter.md +127 -0
- package/.koolie/core/governance/change-requests/CR-2026-089-herrichtung-uebungsrepositorium.md +226 -0
- package/.koolie/core/governance/change-requests/CR-2026-090-vorbedingungen-sitzungstest-5-zweiter-durchgang.md +255 -0
- package/.koolie/core/governance/change-requests/CR-2026-091-sitzungstest-5.md +163 -0
- package/.koolie/core/governance/change-requests/CR-2026-092-pruefmittelwort-und-buendelschnitt.md +226 -0
- package/.koolie/core/governance/change-requests/CR-2026-093-sechzehnte-praeparation.md +151 -0
- package/.koolie/core/governance/change-requests/CR-2026-094-testblaetter-buendel-1.md +113 -0
- package/.koolie/core/governance/change-requests/CR-2026-095-pruefapparat-filter.md +65 -0
- package/.koolie/core/governance/change-requests/CR-2026-096-vorbedingungen-buendel-2.md +225 -0
- package/.koolie/core/governance/change-requests/CR-2026-097-testblaetter-buendel-2.md +162 -0
- package/.koolie/core/governance/change-requests/CR-2026-098-anforderungen-auslieferung.md +93 -0
- package/.koolie/core/governance/change-requests/CR-2026-099-k74-und-vorbedingungen-buendel-3.md +119 -0
- package/.koolie/core/governance/change-requests/CR-2026-100-testblaetter-buendel-3.md +120 -0
- package/.koolie/core/governance/change-requests/CR-2026-101-k77-eigener-posten.md +165 -0
- package/.koolie/core/governance/change-requests/CR-2026-102-k77-entschieden.md +118 -0
- package/.koolie/core/governance/change-requests/CR-2026-103-vorbedingungen-buendel-4.md +76 -0
- package/.koolie/core/governance/change-requests/CR-2026-104-herrichtung-buendel-4.md +82 -0
- package/.koolie/core/governance/change-requests/CR-2026-105-messapparat-buendel-4.md +227 -0
- package/.koolie/core/governance/change-requests/CR-2026-106-uebergabe-einchecken.md +91 -0
- package/.koolie/core/governance/change-requests/CR-2026-107-uebergabe-im-release-commit.md +111 -0
- package/.koolie/core/governance/change-requests/CR-2026-108-testblaetter-buendel-4.md +118 -0
- package/.koolie/core/governance/change-requests/CR-2026-109-berichtsweg-des-aufraeumers.md +108 -0
- package/.koolie/core/governance/change-requests/CR-2026-110-vorbedingungen-des-nachlaufs.md +184 -0
- package/.koolie/core/governance/change-requests/CR-2026-111-der-apparat-auf-dem-weg-der-wiederaufnahme.md +127 -0
- package/.koolie/core/governance/change-requests/CR-2026-112-der-arbeitsplatz-im-kern.md +103 -0
- package/.koolie/core/governance/change-requests/CR-2026-113-nachlauf-buendel-4.md +103 -0
- package/.koolie/core/governance/change-requests/CR-2026-114-vorbedingungen-buendel-5.md +317 -0
- package/.koolie/core/governance/change-requests/CR-2026-115-herrichtung-buendel-5.md +244 -0
- package/.koolie/core/governance/change-requests/CR-2026-116-messtag-buendel-5.md +178 -0
- package/.koolie/core/governance/change-requests/CR-2026-117-sammelzellen-zentraler-katalog.md +251 -0
- package/.koolie/core/governance/change-requests/CR-2026-118-quellenzuordnung-matrixzeilen.md +115 -0
- package/.koolie/core/governance/change-requests/CR-2026-119-umbenennung-koolie.md +204 -0
- package/.koolie/core/governance/change-requests/CR-2026-120-ap2-rest-devin-desktop.md +96 -0
- package/.koolie/core/governance/change-requests/CR-2026-121-verify-marker-abschaffen.md +185 -0
- package/.koolie/core/governance/change-requests/CR-2026-122-umbenennung-koolie-lauf.md +131 -0
- package/.koolie/core/governance/change-requests/CR-2026-123-vortrag-und-namensabsatz.md +170 -0
- package/.koolie/core/governance/change-requests/CR-2026-124-hauptdokument-ap11.md +237 -0
- package/.koolie/core/governance/change-requests/CR-2026-125-word-fassung-und-blinder-fleck.md +204 -0
- package/.koolie/core/governance/change-requests/CR-2026-126-lizenz-gpl3.md +112 -0
- package/.koolie/core/governance/change-requests/CR-2026-127-gegenzeichnung-rollenfrage.md +96 -0
- package/.koolie/core/governance/change-requests/CR-2026-128-freigabelauf-1.0.0.md +278 -0
- package/.koolie/core/governance/change-requests/CR-2026-129-archiv-zeilenenden.md +90 -0
- package/.koolie/core/governance/change-requests/CR-2026-130-reihenfolge-des-hebens.md +204 -0
- package/.koolie/core/governance/change-requests/CR-2026-131-chronik-und-vorlage.md +194 -0
- package/.koolie/core/governance/change-requests/CR-2026-132-erhebung-openai-codex.md +185 -0
- package/.koolie/core/governance/change-requests/CR-2026-133-bau-openai-codex.md +97 -0
- package/.koolie/core/governance/change-requests/CR-2026-134-uebergabe-lokal.md +117 -0
- package/.koolie/core/governance/change-requests/CR-2026-135-pfadlisten-nul-getrennt.md +139 -0
- package/.koolie/core/governance/change-requests/CR-2026-136-overlay-werte-einordnung.md +156 -0
- package/.koolie/core/governance/change-requests/CR-2026-137-kopierweg-kern.md +144 -0
- package/.koolie/core/governance/change-requests/CR-2026-138-overlay-muster-general.md +118 -0
- package/.koolie/core/governance/change-requests/CR-2026-139-overlay-muster-dokumente.md +105 -0
- package/.koolie/core/governance/change-requests/CR-2026-140-installer-je-zielsystem.md +120 -0
- package/.koolie/core/governance/change-requests/CR-2026-141-lieferumfang.md +123 -0
- package/.koolie/core/governance/change-requests/CR-2026-142-dokumentationsstandard.md +90 -0
- package/.koolie/core/governance/change-requests/CR-2026-143-klasse-b-core-laufzeit.md +89 -0
- package/.koolie/core/governance/change-requests/CR-2026-144-klasse-b-governance.md +90 -0
- package/.koolie/core/governance/change-requests/CR-2026-145-klasse-b-skills.md +81 -0
- package/.koolie/core/governance/change-requests/CR-2026-146-code-pack-posten.md +84 -0
- package/.koolie/core/governance/change-requests/CR-2026-147-regel-register-posten.md +78 -0
- package/.koolie/core/governance/change-requests/CR-2026-148-mehrprojekt-tokenlast.md +70 -0
- package/.koolie/core/governance/change-requests/CR-2026-149-regelablage-pfadtoken.md +71 -0
- package/.koolie/core/governance/change-requests/CR-2026-150-client-pack-kiro.md +76 -0
- package/.koolie/core/governance/change-requests/CR-2026-151-skill-anweisungen.md +71 -0
- package/.koolie/core/governance/change-requests/CR-2026-152-testblaetter-modellwechsel.md +78 -0
- package/.koolie/core/governance/change-requests/CR-2026-153-attributionszeile.md +88 -0
- package/.koolie/core/governance/change-requests/CR-2026-154-auffindbarkeit.md +102 -0
- package/.koolie/core/governance/change-requests/CR-2026-155-client-pack-cursor.md +80 -0
- package/.koolie/core/governance/change-requests/CR-2026-156-mandat-und-reibung.md +100 -0
- package/.koolie/core/governance/change-requests/CR-2026-157-mcp-anbindung.md +93 -0
- package/.koolie/core/governance/change-requests/CR-2026-158-registerpflege.md +69 -0
- package/.koolie/core/governance/change-requests/CR-2026-159-powershell.md +49 -0
- package/.koolie/core/governance/change-requests/CR-2026-160-messapparat.md +59 -0
- package/.koolie/core/governance/change-requests/CR-2026-161-pruefwerkzeuge.md +52 -0
- package/.koolie/core/governance/change-requests/CR-2026-162-schutzschicht.md +65 -0
- package/.koolie/core/governance/change-requests/CR-2026-163-pfadsemantik.md +61 -0
- package/.koolie/core/governance/change-requests/CR-2026-164-modi-ausnahmen.md +65 -0
- package/.koolie/core/governance/change-requests/CR-2026-165-installer-banner.md +406 -0
- package/.koolie/core/governance/change-requests/CR-2026-166-nachlauf-aufzeichnungen.md +59 -0
- package/.koolie/core/governance/change-requests/CR-2026-167-einsatzarchitektur.md +60 -0
- package/.koolie/core/governance/change-requests/CR-2026-168-paketquellen.md +64 -0
- package/.koolie/core/governance/change-requests/CR-2026-169-modusbindung-messfragen.md +58 -0
- package/.koolie/core/governance/change-requests/CR-2026-170-erste-veroeffentlichung.md +62 -0
- package/.koolie/core/governance/change-requests/CR-2026-171-befehl-im-projektverzeichnis.md +57 -0
- package/.koolie/core/governance/change-requests/CR-2026-172-auftritt-npm-suche.md +58 -0
- package/.koolie/core/install.py +2402 -0
- package/.koolie/core/install_dialog.py +227 -0
- package/.koolie/core/koexistenz.py +112 -0
- package/.koolie/core/mandat.py +605 -0
- package/.koolie/core/onboarding/COMPLETION_CRITERIA.md +37 -0
- package/.koolie/core/onboarding/GUIDE.md +103 -0
- package/.koolie/core/onboarding/KNOWLEDGE_CHECK.md +48 -0
- package/.koolie/core/onboarding/MENTOR_CHECKLIST.md +40 -0
- package/.koolie/core/onboarding/QUICKSTART.md +50 -0
- package/.koolie/core/onboarding/REFERENCE.md +69 -0
- package/.koolie/core/onboarding/exercises/EXERCISES.md +78 -0
- package/.koolie/core/onboarding/exercises/README.md +120 -0
- package/.koolie/core/pilot/METRICS.md +59 -0
- package/.koolie/core/pilot/PILOT_CONCEPT.md +42 -0
- package/.koolie/core/prompts/01-understand-codebase.md +99 -0
- package/.koolie/core/prompts/02-impact-analysis.md +104 -0
- package/.koolie/core/prompts/03-implementation-planning.md +102 -0
- package/.koolie/core/prompts/04-code-generation.md +100 -0
- package/.koolie/core/prompts/05-test-generation.md +103 -0
- package/.koolie/core/prompts/06-refactoring.md +102 -0
- package/.koolie/core/prompts/07-debugging.md +97 -0
- package/.koolie/core/prompts/08-security-review.md +92 -0
- package/.koolie/core/prompts/09-performance-analysis.md +89 -0
- package/.koolie/core/prompts/10-documentation.md +91 -0
- package/.koolie/core/prompts/11-merge-request-review.md +94 -0
- package/.koolie/core/prompts/12-developer-training.md +90 -0
- package/.koolie/core/prompts/README.md +88 -0
- package/.koolie/core/templates/MR_AI_DISCLOSURE.md +37 -0
- package/.koolie/core/templates/PLAN_TEMPLATE.md +57 -0
- package/.koolie/core/templates/SKILL_TEMPLATE.md +159 -0
- package/.koolie/core/templates/project-overlay/OVERLAY.md +315 -0
- package/.koolie/core/templates/project-overlay/documents/README.md +43 -0
- package/.koolie/core/templates/project-overlay/documents/ai-governance/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/ai-process-model/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/architecture/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/architecture/decisions/README.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/branching-strategy/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/coding-guidelines/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/definition-of-done/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/definition-of-ready/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/deployment/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/glossary/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/quality/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/roadmap/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/roles/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/documents/security/.gitkeep.md +3 -0
- package/.koolie/core/templates/project-overlay/exceptions/EXCEPTIONS.md +9 -0
- package/.koolie/core/templates/project-overlay/forbidden-terms.txt +8 -0
- package/.koolie/core/templates/project-overlay/overlay-manifest.yaml +73 -0
- package/.koolie/core/templates/rules/21-overlay-TEMPLATE.md.template +28 -0
- package/.koolie/core/templates/rules/40-tech-TEMPLATE.md.template +33 -0
- package/.koolie/core/tests/EDGE_CASES.md +67 -0
- package/.koolie/core/tests/TEST_CATALOG.md +170 -0
- package/.koolie/core/tests/erhebungen/README.md +326 -0
- package/.koolie/core/tests/erhebungen/ablage.py +357 -0
- package/.koolie/core/tests/erhebungen/apparat/__init__.py +22 -0
- package/.koolie/core/tests/erhebungen/apparat/baum.py +214 -0
- package/.koolie/core/tests/erhebungen/apparat/belege.py +91 -0
- package/.koolie/core/tests/erhebungen/apparat/clients.py +321 -0
- package/.koolie/core/tests/erhebungen/apparat/freigabe.py +74 -0
- package/.koolie/core/tests/erhebungen/apparat/kontingent.py +64 -0
- package/.koolie/core/tests/erhebungen/apparat/laeufer.py +155 -0
- package/.koolie/core/tests/erhebungen/apparat/reihe.py +202 -0
- package/.koolie/core/tests/erhebungen/apparat/selbsttest.py +280 -0
- package/.koolie/core/tests/erhebungen/apparat/stand.py +30 -0
- package/.koolie/core/tests/erhebungen/apparat/vorpruefung.py +70 -0
- package/.koolie/core/tests/erhebungen/auswerten-b4.py +468 -0
- package/.koolie/core/tests/erhebungen/auswerten-b5.py +517 -0
- package/.koolie/core/tests/erhebungen/auswerten-dd.py +172 -0
- package/.koolie/core/tests/erhebungen/baeume-b4.py +334 -0
- package/.koolie/core/tests/erhebungen/baeume-b5.py +339 -0
- package/.koolie/core/tests/erhebungen/baeume_loeschen.py +138 -0
- package/.koolie/core/tests/erhebungen/cc-overlay-fuellen.py +277 -0
- package/.koolie/core/tests/erhebungen/dossier-b4.py +178 -0
- package/.koolie/core/tests/erhebungen/dossier-b5.py +202 -0
- package/.koolie/core/tests/erhebungen/historie-bauen-b4.py +642 -0
- package/.koolie/core/tests/erhebungen/k-bauen-b3.py +841 -0
- package/.koolie/core/tests/erhebungen/lauf-dd.py +146 -0
- package/.koolie/core/tests/erhebungen/lauf.py +114 -0
- package/.koolie/core/tests/erhebungen/mcp-waechter.py +278 -0
- package/.koolie/core/tests/erhebungen/messbaum-schnitt.py +256 -0
- package/.koolie/core/tests/erhebungen/messen.py +72 -0
- package/.koolie/core/tests/erhebungen/node-waechter.py +74 -0
- package/.koolie/core/tests/erhebungen/packaktivierung.py +403 -0
- package/.koolie/core/tests/erhebungen/prompts-schreiben-b4.py +210 -0
- package/.koolie/core/tests/erhebungen/prompts-schreiben-b5.py +251 -0
- package/.koolie/core/tests/erhebungen/reihe-b4.py +171 -0
- package/.koolie/core/tests/erhebungen/reihe-b5.py +172 -0
- package/.koolie/core/tests/erhebungen/stand-b4.py +135 -0
- package/.koolie/core/tests/erhebungen/stand-b5.py +137 -0
- package/.koolie/core/tests/erhebungen/trust-b4.py +56 -0
- package/.koolie/core/tests/erhebungen/trust-b5.py +56 -0
- package/.koolie/core/tests/erhebungen/turn2-schreiben-b4.py +105 -0
- package/.koolie/core/tests/erhebungen/umgebungen-bauen-b4.py +377 -0
- package/.koolie/core/tests/erhebungen/umgebungen-bauen-b5.py +363 -0
- package/.koolie/core/tests/erhebungen/zaehlen46.py +74 -0
- package/.koolie/core/tests/erhebungen/zustand-b4.py +82 -0
- package/.koolie/core/tests/erhebungen/zustand-b5.py +82 -0
- package/.koolie/core/tests/protocols/2026-09-10-AP2-claude-code-wirkungsnachweise.md +194 -0
- package/.koolie/core/tests/protocols/2026-09-10-AP2-claude-code.md +468 -0
- package/.koolie/core/tests/protocols/2026-09-10-CR-2026-020-akteursbezeichnung.md +99 -0
- package/.koolie/core/tests/protocols/2026-09-10-CR-2026-021-hook-interpreter.md +138 -0
- package/.koolie/core/tests/protocols/2026-09-10-CR-2026-022-artefaktversionen.md +87 -0
- package/.koolie/core/tests/protocols/2026-09-10-CR-2026-023-shell-lesesperre.md +135 -0
- package/.koolie/core/tests/protocols/2026-09-10-CR-2026-024-clientbindungen.md +98 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-DS-03.md +90 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-KO-01.md +105 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-KO-02.md +123 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-KO-04.md +73 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-RE-02.md +99 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-VN-01-wiederholung.md +108 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-VN-01.md +249 -0
- package/.koolie/core/tests/protocols/2026-09-10-FW-ZA-05.md +99 -0
- package/.koolie/core/tests/protocols/2026-09-11-AP2-devin-desktop.md +257 -0
- package/.koolie/core/tests/protocols/2026-09-11-CR-2026-026-fail-closed.md +113 -0
- package/.koolie/core/tests/protocols/2026-09-11-erhebungen-K21-K26.md +243 -0
- package/.koolie/core/tests/protocols/2026-09-11-wirkungsnachweise-0.26.0.md +101 -0
- package/.koolie/core/tests/protocols/2026-09-12-B01-allowed-tools.md +152 -0
- package/.koolie/core/tests/protocols/2026-09-12-B04-B05-gegenpruefung.md +204 -0
- package/.koolie/core/tests/protocols/2026-09-12-erhebungen-K28-S5-B9-bypass.md +268 -0
- package/.koolie/core/tests/protocols/2026-09-12-mehrprojekt-arbeitsbereich.md +154 -0
- package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.26.1.md +126 -0
- package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.27.0.md +114 -0
- package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.28.0.md +129 -0
- package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.29.0.md +121 -0
- package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.30.0.md +112 -0
- package/.koolie/core/tests/protocols/2026-09-12-wirkungsnachweise-0.31.0.md +107 -0
- package/.koolie/core/tests/protocols/2026-09-13-B06-gegenpruefung.md +370 -0
- package/.koolie/core/tests/protocols/2026-09-13-B07-B09-gegenpruefung.md +211 -0
- package/.koolie/core/tests/protocols/2026-09-13-B08-B11-gegenpruefung.md +179 -0
- package/.koolie/core/tests/protocols/2026-09-13-erhebung-disallowed-tools.md +147 -0
- package/.koolie/core/tests/protocols/2026-09-13-erhebung-unteragent-tiefe.md +139 -0
- package/.koolie/core/tests/protocols/2026-09-13-erhebung-unteragent.md +214 -0
- package/.koolie/core/tests/protocols/2026-09-13-gegenpruefung-berechtigungsdatei.md +253 -0
- package/.koolie/core/tests/protocols/2026-09-13-gegenpruefung-stumme-brueche.md +202 -0
- package/.koolie/core/tests/protocols/2026-09-13-gegenpruefung-werkzeugabbildung.md +219 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.32.0.md +133 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.33.0.md +169 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.34.0.md +187 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.35.0.md +187 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.36.0.md +137 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.37.0.md +112 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.38.0.md +154 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.39.0.md +188 -0
- package/.koolie/core/tests/protocols/2026-09-13-wirkungsnachweise-0.40.0.md +214 -0
- package/.koolie/core/tests/protocols/2026-09-14-erhebung-devin-werkzeuge.md +267 -0
- package/.koolie/core/tests/protocols/2026-09-14-erhebung-skillaufruf.md +238 -0
- package/.koolie/core/tests/protocols/2026-09-14-gegenpruefung-pruefregister.md +156 -0
- package/.koolie/core/tests/protocols/2026-09-14-gegenpruefung-schlitzdeckung.md +206 -0
- package/.koolie/core/tests/protocols/2026-09-14-gegenpruefung-skillwahl.md +127 -0
- package/.koolie/core/tests/protocols/2026-09-14-migrationslauf-pilot.md +134 -0
- package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.41.0.md +175 -0
- package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.42.0.md +180 -0
- package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.43.0.md +165 -0
- package/.koolie/core/tests/protocols/2026-09-14-wirkungsnachweise-0.44.0.md +130 -0
- package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-d11-zaehlregeln.md +311 -0
- package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-modulstatus.md +524 -0
- package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-nicht-skill-traeger.md +225 -0
- package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-restliche-nicht-skill-traeger.md +345 -0
- package/.koolie/core/tests/protocols/2026-09-15-gegenpruefung-strukturentscheidungen.md +392 -0
- package/.koolie/core/tests/protocols/2026-09-15-herrichtung-uebungsrepositorium.md +213 -0
- package/.koolie/core/tests/protocols/2026-09-15-migrationslauf-pilot-0.46.0.md +143 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.45.0.md +127 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.46.0.md +193 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.47.0.md +149 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.49.0.md +202 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.50.0.md +183 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.51.0.md +202 -0
- package/.koolie/core/tests/protocols/2026-09-15-wirkungsnachweise-0.52.0.md +168 -0
- package/.koolie/core/tests/protocols/2026-09-16-AP2-zielversion-devin-desktop.md +231 -0
- package/.koolie/core/tests/protocols/2026-09-16-wirkungsnachweise-0.53.0.md +350 -0
- package/.koolie/core/tests/protocols/2026-09-17-nachtrag-migrationshinweis-0.54.1.md +121 -0
- package/.koolie/core/tests/protocols/2026-09-17-sitzungstest-pi-ds.md +523 -0
- package/.koolie/core/tests/protocols/2026-09-17-sitzungstest-schranken.md +433 -0
- package/.koolie/core/tests/protocols/2026-09-17-wirkungsnachweise-0.54.0.md +159 -0
- package/.koolie/core/tests/protocols/2026-09-18-FW-AK-01.md +442 -0
- package/.koolie/core/tests/protocols/2026-09-18-FW-KO-05.md +231 -0
- package/.koolie/core/tests/protocols/2026-09-18-herrichtung-uebungsrepositorium.md +273 -0
- package/.koolie/core/tests/protocols/2026-09-18-nachtrag-preis-umbenennung-0.56.1.md +102 -0
- package/.koolie/core/tests/protocols/2026-09-18-sitzungstest-5.md +349 -0
- package/.koolie/core/tests/protocols/2026-09-18-sitzungstest-ne-sc.md +430 -0
- package/.koolie/core/tests/protocols/2026-09-18-sitzungstest-pi-ds-2.md +499 -0
- package/.koolie/core/tests/protocols/2026-09-18-vorbedingungen-sitzungstest-5-zweiter-durchgang.md +170 -0
- package/.koolie/core/tests/protocols/2026-09-18-vorbedingungen-testblaetter.md +184 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.55.0.md +202 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.56.0.md +135 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.56.2.md +154 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.57.0.md +228 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.57.1.md +262 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.58.0.md +135 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.59.0.md +150 -0
- package/.koolie/core/tests/protocols/2026-09-18-wirkungsnachweise-0.60.0.md +340 -0
- package/.koolie/core/tests/protocols/2026-09-19-herrichtung-buendel-4.md +235 -0
- package/.koolie/core/tests/protocols/2026-09-19-k77-zurechenbarkeit.md +236 -0
- package/.koolie/core/tests/protocols/2026-09-19-pruefapparat-filter.md +50 -0
- package/.koolie/core/tests/protocols/2026-09-19-pruefmittelwort-und-buendelschnitt.md +239 -0
- package/.koolie/core/tests/protocols/2026-09-19-sechzehnte-praeparation.md +135 -0
- package/.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-1.md +250 -0
- package/.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-2.md +229 -0
- package/.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md +293 -0
- package/.koolie/core/tests/protocols/2026-09-19-vorbedingungen-buendel-2.md +236 -0
- package/.koolie/core/tests/protocols/2026-09-19-vorbedingungen-buendel-3.md +253 -0
- package/.koolie/core/tests/protocols/2026-09-19-vorbedingungen-buendel-4.md +138 -0
- package/.koolie/core/tests/protocols/2026-09-20-messapparat-buendel-4.md +433 -0
- package/.koolie/core/tests/protocols/2026-09-20-testblaetter-buendel-4.md +321 -0
- package/.koolie/core/tests/protocols/2026-09-20-uebergabe-im-release-commit.md +146 -0
- package/.koolie/core/tests/protocols/2026-09-20-vorbedingungen-nachlauf-b4.md +259 -0
- package/.koolie/core/tests/protocols/2026-09-21-arbeitsplatz-im-kern.md +127 -0
- package/.koolie/core/tests/protocols/2026-09-21-nachlauf-buendel-4.md +157 -0
- package/.koolie/core/tests/protocols/2026-09-21-vorbedingungen-buendel-5.md +247 -0
- package/.koolie/core/tests/protocols/2026-09-21-wiederaufnahme-nachlauf-b4.md +190 -0
- package/.koolie/core/tests/protocols/2026-09-22-ap2-rest-devin-desktop.md +614 -0
- package/.koolie/core/tests/protocols/2026-09-22-hauptdokument-ap11.md +443 -0
- package/.koolie/core/tests/protocols/2026-09-22-herrichtung-buendel-5.md +224 -0
- package/.koolie/core/tests/protocols/2026-09-22-messtag-buendel-5.md +327 -0
- package/.koolie/core/tests/protocols/2026-09-22-quellenzuordnung-matrixzeilen.md +230 -0
- package/.koolie/core/tests/protocols/2026-09-22-sammelzellen-zentraler-katalog.md +354 -0
- package/.koolie/core/tests/protocols/2026-09-22-umbenennung-koolie.md +296 -0
- package/.koolie/core/tests/protocols/2026-09-22-verify-marker-abschaffen.md +283 -0
- package/.koolie/core/tests/protocols/2026-09-22-vortrag-und-name.md +261 -0
- package/.koolie/core/tests/protocols/2026-09-22-wirkungsnachweise-0.86.0.md +158 -0
- package/.koolie/core/tests/protocols/2026-09-23-archiv-zeilenenden.md +113 -0
- package/.koolie/core/tests/protocols/2026-09-23-bau-openai-codex.md +168 -0
- package/.koolie/core/tests/protocols/2026-09-23-chronik-und-vorlage.md +224 -0
- package/.koolie/core/tests/protocols/2026-09-23-erhebung-openai-codex.md +309 -0
- package/.koolie/core/tests/protocols/2026-09-23-freigabelauf-1.0.0-vorbereitung.md +119 -0
- package/.koolie/core/tests/protocols/2026-09-23-freigabelauf-1.0.0.md +150 -0
- package/.koolie/core/tests/protocols/2026-09-23-gegenzeichnung-rollenfrage.md +198 -0
- package/.koolie/core/tests/protocols/2026-09-23-reihenfolge-des-hebens.md +220 -0
- package/.koolie/core/tests/protocols/2026-09-23-word-fassung-und-blinder-fleck.md +307 -0
- package/.koolie/core/tests/protocols/2026-09-24-kopierweg-kern.md +98 -0
- package/.koolie/core/tests/protocols/2026-09-24-overlay-werte-einordnung.md +111 -0
- package/.koolie/core/tests/protocols/2026-09-24-pfadlisten-nul-getrennt.md +128 -0
- package/.koolie/core/tests/protocols/2026-09-24-uebergabe-lokal.md +85 -0
- package/.koolie/core/tests/protocols/2026-09-25-code-pack-posten.md +86 -0
- package/.koolie/core/tests/protocols/2026-09-25-dokumentationsstandard.md +101 -0
- package/.koolie/core/tests/protocols/2026-09-25-installer-je-zielsystem.md +134 -0
- package/.koolie/core/tests/protocols/2026-09-25-klasse-b-core-laufzeit.md +126 -0
- package/.koolie/core/tests/protocols/2026-09-25-klasse-b-governance.md +133 -0
- package/.koolie/core/tests/protocols/2026-09-25-klasse-b-skills.md +91 -0
- package/.koolie/core/tests/protocols/2026-09-25-lieferumfang.md +76 -0
- package/.koolie/core/tests/protocols/2026-09-25-overlay-muster-dokumente.md +107 -0
- package/.koolie/core/tests/protocols/2026-09-25-overlay-muster-general.md +100 -0
- package/.koolie/core/tests/protocols/2026-09-25-regel-register-posten.md +87 -0
- package/.koolie/core/tests/protocols/2026-09-26-attributionszeile.md +83 -0
- package/.koolie/core/tests/protocols/2026-09-26-auffindbarkeit.md +85 -0
- package/.koolie/core/tests/protocols/2026-09-26-bau-cursor.md +68 -0
- package/.koolie/core/tests/protocols/2026-09-26-bau-kiro.md +75 -0
- package/.koolie/core/tests/protocols/2026-09-26-mehrprojekt-tokenlast.md +174 -0
- package/.koolie/core/tests/protocols/2026-09-26-regelablage-pfadtoken.md +133 -0
- package/.koolie/core/tests/protocols/2026-09-26-skill-anweisungen.md +111 -0
- package/.koolie/core/tests/protocols/2026-09-26-testblaetter-modellwechsel.md +106 -0
- package/.koolie/core/tests/protocols/2026-09-27-mandat-und-reibung.md +58 -0
- package/.koolie/core/tests/protocols/2026-09-28-mcp-anbindung.md +72 -0
- package/.koolie/core/tests/protocols/2026-09-29-messapparat.md +75 -0
- package/.koolie/core/tests/protocols/2026-09-29-powershell.md +58 -0
- package/.koolie/core/tests/protocols/2026-09-29-pruefwerkzeuge.md +64 -0
- package/.koolie/core/tests/protocols/2026-09-29-registerpflege.md +228 -0
- package/.koolie/core/tests/protocols/2026-09-29-schutzschicht.md +95 -0
- package/.koolie/core/tests/protocols/2026-09-30-einsatzarchitektur.md +104 -0
- package/.koolie/core/tests/protocols/2026-09-30-modi-ausnahmen.md +77 -0
- package/.koolie/core/tests/protocols/2026-09-30-nachlauf-banner.md +85 -0
- package/.koolie/core/tests/protocols/2026-09-30-paketquellen.md +65 -0
- package/.koolie/core/tests/protocols/2026-09-30-pfadsemantik.md +79 -0
- package/.koolie/core/tests/protocols/2026-10-01-auftritt-und-suche.md +58 -0
- package/.koolie/core/tests/protocols/2026-10-01-befehl-im-projektverzeichnis.md +47 -0
- package/.koolie/core/tests/protocols/2026-10-01-erste-veroeffentlichung.md +60 -0
- package/.koolie/core/tests/protocols/2026-10-01-modusbindung-messfragen.md +107 -0
- package/.koolie/core/tests/protocols/README.md +14 -0
- package/.koolie/core/tests/scripts/hook-check-secrets.py +1307 -0
- package/.koolie/core/tests/scripts/hook-overlay-status.py +120 -0
- package/.koolie/core/tests/scripts/mermaid_renderer.py +67 -0
- package/.koolie/core/tests/scripts/overlay_status.py +130 -0
- package/.koolie/core/tests/scripts/probe-pruefungen.py +110 -0
- package/.koolie/core/tests/scripts/pruefungen/__init__.py +4 -0
- package/.koolie/core/tests/scripts/pruefungen/berechtigungen.py +1559 -0
- package/.koolie/core/tests/scripts/pruefungen/bestand.py +1433 -0
- package/.koolie/core/tests/scripts/pruefungen/dokumente.py +1262 -0
- package/.koolie/core/tests/scripts/pruefungen/gemeinsam.py +784 -0
- package/.koolie/core/tests/scripts/pruefungen/hooks.py +1188 -0
- package/.koolie/core/tests/scripts/pruefungen/overlay.py +1251 -0
- package/.koolie/core/tests/scripts/pruefungen/packs.py +1314 -0
- package/.koolie/core/tests/scripts/pruefungen/register.py +950 -0
- package/.koolie/core/tests/scripts/pruefungen/testkatalog.py +1202 -0
- package/.koolie/core/tests/scripts/pruefungen/werkzeuge.py +957 -0
- package/.koolie/core/tests/scripts/sonden/__init__.py +4 -0
- package/.koolie/core/tests/scripts/sonden/apparat.py +653 -0
- package/.koolie/core/tests/scripts/sonden/teil01_grundbestand_und_installation.py +999 -0
- package/.koolie/core/tests/scripts/sonden/teil02_packs_mandat_mcp.py +942 -0
- package/.koolie/core/tests/scripts/sonden/teil03_pruefungen_26_bis_36.py +1184 -0
- package/.koolie/core/tests/scripts/sonden/teil04_pruefungen_37_bis_45.py +1491 -0
- package/.koolie/core/tests/scripts/sonden/teil05_pruefungen_46_bis_55.py +1447 -0
- package/.koolie/core/tests/scripts/sonden/teil06_pruefungen_57_bis_65.py +739 -0
- package/.koolie/core/tests/scripts/sonden/teil07_overlay_und_lieferung.py +1014 -0
- package/.koolie/core/tests/scripts/sonden/teil08_pruefungen_66_bis_80.py +1325 -0
- package/.koolie/core/tests/scripts/sonden/teil09_pruefmittel_81_und_82.py +505 -0
- package/.koolie/core/tests/scripts/sonden/teil10_pruefungen_83_bis_95.py +1218 -0
- package/.koolie/core/tests/scripts/sonden/teil11_pruefungen_104_und_105.py +149 -0
- package/.koolie/core/tests/scripts/sonden/teil12_pruefungen_106_und_107.py +136 -0
- package/.koolie/core/tests/scripts/sonden/teil13_pfad_und_mustersemantik.py +150 -0
- package/.koolie/core/tests/scripts/sonden/teil14_modi_ausnahmen_skills.py +204 -0
- package/.koolie/core/tests/scripts/sonden/teil15_banner_und_nachlauf.py +193 -0
- package/.koolie/core/tests/scripts/sonden/teil16_koexistenz.py +114 -0
- package/.koolie/core/tests/scripts/sonden/teil17_paketquellen.py +115 -0
- package/.koolie/core/tests/scripts/sonden/teil18_modusbindung_m3_m5.py +113 -0
- package/.koolie/core/tests/scripts/validate-framework.py +1104 -0
- package/.koolie/core/tests/scripts/validate-output.py +296 -0
- package/.koolie/core/wirksamkeit.py +430 -0
- package/CONTRIBUTING.md +119 -0
- package/LICENSE +674 -0
- package/QUICKSTART.en.md +135 -0
- package/QUICKSTART.md +129 -0
- package/README.en.md +108 -0
- package/README.md +107 -0
- package/install.cmd +44 -0
- package/install.command +46 -0
- package/package.json +21 -0
- package/paketquellen/README.md +41 -0
- package/paketquellen/bauen.py +411 -0
- package/paketquellen/koolie.cmd +23 -0
- package/paketquellen/koolie_befehl.py +82 -0
- 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.
|