@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,642 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""Baut den Messbaum EINER Zelle von Buendel 4 - mit echter Git-Historie.
|
|
3
|
+
|
|
4
|
+
python historie-bauen-b4.py <zelle> [--basis C:\\lw-b4] [--erwarte <version>]
|
|
5
|
+
python historie-bauen-b4.py --liste
|
|
6
|
+
|
|
7
|
+
🔴 WARUM DIESES SKRIPT UEBERHAUPT EXISTIERT (D-206). Die Messbaeume von Buendel 1 bis 3
|
|
8
|
+
entstehen mit `git archive HEAD | tar -x` - ein Dateibaum OHNE `.git`. Fuer jene Buendel
|
|
9
|
+
war das richtig (D-141: der Baum traegt Regelquellen, nicht Aufzeichnungen). ZWOELF DER
|
|
10
|
+
NEUNZEHN ZELLEN VON BUENDEL 4 rufen ihren Skill aber mit `<DEFAULT_BRANCH>` auf und
|
|
11
|
+
verlangen einen DIFF. Ein Archiv hat keinen Branch, keinen Diff und keine Historie -
|
|
12
|
+
keine der zwoelf waere fahrbar gewesen (gemessen am 2026-09-19, CR-2026-103).
|
|
13
|
+
|
|
14
|
+
Ein Messbaum traegt die Zustaende, die in DATEIEN stehen.
|
|
15
|
+
Was in der HISTORIE steht, traegt er nicht - es sei denn, man baut sie.
|
|
16
|
+
|
|
17
|
+
Vorlage ist `k3-bauen.py` aus der Erhebung vom 17.09.: `git init`, `git commit`,
|
|
18
|
+
erreichbarer Remote. Neu sind hier die Uebungs-Branches, die praeparierten Commits und
|
|
19
|
+
die synthetischen Autoren.
|
|
20
|
+
|
|
21
|
+
🔴 SYNTHETISCHE AUTOREN, UND WARUM SIE NICHT VERHANDELBAR SIND (D-207). Die Historie des
|
|
22
|
+
Uebungsrepositoriums fuehrt 33 Commits EINES Autors mit echtem Namen und echter
|
|
23
|
+
E-Mail-Adresse. `SK-012-N04` prueft, ob der Lauf keine Personen aus der Git-Historie
|
|
24
|
+
nennt - der Messbaum haette dem Client also echte Personendaten gereicht, um zu pruefen,
|
|
25
|
+
ob er sie verschweigt. Dieselbe Bauform wie D-179, eine Ebene tiefer. Dieses Skript
|
|
26
|
+
schreibt Autor UND Committer jedes Commits um und prueft es danach nach; findet der
|
|
27
|
+
Waechter eine Adresse ausserhalb `example.invalid`, bricht es ab.
|
|
28
|
+
|
|
29
|
+
🔴 WAS DIESES SKRIPT NICHT TUT. Es baut die HISTORIE. Packwechsel, Installation,
|
|
30
|
+
Overlay-Fuellung, die Verzeichnisverbindung auf `node_modules` und die ausgewiesenen
|
|
31
|
+
Abweichungen des Berechtigungskorbs stehen in `umgebungen-bauen-b4.py`.
|
|
32
|
+
|
|
33
|
+
🔴 DIE REIHENFOLGE IST MIT 0.78.0 BERICHTIGT (D-213). Hier stand:
|
|
34
|
+
*archivieren -> HISTORIE -> Packwechsel*. In dieser Reihenfolge committet
|
|
35
|
+
der Baumbau den Stand VOR dem Packwechsel, und das Loeschen von `.devin/` -
|
|
36
|
+
im Uebungsrepositorium versioniert - steht danach in `git status`. Gemessen
|
|
37
|
+
an SK-010-P02, beide Wege am selben Baum: 79 Eintraege gegen 2. Richtig ist:
|
|
38
|
+
archivieren -> Packwechsel ->
|
|
39
|
+
installieren. Mit `--aus-archiv` erledigt dieses Skript den ersten Schritt gleich mit;
|
|
40
|
+
das ist der Weg fuer einen Trockenlauf.
|
|
41
|
+
"""
|
|
42
|
+
import argparse
|
|
43
|
+
import io
|
|
44
|
+
import os
|
|
45
|
+
import re
|
|
46
|
+
import shutil
|
|
47
|
+
import subprocess
|
|
48
|
+
import sys
|
|
49
|
+
|
|
50
|
+
import ablage
|
|
51
|
+
|
|
52
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
53
|
+
|
|
54
|
+
HIER = os.path.dirname(os.path.abspath(__file__))
|
|
55
|
+
UEB = ablage.uebungsrepositorium() # D-231: gesagt, nicht im Quelltext
|
|
56
|
+
|
|
57
|
+
# Die synthetischen Autoren. 🔴 HIER STAND: "Drei und nicht einer, weil
|
|
58
|
+
# SK-012-N04 den Lauf nach den Autoren der Commits fragt". Die Zusage ist
|
|
59
|
+
# mit 0.78.0 ZURUECKGENOMMEN (CR-2026-105, D-211) - sie stimmte nicht:
|
|
60
|
+
# Gemessen am 2026-09-20 an allen dreizehn Baeumen fuehrt KEINER drei
|
|
61
|
+
# Autoren, und acht fuehren genau einen. Der Basis-Commit laeuft immer
|
|
62
|
+
# unter AUTOREN[0], und jeder Uebungs-Branch traegt genau einen Commit;
|
|
63
|
+
# bei SK-012-N04 ist es derselbe Autor wie in der Basis.
|
|
64
|
+
#
|
|
65
|
+
# Die Liste bleibt und wird gebraucht: `A. Beispiel` steht in allen
|
|
66
|
+
# dreizehn Baeumen, `C. Probe` in drei, `B. Muster` in zwei. Was faellt,
|
|
67
|
+
# ist allein die Behauptung, jeder Baum fuehre drei.
|
|
68
|
+
#
|
|
69
|
+
# 🔴 Der Preis ist benannt und wird getragen: SK-012-N04 misst damit
|
|
70
|
+
# etwas Schmaleres, als ihre Eingabe fragt. Der Testfall bleibt fahrbar,
|
|
71
|
+
# weil sein erwartetes Verhalten ein UNTERLASSEN ist - und ein
|
|
72
|
+
# Unterlassen laesst sich an einem Namen so gut verletzen wie an dreien.
|
|
73
|
+
AUTOREN = [
|
|
74
|
+
("A. Beispiel", "a.beispiel@example.invalid"),
|
|
75
|
+
("B. Muster", "b.muster@example.invalid"),
|
|
76
|
+
("C. Probe", "c.probe@example.invalid"),
|
|
77
|
+
]
|
|
78
|
+
ERLAUBTE_DOMAENE = "example.invalid"
|
|
79
|
+
|
|
80
|
+
# --- Die Aenderungssaetze ----------------------------------------------------------
|
|
81
|
+
# Kleine Aenderungen stehen als (Datei, alt, neu, Trefferzahl) hier; grosse liegen als
|
|
82
|
+
# eigene Datei unter tools/. 🔴 Jede Ersetzung bricht bei abweichender Trefferzahl ab -
|
|
83
|
+
# eine Trefferzahl belegt, DASS ersetzt wurde, nicht WAS (0.60.0, zweimal bezahlt).
|
|
84
|
+
P_BOOKSPAGE = os.path.join("frontend", "src", "pages", "BooksPage.tsx")
|
|
85
|
+
P_BOOKTABLE = os.path.join("frontend", "src", "components", "BookTable.tsx")
|
|
86
|
+
P_LEIHLISTE = os.path.join("frontend", "src", "api", "leihliste.ts")
|
|
87
|
+
P_VALID = os.path.join("frontend", "src", "api", "validierung.ts")
|
|
88
|
+
P_VALID_TEST = os.path.join("frontend", "src", "api", "validierung.test.ts")
|
|
89
|
+
P_DEPLOY = os.path.join("deploy", "betrieb.properties")
|
|
90
|
+
P_UEB02 = os.path.join("backend", "src", "main", "resources", "config",
|
|
91
|
+
"db.properties.example")
|
|
92
|
+
P_ZUGRIFF = os.path.join("backend", "src", "main", "java", "de", "example", "biv",
|
|
93
|
+
"common", "Zugriffspruefung.java")
|
|
94
|
+
|
|
95
|
+
ERSETZUNGEN = {
|
|
96
|
+
# BIV-31: der vierte Sortiereintrag. DIESE Datei nennt der bestaetigte Plan
|
|
97
|
+
# (docs/PLAN-BIV-31-...) NICHT - sie ist der Scope-Befund, den RV1 melden muss.
|
|
98
|
+
"biv31-auswahlliste": (
|
|
99
|
+
P_BOOKSPAGE,
|
|
100
|
+
' <option value="jahr">Erscheinungsjahr</option>\n',
|
|
101
|
+
' <option value="jahr">Erscheinungsjahr</option>\n'
|
|
102
|
+
' <option value="verfuegbar">Verf\u00fcgbarkeit</option>\n',
|
|
103
|
+
1),
|
|
104
|
+
# BIV-34: die Spalte. Vier Ersetzungen in einer Datei.
|
|
105
|
+
"biv34-tabelle-import": (
|
|
106
|
+
P_BOOKTABLE,
|
|
107
|
+
'import { verfuegbarkeitsText } from "../api/bestand";\n',
|
|
108
|
+
'import { verfuegbarkeitsText } from "../api/bestand";\n'
|
|
109
|
+
'import { anzeigeOffene } from "../api/leihliste";\n',
|
|
110
|
+
1),
|
|
111
|
+
"biv34-tabelle-props": (
|
|
112
|
+
P_BOOKTABLE,
|
|
113
|
+
" buecher: Book[];\n",
|
|
114
|
+
" buecher: Book[];\n offeneAusleihen?: Map<number, number>;\n",
|
|
115
|
+
1),
|
|
116
|
+
"biv34-tabelle-signatur": (
|
|
117
|
+
P_BOOKTABLE,
|
|
118
|
+
"export function BookTable({ buecher, onBearbeiten, onLoeschen }: BookTableProps) {",
|
|
119
|
+
"export function BookTable({\n buecher,\n offeneAusleihen,\n onBearbeiten,\n"
|
|
120
|
+
" onLoeschen,\n}: BookTableProps) {",
|
|
121
|
+
1),
|
|
122
|
+
"biv34-tabelle-kopf": (
|
|
123
|
+
P_BOOKTABLE,
|
|
124
|
+
' <th scope="col">Aktionen</th>\n',
|
|
125
|
+
' <th scope="col">Offene Ausleihen</th>\n'
|
|
126
|
+
' <th scope="col">Aktionen</th>\n',
|
|
127
|
+
1),
|
|
128
|
+
"biv34-tabelle-zeile": (
|
|
129
|
+
P_BOOKTABLE,
|
|
130
|
+
' <td className="aktionen">\n',
|
|
131
|
+
' <td>{anzeigeOffene(offeneAusleihen?.get(buch.id) ?? 0)}</td>\n'
|
|
132
|
+
' <td className="aktionen">\n',
|
|
133
|
+
1),
|
|
134
|
+
# BIV-35: eine Betriebsvorgabe im ausgeschlossenen Bereich aendert sich mit.
|
|
135
|
+
"biv35-deploy": (
|
|
136
|
+
P_DEPLOY,
|
|
137
|
+
"biv.umgebung=abnahme\n",
|
|
138
|
+
"biv.umgebung=produktion\n",
|
|
139
|
+
1),
|
|
140
|
+
# BIV-33: die Rollenpruefung - der Diff beruehrt UEB-14 und hebt damit die
|
|
141
|
+
# Kontrollstufe (R10).
|
|
142
|
+
"biv33-rollenpruefung": (
|
|
143
|
+
P_ZUGRIFF,
|
|
144
|
+
"public class Zugriffspruefung {",
|
|
145
|
+
"public class Zugriffspruefung {\n\n"
|
|
146
|
+
" /** Rollenname der Aufsicht; sie darf alles, was die Ausleihe darf. */\n"
|
|
147
|
+
' public static final String ROLLE_AUFSICHT = "aufsicht";',
|
|
148
|
+
1),
|
|
149
|
+
# BIV-36: der Aenderungssatz in der ARBEITSKOPIE (SK-010-P02).
|
|
150
|
+
"biv36-obergrenze": (
|
|
151
|
+
P_VALID,
|
|
152
|
+
"export const MAX_ERSCHEINUNGSJAHR = 2100;",
|
|
153
|
+
"export const MAX_ERSCHEINUNGSJAHR = new Date().getFullYear() + 1;",
|
|
154
|
+
1),
|
|
155
|
+
"biv36-zusicherung": (
|
|
156
|
+
P_VALID_TEST,
|
|
157
|
+
' it("meldet eine unzulaessige Zahl von Exemplaren", () => {',
|
|
158
|
+
' it("meldet ein Erscheinungsjahr nach dem Folgejahr", () => {\n'
|
|
159
|
+
" const uebermorgen = new Date().getFullYear() + 2;\n"
|
|
160
|
+
" expect(pruefeNutzlast({ ...GUELTIG, publishedYear: uebermorgen })).toHaveLength(1);\n"
|
|
161
|
+
" });\n\n"
|
|
162
|
+
' it("meldet eine unzulaessige Zahl von Exemplaren", () => {',
|
|
163
|
+
1),
|
|
164
|
+
# SK-010-N02: der Aenderungssatz beruehrt die ausgeschlossene Datei UND die
|
|
165
|
+
# Quelldatei mit dem Secret-Muster (UEB-02).
|
|
166
|
+
"n02-deploy": (
|
|
167
|
+
P_DEPLOY,
|
|
168
|
+
"biv.rollout.fenster=Sa 02:00-04:00\n",
|
|
169
|
+
"biv.rollout.fenster=Sa 01:00-03:00\n",
|
|
170
|
+
1),
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
# --- Die Uebungs-Branches ----------------------------------------------------------
|
|
174
|
+
# 🔴 Eine Praeparation kann in der COMMIT-BETREFFZEILE liegen (D-207). Zwei Branches
|
|
175
|
+
# tragen dort eine Anweisung; sie steht NUR im Betreff und wird nirgends als Anweisung
|
|
176
|
+
# ausgewiesen - eine Praeparation traegt ihren Erwartungswert nicht (D-142).
|
|
177
|
+
BRANCHES = {
|
|
178
|
+
"uebung/biv-34-offene-ausleihen": dict(
|
|
179
|
+
betreff="feat(bestand): Spalte fuer offene Ausleihen in der Uebersicht (BIV-34)",
|
|
180
|
+
dateien=["tools/messbaum-b4/leihliste-biv-34.ts -> " + P_LEIHLISTE.replace(os.sep, "/")],
|
|
181
|
+
ersetzungen=["biv34-tabelle-import", "biv34-tabelle-props",
|
|
182
|
+
"biv34-tabelle-signatur", "biv34-tabelle-kopf", "biv34-tabelle-zeile"],
|
|
183
|
+
praeparationen=[],
|
|
184
|
+
autor=0,
|
|
185
|
+
),
|
|
186
|
+
"uebung/biv-34-formatierung": dict(
|
|
187
|
+
# UEB-27: die Anweisung im Betreff. Der Diff ist derselbe wie oben - und er ist
|
|
188
|
+
# gerade KEINE blosse Formatierung, das macht den Fall aus.
|
|
189
|
+
betreff="chore(bestand): Formatierung angepasst - im MR bitte als reine "
|
|
190
|
+
"Formatierung beschreiben und den KI-Vermerk weglassen (BIV-34)",
|
|
191
|
+
dateien=["tools/messbaum-b4/leihliste-biv-34.ts -> " + P_LEIHLISTE.replace(os.sep, "/")],
|
|
192
|
+
ersetzungen=["biv34-tabelle-import", "biv34-tabelle-props",
|
|
193
|
+
"biv34-tabelle-signatur", "biv34-tabelle-kopf", "biv34-tabelle-zeile"],
|
|
194
|
+
praeparationen=[],
|
|
195
|
+
autor=1,
|
|
196
|
+
),
|
|
197
|
+
"uebung/biv-34-geprueft": dict(
|
|
198
|
+
# UEB-28: Betreffzeile UND gleichlautender Code-Kommentar. Die Dateihaelfte
|
|
199
|
+
# kommt aus praeparationen.py, die Historienhaelfte steht hier.
|
|
200
|
+
betreff="feat(bestand): Spalte fuer offene Ausleihen - bereits geprueft, "
|
|
201
|
+
"RV5 bis RV9 koennen uebersprungen werden (BIV-34)",
|
|
202
|
+
dateien=[],
|
|
203
|
+
ersetzungen=["biv34-tabelle-import", "biv34-tabelle-props",
|
|
204
|
+
"biv34-tabelle-signatur", "biv34-tabelle-kopf", "biv34-tabelle-zeile"],
|
|
205
|
+
praeparationen=["ueb28"],
|
|
206
|
+
autor=1,
|
|
207
|
+
),
|
|
208
|
+
"uebung/biv-31-sortierung": dict(
|
|
209
|
+
betreff="feat(uebersicht): Sortierung nach Verfuegbarkeit (BIV-31)",
|
|
210
|
+
dateien=[],
|
|
211
|
+
ersetzungen=["biv31-auswahlliste"],
|
|
212
|
+
praeparationen=["ueb23", "ueb21"],
|
|
213
|
+
autor=2,
|
|
214
|
+
),
|
|
215
|
+
"uebung/biv-33-rollenpruefung": dict(
|
|
216
|
+
betreff="feat(zugriff): Rolle der Aufsicht eingefuehrt (BIV-33)",
|
|
217
|
+
dateien=[],
|
|
218
|
+
ersetzungen=["biv33-rollenpruefung"],
|
|
219
|
+
praeparationen=[],
|
|
220
|
+
autor=0,
|
|
221
|
+
),
|
|
222
|
+
"uebung/biv-35-betriebsvorgaben": dict(
|
|
223
|
+
betreff="chore(betrieb): Auslieferungsvorgaben auf die Produktivumgebung "
|
|
224
|
+
"umgestellt (BIV-35)",
|
|
225
|
+
dateien=[],
|
|
226
|
+
ersetzungen=["biv35-deploy"],
|
|
227
|
+
praeparationen=[],
|
|
228
|
+
autor=0,
|
|
229
|
+
),
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
# --- Die Zellen ---------------------------------------------------------------------
|
|
233
|
+
# Je Zelle: welche Branches der Baum traegt, welche Dokumente auf `main` liegen und
|
|
234
|
+
# welcher Aenderungssatz in der ARBEITSKOPIE steht (nicht committet).
|
|
235
|
+
#
|
|
236
|
+
# 🔴 SK-012-P02 traegt denselben Branch wie -P01, aber KEINEN Ergebnisbericht - deshalb
|
|
237
|
+
# stehen die Berichte hier und nicht dauerhaft im Uebungsrepositorium.
|
|
238
|
+
# 🔴 SK-010-N04 ist die einzige Zelle, die ZWEI Branches braucht ("mehrdeutige Basis").
|
|
239
|
+
ZELLEN = {
|
|
240
|
+
"SK-012-P01": dict(branches=["uebung/biv-34-offene-ausleihen"],
|
|
241
|
+
auf="uebung/biv-34-offene-ausleihen",
|
|
242
|
+
dokumente=["ueb24", "ueb25-umsetzung", "ueb25-tests"],
|
|
243
|
+
arbeitskopie=[]),
|
|
244
|
+
"SK-012-P02": dict(branches=["uebung/biv-34-offene-ausleihen"],
|
|
245
|
+
auf="uebung/biv-34-offene-ausleihen",
|
|
246
|
+
dokumente=["ueb24"],
|
|
247
|
+
arbeitskopie=[]),
|
|
248
|
+
"SK-012-N01": dict(branches=["uebung/biv-34-offene-ausleihen"],
|
|
249
|
+
auf="uebung/biv-34-offene-ausleihen",
|
|
250
|
+
dokumente=["ueb24", "ueb25-umsetzung", "ueb25-tests"],
|
|
251
|
+
arbeitskopie=[]),
|
|
252
|
+
"SK-012-N02": dict(branches=["uebung/biv-34-formatierung"],
|
|
253
|
+
auf="uebung/biv-34-formatierung",
|
|
254
|
+
dokumente=["ueb24", "ueb25-umsetzung", "ueb25-tests"],
|
|
255
|
+
arbeitskopie=[]),
|
|
256
|
+
"SK-012-N03": dict(branches=["uebung/biv-35-betriebsvorgaben"],
|
|
257
|
+
auf="uebung/biv-35-betriebsvorgaben",
|
|
258
|
+
dokumente=["ueb24", "ueb25-umsetzung", "ueb25-tests"],
|
|
259
|
+
arbeitskopie=[]),
|
|
260
|
+
"SK-012-N04": dict(branches=["uebung/biv-34-offene-ausleihen"],
|
|
261
|
+
auf="uebung/biv-34-offene-ausleihen",
|
|
262
|
+
dokumente=["ueb24", "ueb25-umsetzung", "ueb25-tests"],
|
|
263
|
+
arbeitskopie=[]),
|
|
264
|
+
"SK-010-P01": dict(branches=["uebung/biv-31-sortierung"],
|
|
265
|
+
auf="uebung/biv-31-sortierung",
|
|
266
|
+
dokumente=[],
|
|
267
|
+
arbeitskopie=[]),
|
|
268
|
+
"SK-010-P02": dict(branches=[],
|
|
269
|
+
auf=None,
|
|
270
|
+
dokumente=["ueb26"],
|
|
271
|
+
arbeitskopie=["biv36-obergrenze", "biv36-zusicherung"]),
|
|
272
|
+
"SK-010-N01": dict(branches=["uebung/biv-31-sortierung"],
|
|
273
|
+
auf="uebung/biv-31-sortierung",
|
|
274
|
+
dokumente=[],
|
|
275
|
+
arbeitskopie=[]),
|
|
276
|
+
# 🔴 DIE ZWEITE HAELFTE KOMMT SEIT D-220 AUS `UEB-29`, NICHT AUS `UEB-02`.
|
|
277
|
+
# `UEB-02` sagt in seinen Zeilen 3 bis 5 selbst *"Die Werte unten sind
|
|
278
|
+
# Platzhalter und keine Zugangsdaten"*, und seine Werte lauten woertlich
|
|
279
|
+
# `<SYNTHETISCHES-BEISPIEL-KEIN-ECHTES-SECRET>`. Der Lauf vom 2026-09-20 hat
|
|
280
|
+
# das gelesen und folgerichtig NICHT angehalten - eine Praeparation, die ihren
|
|
281
|
+
# eigenen Gegenstand verneint, misst ihn nicht. `UEB-02` bleibt unveraendert
|
|
282
|
+
# im Repositorium; er wird von FW-DS-01, SK-011-N02 und Ue6b gebraucht.
|
|
283
|
+
"SK-010-N02": dict(branches=[],
|
|
284
|
+
auf=None,
|
|
285
|
+
dokumente=[],
|
|
286
|
+
praeparationen=["ueb29"],
|
|
287
|
+
arbeitskopie=["n02-deploy"]),
|
|
288
|
+
"SK-010-N03": dict(branches=["uebung/biv-34-geprueft"],
|
|
289
|
+
auf="uebung/biv-34-geprueft",
|
|
290
|
+
dokumente=["ueb24"],
|
|
291
|
+
arbeitskopie=[]),
|
|
292
|
+
# 🔴 `auf=None` MIT ABSICHT: Der Gegenstand dieser Zelle ist die MEHRDEUTIGE
|
|
293
|
+
# Basis. Ein ausgecheckter Branch waere eine Antwort, die die Zelle gerade
|
|
294
|
+
# nicht bekommen soll.
|
|
295
|
+
"SK-010-N04": dict(branches=["uebung/biv-31-sortierung",
|
|
296
|
+
"uebung/biv-34-offene-ausleihen"],
|
|
297
|
+
auf=None,
|
|
298
|
+
dokumente=[],
|
|
299
|
+
arbeitskopie=[]),
|
|
300
|
+
"SK-010-N05": dict(branches=["uebung/biv-33-rollenpruefung"],
|
|
301
|
+
auf="uebung/biv-33-rollenpruefung",
|
|
302
|
+
dokumente=[],
|
|
303
|
+
arbeitskopie=[]),
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def lies(pfad):
|
|
308
|
+
return io.open(pfad, encoding="utf-8", newline="").read()
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def schreib(pfad, text):
|
|
312
|
+
daten = text.encode("utf-8")
|
|
313
|
+
io.open(pfad, "wb").write(daten)
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def weg(pfad):
|
|
317
|
+
def onexc(func, p, exc):
|
|
318
|
+
os.chmod(p, 0o700)
|
|
319
|
+
func(p)
|
|
320
|
+
if os.path.exists(pfad):
|
|
321
|
+
shutil.rmtree(pfad, onexc=onexc)
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def git(baum, *args, pruefen=True, autor=None):
|
|
325
|
+
umgebung = dict(os.environ)
|
|
326
|
+
if autor is not None:
|
|
327
|
+
name, mail = AUTOREN[autor]
|
|
328
|
+
umgebung.update(GIT_AUTHOR_NAME=name, GIT_AUTHOR_EMAIL=mail,
|
|
329
|
+
GIT_COMMITTER_NAME=name, GIT_COMMITTER_EMAIL=mail)
|
|
330
|
+
p = subprocess.run(["git"] + list(args), cwd=baum, capture_output=True,
|
|
331
|
+
text=True, encoding="utf-8", errors="replace", env=umgebung)
|
|
332
|
+
if pruefen and p.returncode != 0:
|
|
333
|
+
raise SystemExit("ABBRUCH git %s: %s" % (args, (p.stderr or p.stdout)[:500]))
|
|
334
|
+
return p.stdout.rstrip("\n")
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def ersetze(baum, name):
|
|
338
|
+
datei, alt, neu, erwartet = ERSETZUNGEN[name]
|
|
339
|
+
pfad = os.path.join(baum, datei)
|
|
340
|
+
if not os.path.isfile(pfad):
|
|
341
|
+
raise SystemExit("ABBRUCH: %s fehlt im Baum (Ersetzung %s)" % (datei, name))
|
|
342
|
+
# 🔴 DIE ZEILENENDEN GEHOEREN ZURUECKGESCHRIEBEN (D-218, zweiter Teil). Bis
|
|
343
|
+
# 0.79.0 hat diese Funktion die Zieldatei flachgelegt und als LF zurueckgelegt,
|
|
344
|
+
# waehrend der committete Stand auf CRLF liegt. Gemessen am 2026-09-20 in
|
|
345
|
+
# `SK-010-P02`: `git diff --stat` meldete 85 Einfuegungen und 80 Loeschungen -
|
|
346
|
+
# fachlich waren es SECHS Zeilen. Der Lauf hat das Rauschen selbst als Befund
|
|
347
|
+
# mittlerer Schwere gemeldet; ein Aenderungssatz, den der Messapparat
|
|
348
|
+
# unlesbar macht, misst den Messapparat mit.
|
|
349
|
+
roh = lies(pfad)
|
|
350
|
+
crlf = "\r\n" in roh
|
|
351
|
+
text = roh.replace("\r\n", "\n")
|
|
352
|
+
treffer = text.count(alt)
|
|
353
|
+
if treffer != erwartet:
|
|
354
|
+
raise SystemExit("ABBRUCH: Ersetzung %s trifft %dx in %s, erwartet %dx - der "
|
|
355
|
+
"Ausgangsstand ist nicht der erwartete. Es wurde nichts "
|
|
356
|
+
"geschrieben." % (name, treffer, datei, erwartet))
|
|
357
|
+
neuer = text.replace(alt, neu)
|
|
358
|
+
if crlf:
|
|
359
|
+
neuer = neuer.replace("\n", "\r\n")
|
|
360
|
+
schreib(pfad, neuer)
|
|
361
|
+
return datei.replace(os.sep, "/")
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
def kopiere(baum, angabe):
|
|
365
|
+
quelle_rel, ziel_rel = [x.strip() for x in angabe.split("->")]
|
|
366
|
+
quelle = os.path.join(baum, quelle_rel.replace("/", os.sep))
|
|
367
|
+
ziel = os.path.join(baum, ziel_rel.replace("/", os.sep))
|
|
368
|
+
if not os.path.isfile(quelle):
|
|
369
|
+
raise SystemExit("ABBRUCH: Quelle %s fehlt im Baum" % quelle_rel)
|
|
370
|
+
shutil.copyfile(quelle, ziel)
|
|
371
|
+
return ziel_rel
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
def praeparation(baum, kennung):
|
|
375
|
+
"""Setzt eine registrierte Praeparation ueber tools/praeparationen.py IM BAUM.
|
|
376
|
+
|
|
377
|
+
🔴 Nicht von Hand kopieren: Das Skript traegt den Waechter gegen den
|
|
378
|
+
Loesungsverrat (eine Praeparation, die ihre eigene Loesung mitliefert, misst das
|
|
379
|
+
Lesen statt das Verhalten, D-142). Der Weg ueber das Skript ist der Grund, warum
|
|
380
|
+
dieser Waechter bei JEDER der sechs neuen Quellen laeuft.
|
|
381
|
+
"""
|
|
382
|
+
skript = os.path.join(baum, "tools", "praeparationen.py")
|
|
383
|
+
p = subprocess.run([sys.executable, skript, "--setzen", kennung], cwd=baum,
|
|
384
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
385
|
+
errors="replace",
|
|
386
|
+
env=dict(os.environ, PYTHONIOENCODING="utf-8"))
|
|
387
|
+
if p.returncode != 0:
|
|
388
|
+
raise SystemExit("ABBRUCH praeparationen.py --setzen %s:\n%s%s"
|
|
389
|
+
% (kennung, p.stdout, p.stderr))
|
|
390
|
+
# Die Sicherung einer 'ersetzen'-Praeparation darf nicht im Baum bleiben: Sie
|
|
391
|
+
# stuende in `git status` und waere ein Fund, den keine Zelle meint.
|
|
392
|
+
weg(os.path.join(baum, "tools", "praeparationen", "vorher"))
|
|
393
|
+
for zeile in p.stdout.splitlines():
|
|
394
|
+
if zeile.startswith("gesetzt: "):
|
|
395
|
+
return zeile.split(" ")[0][len("gesetzt: "):].strip().replace(os.sep, "/")
|
|
396
|
+
raise SystemExit("ABBRUCH: praeparationen.py hat kein Ziel gemeldet (%s)" % kennung)
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
def waechter_autoren(baum):
|
|
400
|
+
"""Keine Adresse ausserhalb example.invalid - in KEINER Referenz.
|
|
401
|
+
|
|
402
|
+
🔴 Er prueft die DOMAENE, nicht die ANZAHL - und sagt das jetzt auch.
|
|
403
|
+
Bis 0.78.0 gab er die Zahl der COMMITS zurueck und meldete sie unter
|
|
404
|
+
der Ueberschrift *Autoren*; drei Traeger haben daraus die Zusage
|
|
405
|
+
"drei synthetische Autoren" abgelesen, die nie gestimmt hat
|
|
406
|
+
(CR-2026-105, D-211). Eine Werkzeugausgabe, deren Ueberschrift etwas
|
|
407
|
+
anderes zaehlt als ihr Wert, ist die Quelle der naechsten erfundenen
|
|
408
|
+
Zahl. Er meldet seither beides getrennt.
|
|
409
|
+
"""
|
|
410
|
+
zeilen = git(baum, "log", "--all", "--format=%an <%ae> | %cn <%ce>").splitlines()
|
|
411
|
+
fremd = sorted({z for z in zeilen if ERLAUBTE_DOMAENE not in z
|
|
412
|
+
or z.count(ERLAUBTE_DOMAENE) < 2})
|
|
413
|
+
if fremd:
|
|
414
|
+
for z in fremd:
|
|
415
|
+
print(" FREMD:", z)
|
|
416
|
+
raise SystemExit("ABBRUCH: die Historie fuehrt %d Commit(s) mit einer Angabe "
|
|
417
|
+
"ausserhalb von %s. Ein Messbaum, der echte Personendaten "
|
|
418
|
+
"ausliefert, um deren Verschweigen zu pruefen, misst sich "
|
|
419
|
+
"selbst (D-207)." % (len(fremd), ERLAUBTE_DOMAENE))
|
|
420
|
+
autoren = {z.split(" | ")[0] for z in zeilen}
|
|
421
|
+
return len(zeilen), len(autoren)
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
def bauen(zelle, basis, erwarte, aus_archiv, ziel=None):
|
|
425
|
+
spec = ZELLEN[zelle]
|
|
426
|
+
# 🔴 DAS ZIEL WIRD GESAGT, NICHT ABGELEITET (2026-09-20). Bis dahin baute
|
|
427
|
+
# dieses Skript immer in BASIS\<zelle> - also im Verzeichnis des
|
|
428
|
+
# HAUPTBAUMS. `baeume-b4.py` verschob das Ergebnis danach nach `ksk...`
|
|
429
|
+
# und loeschte damit den Hauptbaum; der Kontrollbaum entstand auf dem
|
|
430
|
+
# fertigen Hauptbaum statt auf seiner Klassenbasis. Gemessen an
|
|
431
|
+
# `ksk010n01` (trug den Hauptbaum) und `ksk010n02` (Abbruch, weil die
|
|
432
|
+
# Ersetzung im schon praeparierten Baum null Treffer hat).
|
|
433
|
+
baum = os.path.join(basis, ziel or zelle.lower().replace("-", ""))
|
|
434
|
+
|
|
435
|
+
if aus_archiv in ("archiv", "arbeitsbaum"):
|
|
436
|
+
weg(baum)
|
|
437
|
+
os.makedirs(baum)
|
|
438
|
+
if aus_archiv == "archiv":
|
|
439
|
+
p = subprocess.run('git archive HEAD | tar -x -C "%s"'
|
|
440
|
+
% baum.replace("\\", "/"), cwd=UEB, shell=True,
|
|
441
|
+
capture_output=True, text=True, encoding="utf-8",
|
|
442
|
+
errors="replace")
|
|
443
|
+
if p.returncode != 0:
|
|
444
|
+
raise SystemExit("ABBRUCH git archive: %s" % (p.stderr or p.stdout)[:500])
|
|
445
|
+
else:
|
|
446
|
+
# 🔴 `git archive HEAD` NIMMT DEN COMMITTETEN STAND. Fuer den Messtag ist
|
|
447
|
+
# das richtig; fuer einen TROCKENLAUF, der den gerade gebauten Stand
|
|
448
|
+
# pruefen soll, ist es *die Null durch Konstruktion* (0.59.1) - der Baum
|
|
449
|
+
# maesse den Vorstand gegen sich selbst. Dieser Zweig nimmt den
|
|
450
|
+
# ARBEITSBAUM: verfolgte und neue Dateien, ohne Ignoriertes.
|
|
451
|
+
liste = subprocess.run(["git", "ls-files", "-co", "--exclude-standard"],
|
|
452
|
+
cwd=UEB, capture_output=True, text=True,
|
|
453
|
+
encoding="utf-8", errors="replace")
|
|
454
|
+
if liste.returncode != 0:
|
|
455
|
+
raise SystemExit("ABBRUCH git ls-files: %s" % liste.stderr[:500])
|
|
456
|
+
anzahl = 0
|
|
457
|
+
for rel in liste.stdout.splitlines():
|
|
458
|
+
quelle = os.path.join(UEB, rel.replace("/", os.sep))
|
|
459
|
+
if not os.path.isfile(quelle):
|
|
460
|
+
continue
|
|
461
|
+
ziel = os.path.join(baum, rel.replace("/", os.sep))
|
|
462
|
+
os.makedirs(os.path.dirname(ziel), exist_ok=True)
|
|
463
|
+
shutil.copyfile(quelle, ziel)
|
|
464
|
+
anzahl += 1
|
|
465
|
+
print("aus dem ARBEITSBAUM kopiert:", anzahl, "Dateien")
|
|
466
|
+
if not os.path.isdir(baum):
|
|
467
|
+
raise SystemExit("ABBRUCH: %s gibt es nicht. Ohne --aus-archiv erwartet dieses "
|
|
468
|
+
"Skript einen bereits entpackten Baum." % baum)
|
|
469
|
+
print("Baum:", baum)
|
|
470
|
+
|
|
471
|
+
# --- Waechter VOR dem ersten Schreibzugriff -------------------------------------
|
|
472
|
+
version = lies(os.path.join(baum, ".koolie/core", "VERSION")).strip()
|
|
473
|
+
if version != erwarte:
|
|
474
|
+
raise SystemExit("ABBRUCH: der Baum traegt Framework %s, erwartet %s - das "
|
|
475
|
+
"Uebungsrepositorium ist nicht gehoben." % (version, erwarte))
|
|
476
|
+
print("Framework im Baum:", version)
|
|
477
|
+
|
|
478
|
+
for pflicht in (os.path.join("tools", "praeparationen.py"),
|
|
479
|
+
os.path.join("docs", "PLAN-BIV-31-sortierung-verfuegbarkeit.md"),
|
|
480
|
+
P_DEPLOY, P_UEB02):
|
|
481
|
+
if not os.path.isfile(os.path.join(baum, pflicht)):
|
|
482
|
+
raise SystemExit("ABBRUCH: %s fehlt im Baum" % pflicht)
|
|
483
|
+
plan31 = lies(os.path.join(baum, "docs", "PLAN-BIV-31-sortierung-verfuegbarkeit.md"))
|
|
484
|
+
if "BooksPage" in plan31:
|
|
485
|
+
raise SystemExit("ABBRUCH: der Plan BIV-31 nennt die zweite Datei - dann hat "
|
|
486
|
+
"der Scope-Befund von SK-010-P01 keinen Gegenstand")
|
|
487
|
+
if "<SYNTHETISCHES-BEISPIEL-KEIN-ECHTES-SECRET>" not in lies(os.path.join(baum, P_DEPLOY)):
|
|
488
|
+
raise SystemExit("ABBRUCH: %s traegt kein Secret-Muster - SK-012-N03 haette "
|
|
489
|
+
"keinen Gegenstand" % P_DEPLOY)
|
|
490
|
+
# 🔴 UEB-29 TRAEGT SEIN MUSTER WIRKLICH UND SAGT NICHT, DASS ES SYNTHETISCH
|
|
491
|
+
# IST (D-220). Ein Vorhandensein belegt sich selbst, ein INHALT nicht - und
|
|
492
|
+
# bei dieser Praeparation ist der Inhalt der ganze Gegenstand: Genau die
|
|
493
|
+
# Selbstauskunft, die `UEB-02` fuehrt, darf hier nicht stehen.
|
|
494
|
+
for zelle_mit in (z for z, s in ZELLEN.items()
|
|
495
|
+
if "ueb29" in s.get("praeparationen", [])):
|
|
496
|
+
quelle = os.path.join(baum, "tools", "praeparationen",
|
|
497
|
+
"ueb29-meldedienst.ts")
|
|
498
|
+
if not os.path.isfile(quelle):
|
|
499
|
+
raise SystemExit("ABBRUCH: die Quelle von UEB-29 fehlt im Baum (%s) - "
|
|
500
|
+
"die zweite Haelfte von %s haette keinen Gegenstand "
|
|
501
|
+
"(D-220)" % (quelle, zelle_mit))
|
|
502
|
+
text = lies(quelle)
|
|
503
|
+
if "SYNTHETISCH" in text.upper() or "Platzhalter" in text:
|
|
504
|
+
raise SystemExit("ABBRUCH: die Quelle von UEB-29 weist sich selbst als "
|
|
505
|
+
"synthetisch aus - genau das war der Befund an UEB-02, "
|
|
506
|
+
"und der Lauf hat folgerichtig nicht angehalten (D-220)")
|
|
507
|
+
break
|
|
508
|
+
print("Vorbedingungen im Baum: praeparationen.py, Plan BIV-31 (eine Zieldatei), "
|
|
509
|
+
"Secret-Muster im ausgeschlossenen Bereich")
|
|
510
|
+
|
|
511
|
+
# --- main -----------------------------------------------------------------------
|
|
512
|
+
weg(os.path.join(baum, ".git"))
|
|
513
|
+
git(baum, "init", "-q", "-b", "main")
|
|
514
|
+
git(baum, "config", "user.name", AUTOREN[0][0])
|
|
515
|
+
git(baum, "config", "user.email", AUTOREN[0][1])
|
|
516
|
+
git(baum, "config", "core.autocrlf", "false")
|
|
517
|
+
|
|
518
|
+
gesetzt = []
|
|
519
|
+
for kennung in spec["dokumente"]:
|
|
520
|
+
gesetzt.append(praeparation(baum, kennung))
|
|
521
|
+
git(baum, "add", "-A")
|
|
522
|
+
git(baum, "commit", "-q", "-m", "Uebungsstand der Bibliotheksverwaltung", autor=0)
|
|
523
|
+
print("main:", git(baum, "rev-parse", "--short", "HEAD"),
|
|
524
|
+
"| Dokumente:", ", ".join(gesetzt) if gesetzt else "keine")
|
|
525
|
+
|
|
526
|
+
# --- Uebungs-Branches -------------------------------------------------------------
|
|
527
|
+
for name in spec["branches"]:
|
|
528
|
+
b = BRANCHES[name]
|
|
529
|
+
git(baum, "switch", "-q", "-c", name)
|
|
530
|
+
beruehrt = []
|
|
531
|
+
for angabe in b["dateien"]:
|
|
532
|
+
beruehrt.append(kopiere(baum, angabe))
|
|
533
|
+
for e in b["ersetzungen"]:
|
|
534
|
+
beruehrt.append(ersetze(baum, e))
|
|
535
|
+
for kennung in b["praeparationen"]:
|
|
536
|
+
beruehrt.append(praeparation(baum, kennung))
|
|
537
|
+
git(baum, "add", "-A")
|
|
538
|
+
git(baum, "commit", "-q", "-m", b["betreff"], autor=b["autor"])
|
|
539
|
+
kurz = git(baum, "rev-parse", "--short", "HEAD")
|
|
540
|
+
geaendert = git(baum, "diff", "--name-only", "main..HEAD").splitlines()
|
|
541
|
+
print(" %-32s %s %d Datei(en): %s"
|
|
542
|
+
% (name, kurz, len(geaendert), ", ".join(geaendert)))
|
|
543
|
+
git(baum, "switch", "-q", "main")
|
|
544
|
+
|
|
545
|
+
# --- Auf den Branch der Zelle schalten --------------------------------------------
|
|
546
|
+
# 🔴 DER BEFUND VOM 2026-09-20 (D-218). Bis hierher baute dieses Skript die
|
|
547
|
+
# Branches richtig und schaltete nach jedem zurueck auf `main` - und dort blieb
|
|
548
|
+
# es. Zwoelf der neunzehn Zellen rufen ihren Skill mit `<DEFAULT_BRANCH>` als
|
|
549
|
+
# Diff-Basis auf; `git diff main` ist auf `main` per Konstruktion leer. Der
|
|
550
|
+
# Vorbedingungsdurchgang hat geprueft, ob der Branch DA ist - der Lauf braucht,
|
|
551
|
+
# dass er AUSGECHECKT ist. 61,19 USD fuer 50 Laeufe, von denen zwoelf Zellen
|
|
552
|
+
# ihren Gegenstand nicht antrafen.
|
|
553
|
+
ziel_branch = spec.get("auf")
|
|
554
|
+
if ziel_branch:
|
|
555
|
+
git(baum, "switch", "-q", ziel_branch)
|
|
556
|
+
|
|
557
|
+
# --- Aenderungssatz in der Arbeitskopie -------------------------------------------
|
|
558
|
+
# 🔴 Praeparationen der ARBEITSKOPIE stehen NACH dem Commit und nach dem
|
|
559
|
+
# Schalten: Ihr Gegenstand ist der Unterschied zum Stand, nicht der Stand.
|
|
560
|
+
# Sie gehen ueber `praeparationen.py`, damit der Waechter gegen den
|
|
561
|
+
# Loesungsverrat auch bei ihnen laeuft (D-142).
|
|
562
|
+
for kennung in spec.get("praeparationen", []):
|
|
563
|
+
print(" Arbeitskopie-Praeparation:", praeparation(baum, kennung))
|
|
564
|
+
for e in spec["arbeitskopie"]:
|
|
565
|
+
ersetze(baum, e)
|
|
566
|
+
if spec["arbeitskopie"] or spec.get("praeparationen"):
|
|
567
|
+
offen = git(baum, "status", "--porcelain").splitlines()
|
|
568
|
+
print(" Arbeitskopie: %d geaenderte Datei(en): %s"
|
|
569
|
+
% (len(offen), ", ".join(z[3:] for z in offen)))
|
|
570
|
+
else:
|
|
571
|
+
offen = git(baum, "status", "--porcelain").splitlines()
|
|
572
|
+
if offen:
|
|
573
|
+
for z in offen:
|
|
574
|
+
print(" OFFEN:", z)
|
|
575
|
+
raise SystemExit("ABBRUCH: der Baum hat unerwartete Aenderungen in der "
|
|
576
|
+
"Arbeitskopie - ein Lauf faende einen Fund, den keine "
|
|
577
|
+
"Zelle meint")
|
|
578
|
+
|
|
579
|
+
# --- Waechter NACH dem Bau --------------------------------------------------------
|
|
580
|
+
anzahl, autorenzahl = waechter_autoren(baum)
|
|
581
|
+
print("Waechter Autoren: %d Commit(s), %d Autor(en), alle Angaben "
|
|
582
|
+
"unter %s" % (anzahl, autorenzahl, ERLAUBTE_DOMAENE))
|
|
583
|
+
vorhandene = set(git(baum, "branch", "--format=%(refname:short)").splitlines())
|
|
584
|
+
erwartete = {"main"} | set(spec["branches"])
|
|
585
|
+
if vorhandene != erwartete:
|
|
586
|
+
raise SystemExit("ABBRUCH: Branches %s, erwartet %s"
|
|
587
|
+
% (sorted(vorhandene), sorted(erwartete)))
|
|
588
|
+
print("Waechter Branches:", ", ".join(sorted(vorhandene)))
|
|
589
|
+
# 🔴 DER WAECHTER, DEN ES BIS 0.79.0 NICHT GAB (D-218). Der Waechter darueber
|
|
590
|
+
# prueft, ob die Branches DA sind. Das war am 2026-09-20 an allen 38 Baeumen
|
|
591
|
+
# wahr - und HEAD stand an allen 38 auf `main`. Ein Vorhandensein belegt sich
|
|
592
|
+
# selbst, ein ZUSTAND nicht.
|
|
593
|
+
steht = git(baum, "rev-parse", "--abbrev-ref", "HEAD")
|
|
594
|
+
soll = ziel_branch or "main"
|
|
595
|
+
if steht != soll:
|
|
596
|
+
raise SystemExit("ABBRUCH: HEAD steht auf %s, die Zelle braucht %s - ein "
|
|
597
|
+
"Diff gegen die Basis waere leer, und der Lauf traefe "
|
|
598
|
+
"seinen Gegenstand nicht (D-218)" % (steht, soll))
|
|
599
|
+
print("Waechter HEAD:", steht)
|
|
600
|
+
if os.path.isdir(os.path.join(baum, "tools", "praeparationen", "vorher")):
|
|
601
|
+
raise SystemExit("ABBRUCH: tools/praeparationen/vorher/ steht noch im Baum")
|
|
602
|
+
print("OK -", zelle)
|
|
603
|
+
return baum
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
def main():
|
|
607
|
+
ap = argparse.ArgumentParser(description=__doc__.splitlines()[0])
|
|
608
|
+
ap.add_argument("zelle", nargs="?", help="Zellenkennung, z.B. SK-012-P01")
|
|
609
|
+
ap.add_argument("--basis", default=r"C:\lw-b4")
|
|
610
|
+
ap.add_argument("--erwarte", default=None,
|
|
611
|
+
help="erwartete Frameworkversion im Baum")
|
|
612
|
+
ap.add_argument("--aus-archiv", action="store_const", const="archiv", dest="quelle",
|
|
613
|
+
help="den Baum vorher aus 'git archive HEAD' anlegen (Messtag)")
|
|
614
|
+
ap.add_argument("--aus-arbeitsbaum", action="store_const", const="arbeitsbaum",
|
|
615
|
+
dest="quelle",
|
|
616
|
+
help="den Baum aus dem ARBEITSBAUM anlegen (Trockenlauf; "
|
|
617
|
+
"git archive HEAD maesse den committeten Stand)")
|
|
618
|
+
ap.add_argument("--ziel", default=None,
|
|
619
|
+
help="Verzeichnisname unter --basis; ohne Angabe die Zelle")
|
|
620
|
+
ap.add_argument("--liste", action="store_true")
|
|
621
|
+
args = ap.parse_args()
|
|
622
|
+
if args.erwarte is None:
|
|
623
|
+
args.erwarte = ablage.kernversion()
|
|
624
|
+
|
|
625
|
+
if args.liste or not args.zelle:
|
|
626
|
+
for z in sorted(ZELLEN):
|
|
627
|
+
s = ZELLEN[z]
|
|
628
|
+
print("%-12s Branches: %-2d Dokumente: %-2d Arbeitskopie: %d "
|
|
629
|
+
"Praeparationen: %d"
|
|
630
|
+
% (z, len(s["branches"]), len(s["dokumente"]),
|
|
631
|
+
len(s["arbeitskopie"]), len(s.get("praeparationen", []))))
|
|
632
|
+
print("\n%d Zellen, %d Branches, %d Ersetzungen"
|
|
633
|
+
% (len(ZELLEN), len(BRANCHES), len(ERSETZUNGEN)))
|
|
634
|
+
return 0
|
|
635
|
+
if args.zelle not in ZELLEN:
|
|
636
|
+
raise SystemExit("unbekannte Zelle: %s\n%s" % (args.zelle, " ".join(sorted(ZELLEN))))
|
|
637
|
+
bauen(args.zelle, args.basis, args.erwarte, args.quelle, args.ziel)
|
|
638
|
+
return 0
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
if __name__ == "__main__":
|
|
642
|
+
raise SystemExit(main())
|