@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,363 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""Baut den BASISBAUM des fuenften Testblatt-Buendels unter C:\\lw-b5.
|
|
3
|
+
|
|
4
|
+
python umgebungen-bauen-b5.py [--erwarte <version>]
|
|
5
|
+
|
|
6
|
+
Ergebnis: C:\\lw-b5\\basis - eine vollstaendige claude-code-Installation des
|
|
7
|
+
Uebungsrepositoriums MIT AKTIVIERTEM Role Pack `requirements-engineering`, ohne
|
|
8
|
+
`.git`. Die Historie kommt je Baum dazu (`baeume-b5.py`).
|
|
9
|
+
|
|
10
|
+
🔴 ABGELEITET AUS `umgebungen-bauen-b4.py` (CR-2026-116). Die MECHANIK ist geerbt
|
|
11
|
+
und mit 0.82.0 gemessen - Packwechsel, Overlay-Fuellung, Packaktivierung in drei
|
|
12
|
+
Teilen, abgeleiteter Skillwaechter. Neu ist der ZUSCHNITT, und er ist an vier
|
|
13
|
+
Stellen anders:
|
|
14
|
+
|
|
15
|
+
1. KEIN `node_modules`. `historie-bauen-b4.py` und die Verzeichnisverbindung
|
|
16
|
+
gibt es, weil zwoelf Zellen von Buendel 4 einen DIFF verlangen und drei
|
|
17
|
+
Skills SCHREIBEN. `role-re-ticket` ist M1 und rein lesend; keine der
|
|
18
|
+
fuenfzehn Zellen nennt einen Branch, einen Diff oder einen Testbefehl.
|
|
19
|
+
Damit entfaellt auch die Loeschfalle von 0.74.1 - ein rekursives Loeschen,
|
|
20
|
+
das der Verbindung folgt, kann hier gar nicht entstehen.
|
|
21
|
+
2. LEERE ABWEICHUNGSLISTE. Buendel 4 nimmt `Edit(**)` aus dem `ask`-Korb und
|
|
22
|
+
gibt zwei Schreibkoerbe frei (D-178), weil sechs Zellen sonst den Korb statt
|
|
23
|
+
den Skill messen. `RE-001-N03` misst das GEGENTEIL: dass der Lauf nichts
|
|
24
|
+
eintraegt. Der Korb bleibt, wie `install.py` ihn erzeugt - und ein Waechter
|
|
25
|
+
belegt, dass er es tut.
|
|
26
|
+
3. DIE VORBEDINGUNGEN SIND ANDERE. Nicht Plaene und Berichte, sondern
|
|
27
|
+
Schnittstellenvertrag, Migration, Glossar und die WERTZEILE von
|
|
28
|
+
`<ISSUE_TRACKER>` in Abschnitt 13 des Overlays.
|
|
29
|
+
4. DAS PRUEFMITTEL IST `validate-output.py`, nicht `npm test`. Es wird VOR dem
|
|
30
|
+
Messtag einmal im Messbaum gefahren (Lehre aus 0.68.0) - und gelesen wird
|
|
31
|
+
seine AUSGABE, nicht sein Exitwert: Alle drei Faelle geben denselben
|
|
32
|
+
(Befund von 0.81.0).
|
|
33
|
+
|
|
34
|
+
🔴 DIE REIHENFOLGE IST GEERBT UND GEMESSEN (D-213):
|
|
35
|
+
archivieren -> Packwechsel -> `install.py` -> Overlay fuellen -> Packaktivierung
|
|
36
|
+
-> (Zuschnitt) -> HISTORIE. Wer die Historie zuerst baut, committet den Stand VOR
|
|
37
|
+
dem Packwechsel, und das Loeschen von `.devin/` steht danach in `git status`.
|
|
38
|
+
"""
|
|
39
|
+
import argparse
|
|
40
|
+
import io
|
|
41
|
+
import json
|
|
42
|
+
import os
|
|
43
|
+
import shutil
|
|
44
|
+
import subprocess
|
|
45
|
+
import sys
|
|
46
|
+
|
|
47
|
+
import ablage
|
|
48
|
+
import packaktivierung
|
|
49
|
+
|
|
50
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
51
|
+
|
|
52
|
+
HIER = os.path.dirname(os.path.abspath(__file__))
|
|
53
|
+
UEB = ablage.uebungsrepositorium() # D-231: gesagt, nicht im Quelltext
|
|
54
|
+
BASIS = r"C:\lw-b5"
|
|
55
|
+
BAUM = os.path.join(BASIS, "basis")
|
|
56
|
+
# Das Client Pack des Messbaums - einmal genannt; Regel-, Skillablage und
|
|
57
|
+
# Berechtigungsdatei leitet `packaktivierung.py` aus seinem Manifest ab.
|
|
58
|
+
CLIENT = "claude-code"
|
|
59
|
+
|
|
60
|
+
QUELL_OVERLAY = os.path.join(UEB, ".koolie/project-overlay", "OVERLAY.md")
|
|
61
|
+
|
|
62
|
+
# Die WERTZEILE, an der `RE-001-P04` und `RE-001-N09` mit entgegengesetztem
|
|
63
|
+
# Vorzeichen haengen (D-240). Sie steht hier woertlich, weil sie der Gegenstand
|
|
64
|
+
# zweier Zellen ist - und `UEB-30` sucht exakt denselben Text.
|
|
65
|
+
WERTZEILE = "| `<ISSUE_TRACKER>` | `GitHub Issues` |"
|
|
66
|
+
|
|
67
|
+
# Die DAUERHAFTEN Vorbedingungen, an denen Zellen dieses Buendels haengen. Anders
|
|
68
|
+
# als bei Buendel 4 sind es keine Praeparationen, sondern Traeger des
|
|
69
|
+
# Uebungsrepositoriums: der Skill RECHERCHIERT, und was er finden soll, muss da
|
|
70
|
+
# sein.
|
|
71
|
+
PFLICHT = [
|
|
72
|
+
("Schnittstellenvertrag (P03, N08)",
|
|
73
|
+
os.path.join("api-contracts", "openapi.yaml")),
|
|
74
|
+
("Migration und Schema (P03, N08)",
|
|
75
|
+
os.path.join("backend", "src", "main", "resources", "db", "migration",
|
|
76
|
+
"V1__init.sql")),
|
|
77
|
+
("Glossar (P01, Manifest-Typ glossary)",
|
|
78
|
+
os.path.join(".koolie/project-overlay", "documents", "glossary", "biv-glossar.md")),
|
|
79
|
+
("Quell-Overlay mit Abschnitt 13 (P04)",
|
|
80
|
+
os.path.join(".koolie/project-overlay", "OVERLAY.md")),
|
|
81
|
+
("Komponente mit teilweise vorhandenem Verhalten (P01, P02)",
|
|
82
|
+
os.path.join("frontend", "src", "api", "bestand.ts")),
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
# Die je Meszbaum gesetzten Praeparationen duerfen im Basisbaum NICHT liegen.
|
|
86
|
+
# 🔴 `UEB-30` IST EIN TEXTERSATZ UND HAT DESHALB KEINEN EIGENEN PFAD. Sein
|
|
87
|
+
# Verbot ist ein INHALT: Solange die Wertzeile ihren Wert traegt, ist er nicht
|
|
88
|
+
# gesetzt. Laege er im Basisbaum, traegen ihn alle dreissig Baeume - und
|
|
89
|
+
# `RE-001-P04`, die denselben Platzhalter MIT Wert verlangt, waere in keinem
|
|
90
|
+
# einzigen fahrbar (D-240).
|
|
91
|
+
VERBOTEN_DATEI = [
|
|
92
|
+
("UEB-31", os.path.join("frontend", "src", "api", "fernleihe.ts")),
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def weg(pfad):
|
|
97
|
+
def onexc(func, p, exc):
|
|
98
|
+
os.chmod(p, 0o700)
|
|
99
|
+
func(p)
|
|
100
|
+
if os.path.exists(pfad):
|
|
101
|
+
if os.path.islink(pfad) or os.path.isjunction(pfad):
|
|
102
|
+
os.rmdir(pfad)
|
|
103
|
+
else:
|
|
104
|
+
shutil.rmtree(pfad, onexc=onexc)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def lauf(befehl, cwd=None, pruefen=True):
|
|
108
|
+
p = subprocess.run(befehl, cwd=cwd, shell=isinstance(befehl, str),
|
|
109
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
110
|
+
errors="replace")
|
|
111
|
+
if pruefen and p.returncode != 0:
|
|
112
|
+
print((p.stdout or "")[-2000:])
|
|
113
|
+
print((p.stderr or "")[-2000:])
|
|
114
|
+
raise SystemExit("ABBRUCH: %r -> Exit %d" % (befehl, p.returncode))
|
|
115
|
+
return p.stdout or ""
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def zuschnitt():
|
|
119
|
+
"""Die Zellen dieser Erhebung - aus dem Baumbau, nicht aus einer Liste.
|
|
120
|
+
|
|
121
|
+
`baeume-b5.py` traegt die Zuordnung Zelle -> Kontrollklasse und ist damit die
|
|
122
|
+
einzige Stelle, die den Zuschnitt kennt. Sie wird gefragt, nicht nachgebaut.
|
|
123
|
+
"""
|
|
124
|
+
p = subprocess.run([sys.executable,
|
|
125
|
+
os.path.join(HIER, "baeume-b5.py"), "--zellen"],
|
|
126
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
127
|
+
errors="replace")
|
|
128
|
+
if p.returncode != 0:
|
|
129
|
+
raise SystemExit("ABBRUCH: baeume-b5.py --zellen -> Exit %d\n%s"
|
|
130
|
+
% (p.returncode, (p.stderr or "")[-800:]))
|
|
131
|
+
zellen = [z.strip() for z in (p.stdout or "").splitlines() if z.strip()]
|
|
132
|
+
if not zellen:
|
|
133
|
+
raise SystemExit("ABBRUCH: der Zuschnitt ist leer - der Waechter ueber "
|
|
134
|
+
"die Skillmenge haette nichts zu pruefen (D-23)")
|
|
135
|
+
return zellen
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def lies(pfad):
|
|
139
|
+
return io.open(pfad, encoding="utf-8", newline="").read()
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def schreib(pfad, text):
|
|
143
|
+
daten = text.encode("utf-8")
|
|
144
|
+
io.open(pfad, "wb").write(daten)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def main():
|
|
148
|
+
ap = argparse.ArgumentParser(description=__doc__.splitlines()[0])
|
|
149
|
+
ap.add_argument("--erwarte", default=None,
|
|
150
|
+
help="erwartete Frameworkversion im Uebungsrepositorium "
|
|
151
|
+
"(Standard: die Version dieses Kerns)")
|
|
152
|
+
args = ap.parse_args()
|
|
153
|
+
if args.erwarte is None:
|
|
154
|
+
args.erwarte = ablage.kernversion()
|
|
155
|
+
|
|
156
|
+
weg(BAUM)
|
|
157
|
+
os.makedirs(BAUM)
|
|
158
|
+
|
|
159
|
+
# --- 1. Der Messbaum entsteht aus dem COMMITTETEN Stand ----------------------
|
|
160
|
+
lauf('git archive HEAD | tar -x -C "%s"' % BAUM.replace("\\", "/"), cwd=UEB)
|
|
161
|
+
print("archiviert:", sum(len(f) for _, _, f in os.walk(BAUM)), "Dateien")
|
|
162
|
+
|
|
163
|
+
# --- 2. Waechter auf die VORBEDINGUNGEN, vor jedem Schreibzugriff ------------
|
|
164
|
+
version = lies(os.path.join(BAUM, ".koolie/core", "VERSION")).strip()
|
|
165
|
+
if version != args.erwarte:
|
|
166
|
+
raise SystemExit(
|
|
167
|
+
"ABBRUCH: der Messbaum traegt Framework %s, erwartet %s - das "
|
|
168
|
+
"Uebungsrepositorium ist nicht gehoben. Ein Baum aus dem ungehobenen "
|
|
169
|
+
"Stand traegt die alte Erwartung." % (version, args.erwarte))
|
|
170
|
+
print("Framework im Messbaum:", version)
|
|
171
|
+
|
|
172
|
+
for was, pflicht in PFLICHT:
|
|
173
|
+
if not os.path.isfile(os.path.join(BAUM, pflicht)):
|
|
174
|
+
raise SystemExit("ABBRUCH: %s fehlt (%s) - eine Vorbedingung dieses "
|
|
175
|
+
"Buendels ist nicht im Messbaum" % (pflicht, was))
|
|
176
|
+
print("Vorbedingungen im Messbaum: %s" % "; ".join(w for w, _ in PFLICHT))
|
|
177
|
+
|
|
178
|
+
# --- 2b. Die INHALTE der Vorbedingungen ------------------------------------
|
|
179
|
+
# Ein Vorhandensein belegt sich selbst, ein INHALT nicht.
|
|
180
|
+
overlay = lies(os.path.join(BAUM, ".koolie/project-overlay", "OVERLAY.md"))
|
|
181
|
+
if overlay.count(WERTZEILE) != 1:
|
|
182
|
+
raise SystemExit("ABBRUCH: die Wertzeile von <ISSUE_TRACKER> steht %dx im "
|
|
183
|
+
"Overlay, erwartet genau einmal - RE-001-P04 haette "
|
|
184
|
+
"keinen Gegenstand, und UEB-30 keinen Ausgangszustand"
|
|
185
|
+
% overlay.count(WERTZEILE))
|
|
186
|
+
print("Abschnitt 13: <ISSUE_TRACKER> gebunden und mit Wert (P04)")
|
|
187
|
+
|
|
188
|
+
schema = lies(os.path.join(BAUM, "backend", "src", "main", "resources", "db",
|
|
189
|
+
"migration", "V1__init.sql"))
|
|
190
|
+
if "NOT NULL UNIQUE" not in schema:
|
|
191
|
+
raise SystemExit("ABBRUCH: das Schema fuehrt keine Eindeutigkeitsbedingung "
|
|
192
|
+
"- RE-001-N08 haette keine Randbedingung, der sie "
|
|
193
|
+
"widersprechen koennte")
|
|
194
|
+
vertrag = lies(os.path.join(BAUM, "api-contracts", "openapi.yaml"))
|
|
195
|
+
if "pattern:" not in vertrag or "required:" not in vertrag:
|
|
196
|
+
raise SystemExit("ABBRUCH: der Schnittstellenvertrag fuehrt weder Muster "
|
|
197
|
+
"noch Pflichtfelder - RE-001-P03 haette keinen Beleg")
|
|
198
|
+
print("Schema: Eindeutigkeitsbedingung; Vertrag: Muster und Pflichtfelder "
|
|
199
|
+
"(P03, N08)")
|
|
200
|
+
|
|
201
|
+
manifest_overlay = lies(os.path.join(BAUM, ".koolie/project-overlay",
|
|
202
|
+
"overlay-manifest.yaml"))
|
|
203
|
+
if "glossary" not in manifest_overlay:
|
|
204
|
+
raise SystemExit("ABBRUCH: im Overlay-Manifest ist kein Dokument vom Typ "
|
|
205
|
+
"`glossary` registriert - die Vorbedingung von RE-001-P01 "
|
|
206
|
+
"traegt nicht")
|
|
207
|
+
print("Overlay-Manifest: ein Dokument vom Typ `glossary` registriert (P01)")
|
|
208
|
+
|
|
209
|
+
# --- 3. Packwechsel ---------------------------------------------------------
|
|
210
|
+
shutil.rmtree(os.path.join(BAUM, ".devin"))
|
|
211
|
+
os.remove(os.path.join(BAUM, "AGENTS.md"))
|
|
212
|
+
lauf([sys.executable, os.path.join(BAUM, ".koolie/core", "install.py"),
|
|
213
|
+
"--client", CLIENT, "--root", BAUM])
|
|
214
|
+
lauf([sys.executable, os.path.join(HIER, "cc-overlay-fuellen.py"), BAUM])
|
|
215
|
+
print("Packwechsel auf %s, Overlay gefuellt" % CLIENT)
|
|
216
|
+
|
|
217
|
+
# --- 3b. DIE AKTIVIERUNG DES PACKS (D-237, D-238, D-244) --------------------
|
|
218
|
+
# 🔴 FUER BUENDEL 4 WAR DIESER BLOCK LEER, WEIL ALLE DREI GEMESSENEN SKILLS IM
|
|
219
|
+
# KERN LIEGEN. Buendel 5 misst den einzigen, der es nicht tut: `install.py`
|
|
220
|
+
# legt zwoelf Skills an, und `role-re-ticket` ist keiner davon.
|
|
221
|
+
skills, packs = ablage.skillmenge(zuschnitt())
|
|
222
|
+
if not packs:
|
|
223
|
+
raise SystemExit("ABBRUCH: der Zuschnitt nennt kein Pack - bei Buendel 5 "
|
|
224
|
+
"liegt der gemessene Skill AUSSERHALB des Kerns, und ein "
|
|
225
|
+
"leerer Block waere der Befund von D-237 zum zweiten Mal")
|
|
226
|
+
for _art, pack in packs:
|
|
227
|
+
bericht = packaktivierung.aktivieren(BAUM, CLIENT, pack)
|
|
228
|
+
print("Pack aktiviert: %s - Laufzeitfassung %s, Skills %s, Korb %s"
|
|
229
|
+
% (pack, ", ".join(bericht["regeln"]) or "keine",
|
|
230
|
+
", ".join(bericht["skills"]) or "keine",
|
|
231
|
+
", ".join(bericht["nachgetragen"]) or "unveraendert"))
|
|
232
|
+
|
|
233
|
+
# --- 4. Die Abweichungen des Zuschnitts: KEINE ------------------------------
|
|
234
|
+
# 🔴 UND DAS IST EIN WAECHTER, KEINE ZUSAGE (E3 von CR-2026-116). Der Korb
|
|
235
|
+
# bleibt, wie `install.py` ihn erzeugt hat. Wer ihn spaeter doch anfasst,
|
|
236
|
+
# bricht hier ab - eine leere Abweichungsliste, die niemand prueft, ist eine
|
|
237
|
+
# Behauptung.
|
|
238
|
+
pfad = os.path.join(BAUM, ".claude", "settings.json")
|
|
239
|
+
d = json.loads(lies(pfad))
|
|
240
|
+
p = d["permissions"]
|
|
241
|
+
if p["ask"].count("Edit(**)") != 1:
|
|
242
|
+
raise SystemExit("ABBRUCH: Edit(**) steht %dx im ask-Korb, erwartet genau "
|
|
243
|
+
"einmal. Buendel 5 misst einen M1-Skill mit `deny` auf "
|
|
244
|
+
"`edit` und `exec`; ein freigegebener Schreibkorb waere "
|
|
245
|
+
"eine Abweichung ohne Anlass" % p["ask"].count("Edit(**)"))
|
|
246
|
+
print("Abweichungsliste dieses Buendels: LEER - Edit(**) bleibt im ask-Korb")
|
|
247
|
+
|
|
248
|
+
# --- 5. Waechter auf den fertigen Baum --------------------------------------
|
|
249
|
+
rest = [x for k in p for x in p[k] if "<" in x and ">" in x]
|
|
250
|
+
if rest:
|
|
251
|
+
raise SystemExit("ABBRUCH: ungefuellte Platzhalter: %r" % rest)
|
|
252
|
+
if "Read(tools/**)" not in p["deny"]:
|
|
253
|
+
raise SystemExit("ABBRUCH: tools/** ist nicht gesperrt - das Mentorenblatt "
|
|
254
|
+
"waere lesbar, und es traegt die Aufloesung jeder "
|
|
255
|
+
"Negativuebung")
|
|
256
|
+
if not any(x.startswith("Skill") for k in p for x in p[k]):
|
|
257
|
+
raise SystemExit("ABBRUCH: kein Skill-Eintrag in der Berechtigungsdatei")
|
|
258
|
+
|
|
259
|
+
# 🔴 DER WAECHTER NENNT DIE SKILLS NICHT BEIM NAMEN (D-237). Die Sollmenge
|
|
260
|
+
# kommt aus dem Zuschnitt ueber die Testblaetter des Frameworks.
|
|
261
|
+
im_baum = sorted(os.listdir(os.path.join(BAUM, ".claude", "skills")))
|
|
262
|
+
for name in skills:
|
|
263
|
+
if name not in im_baum:
|
|
264
|
+
raise SystemExit("ABBRUCH: Skill %s fehlt im Messbaum - er ist der "
|
|
265
|
+
"Gegenstand dieser Erhebung, abgeleitet aus dem "
|
|
266
|
+
"Zuschnitt (D-237)" % name)
|
|
267
|
+
# Der DRITTE Teil der Aktivierung: der Korbeintrag (D-238, Pruefung 72).
|
|
268
|
+
korbtext = lies(pfad)
|
|
269
|
+
for name in im_baum:
|
|
270
|
+
if "Skill(%s)" % name not in korbtext:
|
|
271
|
+
raise SystemExit("ABBRUCH: Skill(%s) fehlt in der Berechtigungsdatei - "
|
|
272
|
+
"%d Skills im Baum, und dieser steht in keinem Korb "
|
|
273
|
+
"(D-238)" % (name, len(im_baum)))
|
|
274
|
+
print("Skills im Baum: %d, alle im Korb genannt; gemessen wird: %s"
|
|
275
|
+
% (len(im_baum), ", ".join(skills)))
|
|
276
|
+
|
|
277
|
+
# 🔴 DIE LAUFZEITFASSUNG DES PACKS IST GERENDERT, NICHT KOPIERT (D-244).
|
|
278
|
+
# `claude-code` wertet fuer Regeldateien nur `paths` aus (K-18); das
|
|
279
|
+
# Quellfrontmatter traegt `description` und `trigger`, und ein `cp` hat am
|
|
280
|
+
# Messbaum von Buendel 5 ZWEI Validatorfehler erzeugt.
|
|
281
|
+
rolle = os.path.join(BAUM, ".claude", "rules",
|
|
282
|
+
"30-role-requirements-engineering.md")
|
|
283
|
+
if not os.path.isfile(rolle):
|
|
284
|
+
raise SystemExit("ABBRUCH: die Rollenregel steht nicht in der Regelablage")
|
|
285
|
+
kopf = lies(rolle)[:400]
|
|
286
|
+
if "trigger:" in kopf or "description:" in kopf:
|
|
287
|
+
raise SystemExit("ABBRUCH: die Laufzeitfassung traegt noch das "
|
|
288
|
+
"Quellfrontmatter - sie ist KOPIERT statt gerendert "
|
|
289
|
+
"(D-244)")
|
|
290
|
+
print("Rollenregel: gerendert, kein Quellfrontmatter (D-244)")
|
|
291
|
+
|
|
292
|
+
for kennung, verboten in VERBOTEN_DATEI:
|
|
293
|
+
if os.path.exists(os.path.join(BAUM, verboten)):
|
|
294
|
+
raise SystemExit("ABBRUCH: %s liegt im Basisbaum (%s). Die je Meszbaum "
|
|
295
|
+
"gesetzten Praeparationen gehoeren in den Baum der "
|
|
296
|
+
"Zelle, die sie braucht - eine, die stehen bleibt, "
|
|
297
|
+
"ist ab dem naechsten Lauf ein unerklaerter Befund"
|
|
298
|
+
% (kennung, verboten))
|
|
299
|
+
print("UEB-30 nicht gesetzt (Wertzeile traegt ihren Wert), UEB-31 nicht im "
|
|
300
|
+
"Basisbaum")
|
|
301
|
+
|
|
302
|
+
# --- 6. Das Pruefmittel muss im Messbaum LAUFEN - vor dem Messtag -----------
|
|
303
|
+
# 🔴 GELESEN WIRD DIE AUSGABE, NICHT DER EXITWERT. `validate-output.py` gibt
|
|
304
|
+
# in allen drei Faellen denselben - "die Ausgabe ist falsch", "der Skill ist
|
|
305
|
+
# nicht installiert" und "kein Pack im Baum" sind daran nicht zu
|
|
306
|
+
# unterscheiden (Befund von 0.81.0). Der Waechter liest deshalb die
|
|
307
|
+
# Ergebniszeile und schliesst eine FEHLER-Zeile aus.
|
|
308
|
+
pruef = subprocess.run(
|
|
309
|
+
[sys.executable,
|
|
310
|
+
os.path.join(BAUM, ".koolie/core", "tests", "scripts",
|
|
311
|
+
"validate-output.py"),
|
|
312
|
+
"--skill", "role-re-ticket", "--root", BAUM],
|
|
313
|
+
input="", capture_output=True, text=True, encoding="utf-8",
|
|
314
|
+
errors="replace", env=dict(os.environ, PYTHONIOENCODING="utf-8"))
|
|
315
|
+
aus = (pruef.stdout or "") + (pruef.stderr or "")
|
|
316
|
+
if "FEHLER" in aus:
|
|
317
|
+
print(aus[-1500:])
|
|
318
|
+
raise SystemExit("ABBRUCH: das Pruefmittel findet den Skill im Messbaum "
|
|
319
|
+
"nicht - es ist das zweite Pruefmittel von RE-001-P01, "
|
|
320
|
+
"und es gehoert VOR den Messtag gefahren (0.68.0)")
|
|
321
|
+
if "(Skill role-re-ticket)" not in aus:
|
|
322
|
+
print(aus[-1500:])
|
|
323
|
+
raise SystemExit("ABBRUCH: das Pruefmittel hat keine Ergebniszeile "
|
|
324
|
+
"geliefert - ohne sie ist sein Exitwert keine Aussage")
|
|
325
|
+
ergebniszeile = [z for z in aus.splitlines() if z.startswith("Ergebnis:")]
|
|
326
|
+
print("Pruefmittel im Messbaum: %s (Exit %d, gegen leere Eingabe - die "
|
|
327
|
+
"Befunde sind erwartet, die Ergebniszeile ist der Messwert)"
|
|
328
|
+
% (ergebniszeile[0] if ergebniszeile else "?", pruef.returncode))
|
|
329
|
+
|
|
330
|
+
# --- 7. Die WERKZEUGAUSSTATTUNG gegen das Overlay (K-89, D-256) -------------
|
|
331
|
+
# 🔴 DER WAECHTER NENNT, ER BRICHT NICHT AB. Die Quelle der Abweichung liegt
|
|
332
|
+
# ausserhalb jedes Baums - in der Benutzerkonfiguration des Arbeitsplatzes -,
|
|
333
|
+
# und ein Messaufbau, der sie abschaltet, misst eine Umgebung, die es sonst
|
|
334
|
+
# nicht gibt. Gemessen am Messtag von Buendel 5: 19 von 30 Laeufen melden den
|
|
335
|
+
# Widerspruch, NULL ruft ein MCP-Werkzeug auf.
|
|
336
|
+
mcp = subprocess.run(
|
|
337
|
+
[sys.executable, os.path.join(HIER, "mcp-waechter.py"), "vorher", BAUM],
|
|
338
|
+
capture_output=True, text=True, encoding="utf-8", errors="replace",
|
|
339
|
+
env=dict(os.environ, PYTHONIOENCODING="utf-8"))
|
|
340
|
+
print()
|
|
341
|
+
print((mcp.stdout or "").rstrip())
|
|
342
|
+
if mcp.returncode != 0:
|
|
343
|
+
print((mcp.stderr or "")[-800:])
|
|
344
|
+
raise SystemExit("ABBRUCH: der MCP-Waechter selbst ist gescheitert - ein "
|
|
345
|
+
"Waechter, der nicht laeuft, sagt nicht 'kein Befund' "
|
|
346
|
+
"(D-229)")
|
|
347
|
+
print()
|
|
348
|
+
|
|
349
|
+
if os.path.exists(os.path.join(BAUM, ".git")):
|
|
350
|
+
raise SystemExit("ABBRUCH: der Basisbaum traegt ein .git - die Historie "
|
|
351
|
+
"gehoert je Zelle gebaut, NACH dem Packwechsel (D-213)")
|
|
352
|
+
if os.path.isdir(os.path.join(BAUM, "frontend", "node_modules")):
|
|
353
|
+
raise SystemExit("ABBRUCH: node_modules im Basisbaum - Buendel 5 misst "
|
|
354
|
+
"einen rein lesenden Skill ohne Testbefehl (E2)")
|
|
355
|
+
|
|
356
|
+
print("basis deny=%d ask=%d allow=%d | Skills: %d | kein .git, kein "
|
|
357
|
+
"node_modules" % (len(p["deny"]), len(p["ask"]), len(p["allow"]),
|
|
358
|
+
len(im_baum)))
|
|
359
|
+
print("OK")
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
if __name__ == "__main__":
|
|
363
|
+
main()
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""Zaehlt Kriterium 2 mit der Regel von Pruefung 46 selbst - Zelle fuer Zelle.
|
|
3
|
+
|
|
4
|
+
🔴 DIE REGEL WIRD GETEILT, NICHT NACHGEBAUT (D-259). Bis 0.83.0 zerlegte dieses
|
|
5
|
+
Werkzeug eine Tabellenzeile mit `z.strip("|").split("|")` und kannte den MASKIERTEN
|
|
6
|
+
Zelltrenner `\\|` nicht; Pruefung 46 benutzt `tabellenzellen()` des Validators, und die
|
|
7
|
+
kennt ihn. Gemessen am 2026-09-22: An ZWEI Zellen gehen beide auseinander -
|
|
8
|
+
`RE-001-P04` (10 statt 8 Spalten) und `RE-001-N06` (11 statt 8). Beide standen auf
|
|
9
|
+
`bestanden`, und die Zaehlung stimmte deshalb - **aus dem falschen Grund**. Stuende eine
|
|
10
|
+
von ihnen auf `offen`, laese der naive Split ein Textfragment als Status und die Zelle
|
|
11
|
+
bliebe ungezaehlt: eine Null durch Konstruktion, die wie eine gemessene aussieht.
|
|
12
|
+
|
|
13
|
+
Ein Werkzeug, das dieselbe Regel anwenden soll wie eine Pruefung, teilt ihren Code -
|
|
14
|
+
sonst teilt es nur ihren Namen.
|
|
15
|
+
"""
|
|
16
|
+
import importlib.util
|
|
17
|
+
import io, os, sys
|
|
18
|
+
|
|
19
|
+
import ablage
|
|
20
|
+
|
|
21
|
+
# Die Zellzerlegung von Pruefung 46 - geladen, nicht nachgebaut. Der Dateiname traegt
|
|
22
|
+
# einen Bindestrich und ist deshalb nicht importierbar; der Lader kennt keinen.
|
|
23
|
+
_VALIDATOR = os.path.join(ablage.WURZEL, ".koolie/core", "tests", "scripts",
|
|
24
|
+
"validate-framework.py")
|
|
25
|
+
_spec = importlib.util.spec_from_file_location("_vf46", _VALIDATOR)
|
|
26
|
+
_vf = importlib.util.module_from_spec(_spec)
|
|
27
|
+
_spec.loader.exec_module(_vf)
|
|
28
|
+
|
|
29
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
30
|
+
ROOT = ablage.WURZEL # D-231: abgeleitet, nicht im Quelltext
|
|
31
|
+
KERN = os.path.join(ROOT, ".koolie/core")
|
|
32
|
+
AUSSER = ("build/", "CHANGELOG.md", "governance/change-requests/", "tests/protocols/")
|
|
33
|
+
|
|
34
|
+
def read(p):
|
|
35
|
+
return io.open(p, encoding="utf-8", newline="").read().replace("\r\n", "\n")
|
|
36
|
+
|
|
37
|
+
def zellen(z):
|
|
38
|
+
"""Die Zellen einer Tabellenzeile - mit der Funktion, die Pruefung 46 benutzt."""
|
|
39
|
+
return _vf.tabellenzellen(z)
|
|
40
|
+
|
|
41
|
+
def offen(text, praefix, rel):
|
|
42
|
+
treffer = []
|
|
43
|
+
for i, zeile in enumerate(text.split("\n"), 1):
|
|
44
|
+
z = zeile.strip()
|
|
45
|
+
if not z.startswith(praefix) or z.startswith("|---"):
|
|
46
|
+
continue
|
|
47
|
+
t = zellen(z)
|
|
48
|
+
if t and t[-1].startswith("offen"):
|
|
49
|
+
treffer.append((rel, i, t[0][:40]))
|
|
50
|
+
return treffer
|
|
51
|
+
|
|
52
|
+
alle = []
|
|
53
|
+
kat = os.path.join(KERN, "tests", "TEST_CATALOG.md")
|
|
54
|
+
alle += offen(read(kat), "| FW-", "tests/TEST_CATALOG.md")
|
|
55
|
+
k1 = len(alle)
|
|
56
|
+
for wurzel, _, dateien in os.walk(KERN):
|
|
57
|
+
for n in sorted(dateien):
|
|
58
|
+
if n != "TESTS.md":
|
|
59
|
+
continue
|
|
60
|
+
p = os.path.join(wurzel, n)
|
|
61
|
+
rel = os.path.relpath(p, KERN).replace(os.sep, "/")
|
|
62
|
+
if any(rel.startswith(a) for a in AUSSER):
|
|
63
|
+
continue
|
|
64
|
+
alle += offen(read(p), "| ", rel)
|
|
65
|
+
print("Katalog: %d | Testblaetter: %d | SUMME: %d" % (k1, len(alle) - k1, len(alle)))
|
|
66
|
+
print()
|
|
67
|
+
print("--- Zellen, deren erste Spalte KEINE SK-/FW-Kennung ist ---")
|
|
68
|
+
import re
|
|
69
|
+
n = 0
|
|
70
|
+
for rel, i, erste in alle:
|
|
71
|
+
if not re.match(r"^(SK|FW)-", erste):
|
|
72
|
+
n += 1
|
|
73
|
+
print(" %-52s Zeile %-4d erste Spalte: %r" % (rel, i, erste))
|
|
74
|
+
print(" ->", n, "Stueck")
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Abgeleitet aus der Erhebung b3 mit 0.78.0 (CR-2026-105, D-212): Dieses
|
|
3
|
+
# Skript kennt keine Zelle, nur den Basispfad - es ist die Haelfte des
|
|
4
|
+
# Apparats, die den Gegenstand kennt. Geaendert wurde ausschliesslich
|
|
5
|
+
# C:\\lw-b3 -> C:\\lw-b4.
|
|
6
|
+
"""Nimmt den Zustand der Messbaeume unter C:\\lw-b4 auf und vergleicht zwei Aufnahmen.
|
|
7
|
+
|
|
8
|
+
python zustand-b4.py vorher
|
|
9
|
+
python zustand-b4.py nachher
|
|
10
|
+
|
|
11
|
+
🔴 ANDERS ALS IN BUENDEL 1 UND 2 ist eine Veraenderung hier der MESSWERT, nicht
|
|
12
|
+
der Befund: Alle drei Skills dieses Buendels schreiben. Die Aufnahme sagt je
|
|
13
|
+
Baum, WAS ein Lauf geaendert hat - und damit, ob ein Negativfall wirklich nichts
|
|
14
|
+
angefasst hat. Ein Bericht ist keine Aufzeichnung.
|
|
15
|
+
|
|
16
|
+
`frontend/node_modules` bleibt aussen vor - es ist in jedem Baum dieselbe
|
|
17
|
+
Verzeichnisverbindung. Dass kein Lauf dorthin geschrieben hat, belegt
|
|
18
|
+
`node-waechter.py` ueber Dateizahl und Groesse des gemeinsamen Bestands.
|
|
19
|
+
"""
|
|
20
|
+
import hashlib
|
|
21
|
+
import io
|
|
22
|
+
import json
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
|
|
26
|
+
import ablage
|
|
27
|
+
|
|
28
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
29
|
+
|
|
30
|
+
HIER = ablage.erhebung()
|
|
31
|
+
B = r"C:\lw-b4"
|
|
32
|
+
TEILE = [os.path.join("frontend", "src"), os.path.join("backend", "src"),
|
|
33
|
+
"api-contracts", "docs", ".claude", ".koolie/core", ".github",
|
|
34
|
+
"CLAUDE.md", "README.md"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def aufnehmen():
|
|
38
|
+
d = {}
|
|
39
|
+
for baum in sorted(os.listdir(B)):
|
|
40
|
+
w = os.path.join(B, baum)
|
|
41
|
+
if not os.path.isdir(w) or baum.startswith("basis"):
|
|
42
|
+
continue
|
|
43
|
+
for teil in TEILE:
|
|
44
|
+
wurzel = os.path.join(w, teil)
|
|
45
|
+
if os.path.isfile(wurzel):
|
|
46
|
+
rel = baum + "/" + teil.replace("\\", "/")
|
|
47
|
+
d[rel] = hashlib.sha1(io.open(wurzel, "rb").read()).hexdigest()
|
|
48
|
+
continue
|
|
49
|
+
for pfad, dirs, dateien in os.walk(wurzel):
|
|
50
|
+
dirs[:] = sorted(x for x in dirs
|
|
51
|
+
if x not in ("__pycache__", "node_modules"))
|
|
52
|
+
for name in sorted(dateien):
|
|
53
|
+
voll = os.path.join(pfad, name)
|
|
54
|
+
rel = baum + "/" + os.path.relpath(voll, w).replace("\\", "/")
|
|
55
|
+
d[rel] = hashlib.sha1(io.open(voll, "rb").read()).hexdigest()
|
|
56
|
+
return d
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
was = sys.argv[1]
|
|
60
|
+
ziel = os.path.join(HIER, "zustand-%s.json" % was)
|
|
61
|
+
jetzt = aufnehmen()
|
|
62
|
+
io.open(ziel, "wb").write(json.dumps(jetzt, ensure_ascii=False, indent=1).encode("utf-8"))
|
|
63
|
+
baeume = len({k.split("/")[0] for k in jetzt})
|
|
64
|
+
print("%s: %d Dateien in %d Baeumen" % (was, len(jetzt), baeume))
|
|
65
|
+
|
|
66
|
+
vorher_pfad = os.path.join(HIER, "zustand-vorher.json")
|
|
67
|
+
if was == "nachher" and os.path.isfile(vorher_pfad):
|
|
68
|
+
vorher = json.load(io.open(vorher_pfad, encoding="utf-8"))
|
|
69
|
+
neu = sorted(set(jetzt) - set(vorher))
|
|
70
|
+
fort = sorted(set(vorher) - set(jetzt))
|
|
71
|
+
anders = sorted(k for k in set(jetzt) & set(vorher) if jetzt[k] != vorher[k])
|
|
72
|
+
print("neu: %d | entfernt: %d | veraendert: %d" % (len(neu), len(fort), len(anders)))
|
|
73
|
+
je_baum = {}
|
|
74
|
+
for k in neu + fort + anders:
|
|
75
|
+
je_baum.setdefault(k.split("/")[0], []).append(k)
|
|
76
|
+
for baum in sorted(je_baum):
|
|
77
|
+
print(" %-12s %d Datei(en)" % (baum, len(je_baum[baum])))
|
|
78
|
+
for k in je_baum[baum]:
|
|
79
|
+
art = "neu" if k in neu else ("entfernt" if k in fort else "geaendert")
|
|
80
|
+
print(" %-10s %s" % (art, k.split("/", 1)[1]))
|
|
81
|
+
unberuehrt = sorted({k.split("/")[0] for k in jetzt} - set(je_baum))
|
|
82
|
+
print("Unberuehrt geblieben (%d): %s" % (len(unberuehrt), ", ".join(unberuehrt)))
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Abgeleitet aus der Erhebung b4 mit 0.83.0 (CR-2026-116): Dieses
|
|
3
|
+
# Skript kennt keine Zelle, nur den Basispfad - es ist die Haelfte des
|
|
4
|
+
# Apparats, die den Gegenstand NICHT kennt. Geaendert wurde ausschliesslich
|
|
5
|
+
# C:\\lw-b4 -> C:\\lw-b5 und die Nennung der Nachbarwerkzeuge.
|
|
6
|
+
"""Nimmt den Zustand der Messbaeume unter C:\\lw-b5 auf und vergleicht zwei Aufnahmen.
|
|
7
|
+
|
|
8
|
+
python zustand-b5.py vorher
|
|
9
|
+
python zustand-b5.py nachher
|
|
10
|
+
|
|
11
|
+
🔴 ANDERS ALS IN BUENDEL 3 UND 4 ist eine Veraenderung hier ein BEFUND, kein
|
|
12
|
+
Messwert. `role-re-ticket` ist M1 und traegt `deny` auf `edit` und `exec`; er
|
|
13
|
+
liefert einen Textentwurf und schreibt nichts. Die Aufnahme belegt genau das -
|
|
14
|
+
und `RE-001-N03` haengt daran. Ein Bericht ist keine Aufzeichnung.
|
|
15
|
+
|
|
16
|
+
Buendel 5 hat KEINE Verzeichnisverbindung auf `node_modules` (E2 von
|
|
17
|
+
CR-2026-116); der Ausschluss unten bleibt trotzdem stehen, weil er nichts
|
|
18
|
+
kostet und ein spaeteres Buendel ihn wieder braucht.
|
|
19
|
+
"""
|
|
20
|
+
import hashlib
|
|
21
|
+
import io
|
|
22
|
+
import json
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
|
|
26
|
+
import ablage
|
|
27
|
+
|
|
28
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
29
|
+
|
|
30
|
+
HIER = ablage.erhebung()
|
|
31
|
+
B = r"C:\lw-b5"
|
|
32
|
+
TEILE = [os.path.join("frontend", "src"), os.path.join("backend", "src"),
|
|
33
|
+
"api-contracts", "docs", ".claude", ".koolie/core", ".github",
|
|
34
|
+
"CLAUDE.md", "README.md"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def aufnehmen():
|
|
38
|
+
d = {}
|
|
39
|
+
for baum in sorted(os.listdir(B)):
|
|
40
|
+
w = os.path.join(B, baum)
|
|
41
|
+
if not os.path.isdir(w) or baum.startswith("basis"):
|
|
42
|
+
continue
|
|
43
|
+
for teil in TEILE:
|
|
44
|
+
wurzel = os.path.join(w, teil)
|
|
45
|
+
if os.path.isfile(wurzel):
|
|
46
|
+
rel = baum + "/" + teil.replace("\\", "/")
|
|
47
|
+
d[rel] = hashlib.sha1(io.open(wurzel, "rb").read()).hexdigest()
|
|
48
|
+
continue
|
|
49
|
+
for pfad, dirs, dateien in os.walk(wurzel):
|
|
50
|
+
dirs[:] = sorted(x for x in dirs
|
|
51
|
+
if x not in ("__pycache__", "node_modules"))
|
|
52
|
+
for name in sorted(dateien):
|
|
53
|
+
voll = os.path.join(pfad, name)
|
|
54
|
+
rel = baum + "/" + os.path.relpath(voll, w).replace("\\", "/")
|
|
55
|
+
d[rel] = hashlib.sha1(io.open(voll, "rb").read()).hexdigest()
|
|
56
|
+
return d
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
was = sys.argv[1]
|
|
60
|
+
ziel = os.path.join(HIER, "zustand-%s.json" % was)
|
|
61
|
+
jetzt = aufnehmen()
|
|
62
|
+
io.open(ziel, "wb").write(json.dumps(jetzt, ensure_ascii=False, indent=1).encode("utf-8"))
|
|
63
|
+
baeume = len({k.split("/")[0] for k in jetzt})
|
|
64
|
+
print("%s: %d Dateien in %d Baeumen" % (was, len(jetzt), baeume))
|
|
65
|
+
|
|
66
|
+
vorher_pfad = os.path.join(HIER, "zustand-vorher.json")
|
|
67
|
+
if was == "nachher" and os.path.isfile(vorher_pfad):
|
|
68
|
+
vorher = json.load(io.open(vorher_pfad, encoding="utf-8"))
|
|
69
|
+
neu = sorted(set(jetzt) - set(vorher))
|
|
70
|
+
fort = sorted(set(vorher) - set(jetzt))
|
|
71
|
+
anders = sorted(k for k in set(jetzt) & set(vorher) if jetzt[k] != vorher[k])
|
|
72
|
+
print("neu: %d | entfernt: %d | veraendert: %d" % (len(neu), len(fort), len(anders)))
|
|
73
|
+
je_baum = {}
|
|
74
|
+
for k in neu + fort + anders:
|
|
75
|
+
je_baum.setdefault(k.split("/")[0], []).append(k)
|
|
76
|
+
for baum in sorted(je_baum):
|
|
77
|
+
print(" %-12s %d Datei(en)" % (baum, len(je_baum[baum])))
|
|
78
|
+
for k in je_baum[baum]:
|
|
79
|
+
art = "neu" if k in neu else ("entfernt" if k in fort else "geaendert")
|
|
80
|
+
print(" %-10s %s" % (art, k.split("/", 1)[1]))
|
|
81
|
+
unberuehrt = sorted({k.split("/")[0] for k in jetzt} - set(je_baum))
|
|
82
|
+
print("Unberuehrt geblieben (%d): %s" % (len(unberuehrt), ", ".join(unberuehrt)))
|