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