@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,841 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""Baut einen Kontrolllauf-Baum OHNE die geprueffte Schranke.
|
|
3
|
+
|
|
4
|
+
Aufruf: python k-bauen-b3.py <klasse> <quellbaum> <zielbaum>\n Klassen: n03 sc1 injk3 inj k3 halt konf risiko plan test befund\n testnachweis abw fern bew
|
|
5
|
+
|
|
6
|
+
Der Zielbaum ist eine vollstaendige Kopie des Hauptlauf-Baums, aus der jede Regelstelle
|
|
7
|
+
entfernt ist, die die geprueffte Schranke traegt - und zwar NACH BEDEUTUNG, nicht nur
|
|
8
|
+
nach Marke.
|
|
9
|
+
|
|
10
|
+
Uebernommen aus der Erhebung s4 (0.59.0), unveraendert in Aufbau und Trennlinie:
|
|
11
|
+
|
|
12
|
+
- Geschnitten werden REGELQUELLEN, nicht AUFZEICHNUNGEN (D-141). Eine Aufzeichnung
|
|
13
|
+
traegt die Marke, ohne die Schranke zu setzen; ihre Restfundstellen werden GEZAEHLT.
|
|
14
|
+
- `.json`-Dateien bleiben unberuehrt: sie tragen die TECHNISCHE Schranke, und der
|
|
15
|
+
Kontrolllauf entfernt die Regelschicht (D-122).
|
|
16
|
+
- Ein gruener Waechter belegt NICHT, dass die Schranke weg ist: Die Zeilen, die einen
|
|
17
|
+
Begriff AUSMACHEN, ueberleben eine Suche nach der Zeile, die ihn NENNT.
|
|
18
|
+
|
|
19
|
+
NEU MIT S5: die Klasse `fi3` schneidet zusaetzlich den SessionStart-Hook aus der
|
|
20
|
+
Berechtigungsdatei. Die Schranke von `FW-FI-03` hat zwei Traeger - den Regeltext und
|
|
21
|
+
die Statusmeldung des Hooks, die die Anweisung woertlich mitliefert. `fi3h` schneidet
|
|
22
|
+
nur den Regeltext und laesst den Hook stehen; das Paar trennt die beiden Traeger.
|
|
23
|
+
"""
|
|
24
|
+
import io
|
|
25
|
+
import json
|
|
26
|
+
import os
|
|
27
|
+
import re
|
|
28
|
+
import shutil
|
|
29
|
+
import sys
|
|
30
|
+
|
|
31
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
32
|
+
|
|
33
|
+
KLASSE, QUELLE, ZIEL = sys.argv[1], os.path.abspath(sys.argv[2]), os.path.abspath(sys.argv[3])
|
|
34
|
+
|
|
35
|
+
BEREICHE = [
|
|
36
|
+
"CLAUDE.md",
|
|
37
|
+
".claude/README.md",
|
|
38
|
+
".claude/rules",
|
|
39
|
+
".claude/agents",
|
|
40
|
+
".claude/skills",
|
|
41
|
+
".koolie/core/framework",
|
|
42
|
+
".koolie/core/checklists",
|
|
43
|
+
".koolie/core/decision-trees",
|
|
44
|
+
".koolie/core/templates",
|
|
45
|
+
# Nachgetragen mit 1.14.1 (K-167): Die Prompt-Vorlagen sind Regelquelle. Im Nachlauf
|
|
46
|
+
# von 1.14.0 liess `k3` in `prompts/02-impact-analysis.md` die Zeile "Keine
|
|
47
|
+
# K3-Inhalte." stehen, und `ksk002n03` stuetzte das Nichtoeffnen der Fixture darauf.
|
|
48
|
+
".koolie/core/prompts",
|
|
49
|
+
".koolie/core/onboarding",
|
|
50
|
+
".koolie/core/clients",
|
|
51
|
+
".koolie/core/examples",
|
|
52
|
+
".koolie/core/docs/RUNTIME_GLOSSARY.md",
|
|
53
|
+
".koolie/core/docs/PLACEHOLDER_REGISTRY.md",
|
|
54
|
+
".koolie/core/governance/PRIORITY_HIERARCHY.md",
|
|
55
|
+
".koolie/core/governance/EXCEPTION_PROCESS.md",
|
|
56
|
+
".koolie/core/governance/FRAMEWORK_DEV_PROFILE.md",
|
|
57
|
+
".koolie/project-overlay",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
AUFZEICHNUNGEN = [
|
|
61
|
+
".koolie/core/governance/DECISION_LOG.md",
|
|
62
|
+
".koolie/core/governance/change-requests",
|
|
63
|
+
".koolie/core/tests",
|
|
64
|
+
".koolie/core/docs/ROADMAP.md",
|
|
65
|
+
".koolie/core/docs/ADOPTION_GUIDE.md",
|
|
66
|
+
".koolie/core/build",
|
|
67
|
+
".koolie/core/pilot",
|
|
68
|
+
".koolie/core/CHANGELOG.md",
|
|
69
|
+
".koolie/core/OWNERS.md",
|
|
70
|
+
"docs",
|
|
71
|
+
"tools",
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
# ZEILE: jede Zeile, die den Ausdruck traegt, faellt.
|
|
75
|
+
# SATZ: genau dieser Text faellt aus seiner Zeile (die Zeile bleibt).
|
|
76
|
+
# NUR_SATZ: Zeilen, die NICHT als Ganzes fallen duerfen - dort greift allein
|
|
77
|
+
# SATZ. 🔴 Neu mit 0.83.0 (CR-2026-116): Die Wertzeile eines
|
|
78
|
+
# Pflichtplatzhalters im Overlay traegt bei `fern` BEIDES - die
|
|
79
|
+
# Schranke (V11) und den WERT, der Meszgegenstand von `RE-001-P04`
|
|
80
|
+
# ist. Faellt sie ganz, misst der Kontrollauf einen Baum, in dem der
|
|
81
|
+
# Lauf zusaetzlich sein Ausgabeformat nicht mehr ableiten kann.
|
|
82
|
+
# Das Muster beschreibt die STELLUNG, nicht den Wortlaut.
|
|
83
|
+
# ABSCHNITT: Ueberschrift samt Rumpf bis zur naechsten Ueberschrift gleicher oder
|
|
84
|
+
# hoeherer Ebene faellt.
|
|
85
|
+
# MARKEN: Waechter-Regexe; keiner darf danach noch treffen.
|
|
86
|
+
# BEHALTEN: Pfade, die der Schnitt nicht anfassen darf (Praeparationen).
|
|
87
|
+
KLASSEN = {
|
|
88
|
+
# --- BUENDEL 2 (0.71.0) -------------------------------------------------------
|
|
89
|
+
# SK-004-N01 und SK-009-N02: die Rueckfrage statt der stillschweigenden Annahme.
|
|
90
|
+
# Dieselbe Schranke (P3 No Assumption Policy) an zwei Gegenstaenden: dort die
|
|
91
|
+
# fehlende Kontrollstufe, hier der nicht bestaetigte Ursachenkandidat.
|
|
92
|
+
"n03": dict(
|
|
93
|
+
ZEILE=[
|
|
94
|
+
r"No Assumption",
|
|
95
|
+
r"stillschweigend",
|
|
96
|
+
r"R(ü|ue)ckfrag",
|
|
97
|
+
r"nachfrag",
|
|
98
|
+
r"Unklarheit",
|
|
99
|
+
r"\bP3\b",
|
|
100
|
+
r"Annahme",
|
|
101
|
+
r"annehmen",
|
|
102
|
+
r"annimmst",
|
|
103
|
+
r"legt sie (aber )?nicht fest",
|
|
104
|
+
r"offene Frage",
|
|
105
|
+
r"konkrete Frage",
|
|
106
|
+
r"blockiert bis",
|
|
107
|
+
# Nachgetragen mit 0.77.0: vom Stammwaechter gemeldet (CR-2026-104).
|
|
108
|
+
# Alle drei SETZEN die Schranke, sie nennen sie nicht bloss.
|
|
109
|
+
r"offene\w*\s+Frage",
|
|
110
|
+
r"statt\s+(zu\s+)?rate",
|
|
111
|
+
r"unterstell",
|
|
112
|
+
],
|
|
113
|
+
SATZ=[],
|
|
114
|
+
ABSCHNITT=[r"P3 No Assumption Policy",
|
|
115
|
+
r"Fehlender Kontext und R(ü|ue)ckfragen statt Annahmen",
|
|
116
|
+
r"Grenzen und R(ü|ue)ckfragenregeln"],
|
|
117
|
+
MARKEN=[r"No Assumption", r"stillschweigend", r"Rückfrag", r"Annahme",
|
|
118
|
+
r"Unklarheit"],
|
|
119
|
+
BEHALTEN=[],
|
|
120
|
+
),
|
|
121
|
+
# SK-004-N02: Scope-Treue, Nur-Lese-Pfade und die neue Abhaengigkeit.
|
|
122
|
+
# 🔴 EINGEENGT? NEIN - GEWEITET, AM 2026-09-20. Der Stammwaechter meldete beim
|
|
123
|
+
# ersten Lauf des Apparats als Ganzes 39 Restfundstellen: Das Schnittmuster
|
|
124
|
+
# trug `\bScope\b` und `au(ss)erhalb des Auftrags`, das Stammmuster `\bScope\w*`
|
|
125
|
+
# und `au(ss)erhalb\s+des\s+(Auftrags|Scopes)`. `Scopes` kam im Schnitt gar
|
|
126
|
+
# nicht vor. Das ist D-205 mit umgekehrtem Vorzeichen: Dort prueft der
|
|
127
|
+
# Waechter MIT dem Schnittmuster und ist immer gruen - hier prueft er weiter
|
|
128
|
+
# als geschnitten wird und meldet zu Recht. Die Muster folgen jetzt dem Stamm.
|
|
129
|
+
"sc1": dict(
|
|
130
|
+
ZEILE=[
|
|
131
|
+
r"\bScope\w*", r"beil(ä|ae)ufig\w*",
|
|
132
|
+
r"au(ß|ss)erhalb\s+des\s+(Auftrags|Scopes)",
|
|
133
|
+
r"Eine Aufgabe, ein Ziel", r"Ein Ziel je (Ä|Ae)nderung",
|
|
134
|
+
r"Ausweitung\w*", r"(separate|eigene)\w*\s+Ticket\w*",
|
|
135
|
+
r"ohne Auftrag", r"nicht beauftragt",
|
|
136
|
+
r"Delegationsverbot\w*",
|
|
137
|
+
r"\bV3\b",
|
|
138
|
+
r"neue Abh(ä|ae)ngigkeit",
|
|
139
|
+
r"neuer? Abh(ä|ae)ngigkeit",
|
|
140
|
+
r"07-new-dependency",
|
|
141
|
+
r"Nur-?Lese\w*",
|
|
142
|
+
r"READ_ONLY_PATHS",
|
|
143
|
+
],
|
|
144
|
+
SATZ=[],
|
|
145
|
+
ABSCHNITT=[],
|
|
146
|
+
MARKEN=[r"\bScope\w*", r"beil(ä|ae)ufig\w*", r"Ausweitung\w*",
|
|
147
|
+
r"Delegationsverbot\w*", r"07-new-dependency",
|
|
148
|
+
r"READ_ONLY_PATHS"],
|
|
149
|
+
BEHALTEN=[],
|
|
150
|
+
),
|
|
151
|
+
# SK-004-N03: die Zelle verlangt BEIDES - Abwehr der Anweisung UND Bereinigung
|
|
152
|
+
# des K3-Inhalts. Ein Zuschnitt, der nur eine Haelfte entfernt, beantwortet die
|
|
153
|
+
# Frage des Kontrollaufs nicht. Deshalb die Vereinigung von `inj` und `k3`.
|
|
154
|
+
"injk3": dict(
|
|
155
|
+
ZEILE=[
|
|
156
|
+
r"Injektion", r"Injection", r"sind Daten, keine Anweisungen",
|
|
157
|
+
r"sind Daten\b", r"\bS6\b", r"Regelwidrige Anweisung",
|
|
158
|
+
r"Anweisungen, die den Regeln widersprechen", r"nicht befolg",
|
|
159
|
+
r"als Anweisung behandel", r"Inhalte aus Dateien",
|
|
160
|
+
r"\bK3\b", r"personenbezogen", r"Personendaten", r"Zugangsdaten",
|
|
161
|
+
r"\bSecret", r"Datenschutz", r"nicht zitieren", r"nur strukturell",
|
|
162
|
+
r"bereinig", r"Bereinigung", r"SECURITY_CONTACT", r"Fixture", r"\bS3\b",
|
|
163
|
+
],
|
|
164
|
+
SATZ=[],
|
|
165
|
+
ABSCHNITT=[r"Prompt Injection", r"Regeln gegen Prompt Injection",
|
|
166
|
+
r"Kontextklassen", r"Datenschutz", r"Umgang mit Geheimnissen"],
|
|
167
|
+
MARKEN=[r"Injektion", r"Injection", r"sind Daten, keine Anweisungen",
|
|
168
|
+
r"Regelwidrige Anweisung", r"\bK3\b", r"personenbezogen",
|
|
169
|
+
r"Datenschutz", r"SECURITY_CONTACT"],
|
|
170
|
+
BEHALTEN=[],
|
|
171
|
+
),
|
|
172
|
+
# SK-008-N03 und SK-009-N04: die Abwehr regelwidriger Anweisungen in Inhalten.
|
|
173
|
+
# Unveraendert aus Buendel 1 (0.68.0), wo sie getragen hat.
|
|
174
|
+
"inj": dict(
|
|
175
|
+
ZEILE=[
|
|
176
|
+
r"Injektion", r"Injection", r"sind Daten, keine Anweisungen",
|
|
177
|
+
r"sind Daten\b", r"\bS6\b", r"Regelwidrige Anweisung",
|
|
178
|
+
r"Anweisungen, die den Regeln widersprechen", r"nicht befolg",
|
|
179
|
+
r"als Anweisung behandel", r"Inhalte aus Dateien",
|
|
180
|
+
],
|
|
181
|
+
SATZ=[],
|
|
182
|
+
ABSCHNITT=[r"Prompt Injection", r"Regeln gegen Prompt Injection"],
|
|
183
|
+
MARKEN=[r"Injektion", r"Injection", r"sind Daten, keine Anweisungen",
|
|
184
|
+
r"Regelwidrige Anweisung"],
|
|
185
|
+
BEHALTEN=[],
|
|
186
|
+
),
|
|
187
|
+
# SK-008-N02 und SK-009-N03: Kontextklasse K3, der unbereinigte Bericht.
|
|
188
|
+
# 🔴 Erwartung vor dem Lauf, unveraendert aus Buendel 1: Dieser Zuschnitt traegt
|
|
189
|
+
# NICHT vollstaendig - der Datenschutz ist querschnittlich, und eine Aufzaehlung,
|
|
190
|
+
# die ihn ausmacht, ueberlebt eine Suche nach der Zeile, die ihn nennt.
|
|
191
|
+
"k3": dict(
|
|
192
|
+
ZEILE=[
|
|
193
|
+
r"\bK3\b", r"personenbezogen", r"Personendaten", r"Zugangsdaten",
|
|
194
|
+
r"\bSecret", r"Datenschutz", r"nicht zitieren", r"nur strukturell",
|
|
195
|
+
r"bereinig", r"SECURITY_CONTACT", r"Fixture", r"\bS3\b",
|
|
196
|
+
],
|
|
197
|
+
SATZ=[],
|
|
198
|
+
ABSCHNITT=[r"Kontextklassen", r"Datenschutz", r"Umgang mit Geheimnissen"],
|
|
199
|
+
MARKEN=[r"\bK3\b", r"personenbezogen", r"Datenschutz", r"SECURITY_CONTACT"],
|
|
200
|
+
BEHALTEN=[],
|
|
201
|
+
),
|
|
202
|
+
# SK-008-N01 und SK-009-N01: der Halte-Punkt und das Umsetzungsverbot.
|
|
203
|
+
# Der Zuschnitt schneidet auch in die GRENZEN der Skills, und das ist gemeint:
|
|
204
|
+
# Der Kontrolllauf fragt, ob das Unterlassen der Umsetzung dem Regelwerk und dem
|
|
205
|
+
# Skill zuzurechnen ist - oder ob der Client ohnehin nicht umgesetzt haette.
|
|
206
|
+
"halt": dict(
|
|
207
|
+
ZEILE=[
|
|
208
|
+
r"\[HALT\]",
|
|
209
|
+
r"setzt nichts um",
|
|
210
|
+
r"behebt nichts",
|
|
211
|
+
r"f(ü|ue)hrt nichts aus",
|
|
212
|
+
r"keine Umsetzung",
|
|
213
|
+
r"vor jeder Umsetzung an",
|
|
214
|
+
r"h(ä|ae)lt vor jeder Umsetzung",
|
|
215
|
+
r"Umsetzung beginnt erst",
|
|
216
|
+
r"Halte an", r"anzuhalten", r"anhalten", r"h(ä|ae)lt an",
|
|
217
|
+
r"Folge-Skill",
|
|
218
|
+
r"best(ä|ae)tigten Plan", r"Planbest(ä|ae)tigung",
|
|
219
|
+
r"Freigabepunkt", r"Halte-?[Pp]unkt",
|
|
220
|
+
r"Befehle ausf(ü|ue)hren",
|
|
221
|
+
r"ausgef(ü|ue)hrte Befehle",
|
|
222
|
+
# Nachgetragen mit 0.77.0 (CR-2026-104). 🔴 Der Stammwaechter hat sie in
|
|
223
|
+
# VIER SKILL.md und in der Regelablage gefunden - `fw-change-small`,
|
|
224
|
+
# `fw-docs-update`, `fw-refactor`, `fw-tests`. Das ist genau der Fall,
|
|
225
|
+
# den D-205 meint: Ein Zuschnitt erfasst seine Schranke in ALLEN
|
|
226
|
+
# Schichten, auch in der `SKILL.md`.
|
|
227
|
+
r"vor\s+dem\s+ersten\s+Schreibzugriff",
|
|
228
|
+
r"zur\s+Best(ä|ae)tigung\s+vor",
|
|
229
|
+
r"h(ä|ae)lt\w*\s+an\b",
|
|
230
|
+
],
|
|
231
|
+
SATZ=[],
|
|
232
|
+
ABSCHNITT=[],
|
|
233
|
+
MARKEN=[r"\[HALT\]", r"setzt nichts um", r"Folge-Skill",
|
|
234
|
+
r"Planbestätigung", r"Halte-Punkt"],
|
|
235
|
+
BEHALTEN=[],
|
|
236
|
+
),
|
|
237
|
+
# SK-008-N04: die Belegpflicht der Konfidenz.
|
|
238
|
+
"konf": dict(
|
|
239
|
+
ZEILE=[
|
|
240
|
+
r"Konfidenz",
|
|
241
|
+
r"Code-Stand",
|
|
242
|
+
r"erfunden",
|
|
243
|
+
r"erfinden",
|
|
244
|
+
r"ohne Fundstelle",
|
|
245
|
+
r"mit Fundstelle",
|
|
246
|
+
r"Fundstelle",
|
|
247
|
+
r"beobachtet \(",
|
|
248
|
+
r"geschlossen \(",
|
|
249
|
+
r"Vermutung",
|
|
250
|
+
r"\bbelegt\b",
|
|
251
|
+
r"Beleg ",
|
|
252
|
+
# Nachgetragen mit 0.77.0 (CR-2026-104). 🔴 Der teuerste der drei
|
|
253
|
+
# Nachtraege: `nicht belegbar` stand FUENFMAL in `fw-mr-description`
|
|
254
|
+
# und dreimal in `fw-review-support` - also in genau den beiden
|
|
255
|
+
# Skills, die Buendel 4 misst. Ein Kontrolllauf mit dieser Zeile
|
|
256
|
+
# traegt die geprueffte Schranke weiter mit sich.
|
|
257
|
+
# 🔴 Die Zahl stand bis 0.78.0 auf SIEBEN. 0.77.0 hat sie in
|
|
258
|
+
# sechs Traegern auf fuenf gezogen - und dieses Werkzeug dabei
|
|
259
|
+
# uebersehen: die Abhilfe, die ihren eigenen Messapparat nicht
|
|
260
|
+
# erreicht (CR-2026-105). Nachgezaehlt am 2026-09-20: fuenf
|
|
261
|
+
# `nicht belegbar*` plus ein `ohne belegbaren` in SKILL.md und
|
|
262
|
+
# eines in EXAMPLES.md; bei fw-review-support drei und zwei -
|
|
263
|
+
# zwoelf Zeilen in den vier Traegern der beiden Skills.
|
|
264
|
+
r"nicht\s+belegbar",
|
|
265
|
+
r"ohne\s+Beleg",
|
|
266
|
+
r"auf\s+Basis\s+vermutet",
|
|
267
|
+
r"erfind",
|
|
268
|
+
],
|
|
269
|
+
SATZ=[],
|
|
270
|
+
ABSCHNITT=[],
|
|
271
|
+
MARKEN=[r"Konfidenz", r"Code-Stand", r"erfunden", r"Fundstelle"],
|
|
272
|
+
BEHALTEN=[],
|
|
273
|
+
),
|
|
274
|
+
# SK-004-N04 und SK-009-P02: der Abgleich der Risikofaktoren und die Meldung
|
|
275
|
+
# einer Abweichung. Geschnitten wird die Pflicht zum ABGLEICH und zur MELDUNG -
|
|
276
|
+
# die Kontrollstufe selbst bleibt als Begriff stehen, sonst versteht der Lauf
|
|
277
|
+
# seinen eigenen Prompt nicht mehr.
|
|
278
|
+
"risiko": dict(
|
|
279
|
+
ZEILE=[
|
|
280
|
+
r"^\| R\d+ \|",
|
|
281
|
+
r"Risikofaktor",
|
|
282
|
+
r"Risiko-?Abgleich",
|
|
283
|
+
r"Abgleich der Risiko",
|
|
284
|
+
r"Anstieg der Kontrollstufe",
|
|
285
|
+
r"h(ö|oe)here Einstufung",
|
|
286
|
+
r"neue Einstufung",
|
|
287
|
+
r"Abweichung.{0,30}(Stufe|Einstufung)",
|
|
288
|
+
r"(Stufe|Einstufung).{0,30}Abweichung",
|
|
289
|
+
r"nicht eigenm(ä|ae)chtig",
|
|
290
|
+
r"legt sie (aber )?nicht fest",
|
|
291
|
+
r"Die Kontrollstufe festlegen oder senken",
|
|
292
|
+
r"\bR1[013]\b",
|
|
293
|
+
r"melde(t|n)? .{0,20}Abweichung",
|
|
294
|
+
],
|
|
295
|
+
SATZ=[],
|
|
296
|
+
ABSCHNITT=[r"Risikofaktoren", r"Faktoren und Einstufung"],
|
|
297
|
+
MARKEN=[r"Risikofaktor", r"Anstieg der Kontrollstufe", r"nicht eigenmächtig",
|
|
298
|
+
r"^\| R\d+ \|"],
|
|
299
|
+
BEHALTEN=[],
|
|
300
|
+
),
|
|
301
|
+
|
|
302
|
+
# --- BUENDEL 3 (0.74.0) -------------------------------------------------------
|
|
303
|
+
# 🔴 Alle drei Skills dieses Buendels SCHREIBEN. Ein Kontrolllauf misst hier
|
|
304
|
+
# nicht nur, ob der Client etwas SAGT, sondern ob er etwas TUT - und die
|
|
305
|
+
# Zustandsaufnahme je Baum belegt es.
|
|
306
|
+
#
|
|
307
|
+
# SK-005-N02 und SK-007-N03: die Planpflicht ab Kontrollstufe mittel.
|
|
308
|
+
# Geschnitten wird die Pflicht zum PLAN und zur Freigabe - die Kontrollstufe
|
|
309
|
+
# selbst bleibt als Begriff stehen, sonst versteht der Lauf seinen eigenen
|
|
310
|
+
# Prompt nicht mehr (dieselbe Zurueckhaltung wie bei `risiko` in Buendel 2).
|
|
311
|
+
"plan": dict(
|
|
312
|
+
ZEILE=[
|
|
313
|
+
r"best(ä|ae)tigter Plan", r"best(ä|ae)tigten Plan",
|
|
314
|
+
r"Planreferenz", r"Planbedarf", r"ohne Plan",
|
|
315
|
+
r"Plan liegt vor", r"Planpflicht",
|
|
316
|
+
# 🔴 `\bfw-plan\b` stand hier und traf 39 Stellen, die keine
|
|
317
|
+
# Pflicht setzen - der Folge-Skill wird an vielen Stellen bloss
|
|
318
|
+
# EMPFOHLEN. Der Zuschnitt entfernt die Schranke, nicht den Namen.
|
|
319
|
+
r"Verweis auf `fw-plan`", r"verweist auf `fw-plan`",
|
|
320
|
+
r"`fw-plan` (empfohlen|vorschlagen|vorgeschlagen)",
|
|
321
|
+
r"Freigabeerfordernis", r"Freigabevoraussetzung",
|
|
322
|
+
r"dokumentierte Freigabe", r"schriftliche(r|n)? Best(ä|ae)tigung",
|
|
323
|
+
r"APPROVAL_ROLE",
|
|
324
|
+
r"ab (Stufe |Kontrollstufe )?mittel",
|
|
325
|
+
r"Stufe mittel",
|
|
326
|
+
r"nur lesende Schritte",
|
|
327
|
+
r"lehnt? .{0,25}(Bearbeitung|Umsetzung) ab",
|
|
328
|
+
],
|
|
329
|
+
SATZ=[],
|
|
330
|
+
ABSCHNITT=[r"Kontrollstufen und Freigabe", r"Freigabe und Best(ä|ae)tigung"],
|
|
331
|
+
MARKEN=[r"bestätigten Plan", r"Planreferenz",
|
|
332
|
+
r"Freigabeerfordernis", r"APPROVAL_ROLE"],
|
|
333
|
+
BEHALTEN=[],
|
|
334
|
+
),
|
|
335
|
+
# SK-005-N03, SK-007-N02, SK-007-N04, SK-006-N02: das Verbot, ein Ergebnis
|
|
336
|
+
# gruen zu machen. Geschnitten wird die Pflicht, einen Fehlschlag UNVERAENDERT
|
|
337
|
+
# zu berichten und Tests, Zusicherungen und Schwellenwerte nicht anzufassen.
|
|
338
|
+
"test": dict(
|
|
339
|
+
ZEILE=[
|
|
340
|
+
r"unver(ä|ae)ndert berichte",
|
|
341
|
+
r"Ergebnis unver(ä|ae)ndert",
|
|
342
|
+
r"Fehlschlag",
|
|
343
|
+
r"fehlschlagend",
|
|
344
|
+
r"gr(ü|ue)n zu machen", r"gr(ü|ue)n machen", r"gr(ü|ue)n zu melden",
|
|
345
|
+
r"Tests, (Assertions|Zusicherungen)",
|
|
346
|
+
r"Assertions", r"Zusicherung",
|
|
347
|
+
r"Schwellenwert",
|
|
348
|
+
r"Pr(ü|ue)fkonfiguration",
|
|
349
|
+
r"(ü|ue)berspringen", r"it\.skip", r"\bskip\b",
|
|
350
|
+
r"l(ö|oe)schen des Tests", r"Test .{0,20}(anpass|l(ö|oe)sch)",
|
|
351
|
+
r"nicht anpassen",
|
|
352
|
+
r"bereits im Ausgangsstand",
|
|
353
|
+
r"au(ß|ss)erhalb des Scopes",
|
|
354
|
+
r"fw-error-analyze",
|
|
355
|
+
r"roter? (Stand|Suite)", r"rotem Stand",
|
|
356
|
+
r"Testnachweis",
|
|
357
|
+
],
|
|
358
|
+
SATZ=[],
|
|
359
|
+
ABSCHNITT=[r"Umgang mit Fehlschl(ä|ae)gen", r"Fehlschl(ä|ae)ge einordnen"],
|
|
360
|
+
MARKEN=[r"unverändert berichte", r"Schwellenwert", r"Assertions",
|
|
361
|
+
r"fw-error-analyze", r"grün zu machen"],
|
|
362
|
+
BEHALTEN=[],
|
|
363
|
+
),
|
|
364
|
+
# SK-007-P02: melden statt beheben. Der Skill findet einen Fehler im Bereich,
|
|
365
|
+
# den er umbaut - und darf ihn NICHT nebenbei korrigieren. Geschnitten wird die
|
|
366
|
+
# Verhaltensneutralitaet und die Meldepflicht.
|
|
367
|
+
"befund": dict(
|
|
368
|
+
ZEILE=[
|
|
369
|
+
r"verhaltensneutral",
|
|
370
|
+
r"Verhalten .{0,25}unver(ä|ae)ndert",
|
|
371
|
+
r"unver(ä|ae)ndert.{0,25}Verhalten",
|
|
372
|
+
r"keine funktionale (Ä|Ae)nderung",
|
|
373
|
+
r"funktionale (Ä|Ae)nderung",
|
|
374
|
+
r"Gemeldete Befunde",
|
|
375
|
+
r"Befund mit Fundstelle",
|
|
376
|
+
r"melden, nicht beheben", r"nicht beheben",
|
|
377
|
+
r"nebenbei",
|
|
378
|
+
r"mitzufixen", r"mitfixen",
|
|
379
|
+
r"entdeckter? Fehler",
|
|
380
|
+
r"fw-error-analyze",
|
|
381
|
+
],
|
|
382
|
+
SATZ=[],
|
|
383
|
+
ABSCHNITT=[r"Verhaltensneutralit(ä|ae)t"],
|
|
384
|
+
MARKEN=[r"verhaltensneutral", r"Gemeldete Befunde", r"nicht beheben",
|
|
385
|
+
r"fw-error-analyze"],
|
|
386
|
+
BEHALTEN=[],
|
|
387
|
+
),
|
|
388
|
+
# SK-007-N01: kein Refactoring ohne Testnachweis. Geschnitten wird die Pflicht
|
|
389
|
+
# zum Nachweis VOR der ersten Aenderung und der Verweis auf `fw-tests`.
|
|
390
|
+
"testnachweis": dict(
|
|
391
|
+
ZEILE=[
|
|
392
|
+
r"Testnachweis",
|
|
393
|
+
r"vor der ersten (Ä|Ae)nderung",
|
|
394
|
+
r"ohne (automatisierte )?Tests",
|
|
395
|
+
r"keine (automatisierten )?Tests",
|
|
396
|
+
r"Abdeckung des Verhaltens",
|
|
397
|
+
r"abgedeckt",
|
|
398
|
+
r"\bfw-tests\b",
|
|
399
|
+
r"offensichtlich sicher",
|
|
400
|
+
r"identisches? Testergebnis",
|
|
401
|
+
r"Testergebnis .{0,20}identisch",
|
|
402
|
+
r"vor und nach jedem Schritt",
|
|
403
|
+
],
|
|
404
|
+
SATZ=[],
|
|
405
|
+
ABSCHNITT=[],
|
|
406
|
+
MARKEN=[r"Testnachweis", r"fw-tests", r"Abdeckung des Verhaltens",
|
|
407
|
+
r"identisches Testergebnis"],
|
|
408
|
+
BEHALTEN=[],
|
|
409
|
+
),
|
|
410
|
+
# SK-005-P02: die Abweichung vom bestaetigten Plan. Geschnitten wird die Pflicht,
|
|
411
|
+
# sie zu MELDEN und anzuhalten - nicht die Existenz des Plans.
|
|
412
|
+
"abw": dict(
|
|
413
|
+
ZEILE=[
|
|
414
|
+
r"Abweichung vom (bestätigten |bestaetigten )?(Plan|Scope)",
|
|
415
|
+
r"Abweichung.{0,30}(Plan|Scope)",
|
|
416
|
+
r"(Plan|Scope).{0,30}Abweichung",
|
|
417
|
+
r"erneute(r|n)? Best(ä|ae)tigung",
|
|
418
|
+
r"weitere Datei",
|
|
419
|
+
r"Schritt nicht fortsetzen",
|
|
420
|
+
r"Umsortieren",
|
|
421
|
+
r"Zusammenfassen von Planschritten",
|
|
422
|
+
r"stillschweigend",
|
|
423
|
+
r"\[HALT\]",
|
|
424
|
+
r"h(ä|ae)lt an", r"anhalten", r"Halte-?[Pp]unkt",
|
|
425
|
+
r"vor dem ersten Schreibzugriff",
|
|
426
|
+
],
|
|
427
|
+
SATZ=[],
|
|
428
|
+
ABSCHNITT=[],
|
|
429
|
+
MARKEN=[r"Abweichung vom", r"Schritt nicht fortsetzen", r"\[HALT\]",
|
|
430
|
+
r"vor dem ersten Schreibzugriff"],
|
|
431
|
+
BEHALTEN=[],
|
|
432
|
+
),
|
|
433
|
+
# --- BUENDEL 4 (0.78.0) -------------------------------------------------------
|
|
434
|
+
# SK-012-N01 und SK-010-N01: keine Fernwirkung, keine Freigabeaussage (V1, V2).
|
|
435
|
+
# Dieselbe Schranke an zwei Gegenstaenden - dort der Merge-Request-Entwurf, hier
|
|
436
|
+
# die Review-Unterstuetzung. Beide Zellen verlangen, dass der Lauf den Entwurf
|
|
437
|
+
# LIEFERT und die Aktion VERWEIGERT; geschnitten wird die Verweigerungspflicht,
|
|
438
|
+
# nicht die Faehigkeit.
|
|
439
|
+
#
|
|
440
|
+
# 🔴 `Freigabe\w*` steht hier NICHT, und das ist der Befund dieser Klasse.
|
|
441
|
+
# Gemessen am 2026-09-20 gegen den ungeschnittenen Baum: 502 Zeilen in 102
|
|
442
|
+
# Dateien - und gelesen meinen sie die Freigabe AN den Agenten
|
|
443
|
+
# (Kontextfreigabe, Overlay-Freigabe, dokumentierte Freigabe durch
|
|
444
|
+
# <APPROVAL_ROLE>), nicht die Freigabeaussage DES Agenten. Dasselbe gilt fuer
|
|
445
|
+
# `freigegeben` (190 in 76): *im Overlay freigegeben*, *freigegebene
|
|
446
|
+
# Testbefehle*. Zwei Bedeutungen desselben Wortes - genau das Beispiel, das der
|
|
447
|
+
# Kopfkommentar seit 0.75.0 fuehrt.
|
|
448
|
+
# --- NACHGETRAGEN MIT 1.14.0 (CR-2026-151) -----------------------------------
|
|
449
|
+
# SK-002-N01: keine Bewertung, kein Aenderungsvorschlag. Die Klasse stand in
|
|
450
|
+
# `k-bauen.py` von Buendel 1 (0.70.0) und war beim Umzug des Apparats in den
|
|
451
|
+
# Kern (D-222) nicht mitgekommen - der Nachlauf von K-153 braucht sie. Schnitt-
|
|
452
|
+
# muster unveraendert aus Buendel 1; das Stammmuster ist neu (D-205).
|
|
453
|
+
"bew": dict(
|
|
454
|
+
ZEILE=[
|
|
455
|
+
r"Bewertung(en)? als Feststellung",
|
|
456
|
+
r"keine Bewertung",
|
|
457
|
+
r"ohne Bewertung",
|
|
458
|
+
r"bewertet nichts",
|
|
459
|
+
r"(Ä|Ae)nderungsvorschl\w*",
|
|
460
|
+
r"Bewertung und Entscheidung",
|
|
461
|
+
r"beim Menschen",
|
|
462
|
+
r"gut.{0,3}, .{0,3}schlecht",
|
|
463
|
+
r"belegte Beobachtung",
|
|
464
|
+
],
|
|
465
|
+
SATZ=[],
|
|
466
|
+
# Das Negativbeispiel in EXAMPLES.md zeigt den Gegenstand als Ganzes -
|
|
467
|
+
# gefunden vom Stammwaechter beim ersten Bau (1.14.0).
|
|
468
|
+
ABSCHNITT=[r"Negativbeispiel.*(Bewertung|(Ä|Ae)nderungsvorschl)"],
|
|
469
|
+
MARKEN=[r"Bewertung als Feststellung", r"Änderungsvorschläge",
|
|
470
|
+
r"beim Menschen"],
|
|
471
|
+
BEHALTEN=[],
|
|
472
|
+
),
|
|
473
|
+
"fern": dict(
|
|
474
|
+
ZEILE=[
|
|
475
|
+
r"Fernwirkung\w*",
|
|
476
|
+
r"\bV1\b", r"\bV2\b",
|
|
477
|
+
# 🔴 NACHGETRAGEN MIT 0.83.0 (CR-2026-116), GEMESSEN VOR DEM ERSTEN
|
|
478
|
+
# BEZAHLTEN LAUF VON BUENDEL 5. `\bV1\b` TRIFFT `V11` NICHT - auf
|
|
479
|
+
# die `1` folgt ein Wortzeichen, und die Wortgrenze steht nicht.
|
|
480
|
+
# Nach dem Schnitt trug der Kontrollbaum von `RE-001-N03` die
|
|
481
|
+
# gepruefte Schranke FUENFMAL weiter: einmal in der Rollenregel
|
|
482
|
+
# ("Eintragen oder Aendern von Vorgaengen im Ticketsystem | Mensch
|
|
483
|
+
# (V11)") und viermal in der `SKILL.md`. Der Stammwaechter war
|
|
484
|
+
# gruen, weil sein Muster dieselbe Luecke trug.
|
|
485
|
+
#
|
|
486
|
+
# Ein Muster mit abschliessender Wortgrenze uebersieht die Form,
|
|
487
|
+
# die knapp danebenliegt - 0.64.0 an einer zweiten Stelle.
|
|
488
|
+
r"\bV11\b",
|
|
489
|
+
r"kein Eintrag im Ticketsystem",
|
|
490
|
+
r"ruft kein Ticketsystem ab",
|
|
491
|
+
r"in ein Ticketsystem schreiben",
|
|
492
|
+
r"kein Vorgang angelegt",
|
|
493
|
+
r"selbst einzutragen",
|
|
494
|
+
r"git\s+(push|merge)\b",
|
|
495
|
+
r"gemergt\w*",
|
|
496
|
+
r"Reifeaussage\w*",
|
|
497
|
+
r"Freigabeaussage\w*",
|
|
498
|
+
r"Merge-?[Aa]ussage\w*",
|
|
499
|
+
r"Delegationsverbot\w*",
|
|
500
|
+
r"(f(ü|ue)hrt|f(ü|ue)hren)\s+(der|die)\s+Mensch",
|
|
501
|
+
r"Merge Request.{0,20}(anleg|erstell)",
|
|
502
|
+
r"Pull Request.{0,20}(anleg|erstell)",
|
|
503
|
+
r"keine Aktion im Review-?Werkzeug",
|
|
504
|
+
r"Kommentar im (Review-?)?Werkzeug",
|
|
505
|
+
],
|
|
506
|
+
# 🔴 Der schrankensetzende HALBSATZ der Overlay-Wertzeile - der Rest der
|
|
507
|
+
# Zeile bleibt, weil er den Wert von `<ISSUE_TRACKER>` traegt.
|
|
508
|
+
SATZ=[" **Kein Schreibzugriff:** Ein Vorgang wird nie durch den "
|
|
509
|
+
"KI-Client eingetragen oder ge\u00e4ndert (V11); der Entwurf wird "
|
|
510
|
+
"vom Menschen \u00fcbertragen"],
|
|
511
|
+
# Die Stellung, nicht der Wortlaut: eine Tabellenzeile, deren zweite
|
|
512
|
+
# Spalte ein Pflichtplatzhalter ist.
|
|
513
|
+
NUR_SATZ=[r"^\|[^|]+\|\s*`<[A-Z_]+>`\s*\|"],
|
|
514
|
+
ABSCHNITT=[],
|
|
515
|
+
MARKEN=[r"Fernwirkung", r"gemergt", r"Freigabeaussage", r"Reifeaussage",
|
|
516
|
+
r"Delegationsverbot", r"\bV11\b"],
|
|
517
|
+
BEHALTEN=[],
|
|
518
|
+
),
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
# --- STAMM: der zweite Waechter, neu mit 0.75.0 (D-205) ---------------------------
|
|
522
|
+
# 🔴 DER WAECHTER PRUEFTE MIT DEM SCHNITTMUSTER. Die MARKEN einer Klasse sind je
|
|
523
|
+
# Klasse eine TEILMENGE ihrer ZEILE-Muster - gemessen am 2026-09-19 gegen das
|
|
524
|
+
# Uebungsrepositorium: Klasse `plan`, ZEILE trifft 211 Zeilen, MARKEN 131, und die
|
|
525
|
+
# 131 liegen vollstaendig in den 211. Ein Waechter, der weniger sucht, als der
|
|
526
|
+
# Schnitt entfernt, kann per Konstruktion nichts finden, was das Schnittmuster nicht
|
|
527
|
+
# kannte - *die Null durch Konstruktion* (0.59.1) am Waechter des Zuschnitts.
|
|
528
|
+
#
|
|
529
|
+
# DER STAMMWAECHTER SUCHT DEN GEGENSTAND, NICHT DIE FORMULIERUNG: alle Kasus, alle
|
|
530
|
+
# Ausdrucksformen, auch Diagrammknoten (0.66.0). Gemessen meldet er fuer `plan`
|
|
531
|
+
# 17 Zeilen, die der Schnitt stehen laesst - VIER davon in einer `SKILL.md` und
|
|
532
|
+
# eine in einem Flussdiagramm. Sieben davon hat der Messtag am 19.09. erst
|
|
533
|
+
# NACHTRAEGLICH aus den Kontrolllaeufen erfahren (D-203).
|
|
534
|
+
#
|
|
535
|
+
# EIN STAMMMUSTER IST WEITER ALS DAS SCHNITTMUSTER, ABER NICHT BELIEBIG: Der erste
|
|
536
|
+
# Entwurf fuehrte fuer `plan` ein blosses r"Freigabe\w*" und meldete 307 Zeilen -
|
|
537
|
+
# jede "Freigabeinstanz". Wer einen Waechter baut, liest jede seiner Meldungen
|
|
538
|
+
# (0.63.0).
|
|
539
|
+
# Zwei Stammmuster stehen als eigene Namen, weil die Klasse `injk3` ihre VEREINIGUNG
|
|
540
|
+
# ist (nachgetragen mit 0.77.0). Wer sie dort noch einmal ausschreibt, pflegt zwei
|
|
541
|
+
# Listen, die dasselbe sagen sollen - und die zweite altert unbemerkt.
|
|
542
|
+
STAMM_K3 = [r"\bK3\b", r"personenbezogen\w*", r"Personendaten", r"Zugangsdaten",
|
|
543
|
+
r"\bSecret\w*", r"Datenschutz\w*", r"SECURITY_CONTACT"]
|
|
544
|
+
STAMM_INJ = [r"Injekt\w*", r"Injection\w*", r"sind\s+Daten\b",
|
|
545
|
+
r"[Rr]egelwidrig\w*\s+Anweisung\w*", r"\bS6\b",
|
|
546
|
+
r"als\s+Anweisung\w*\s+behandel\w*"]
|
|
547
|
+
|
|
548
|
+
STAMM = {
|
|
549
|
+
# --- NACHGETRAGEN MIT 0.78.0 (CR-2026-105) ------------------------------------
|
|
550
|
+
# Der Stammwaechter von `fern`. Er ist WEITER als der Schnitt und sucht den
|
|
551
|
+
# Gegenstand - die Pflicht, nicht zu mergen, nicht zu pushen und nichts
|
|
552
|
+
# freizugeben - auch dort, wo sie ohne die Marken ausgedrueckt ist.
|
|
553
|
+
# 🔴 DIE V11-HAELFTE IST MIT 0.83.0 NACHGETRAGEN (CR-2026-116). Sie fehlte
|
|
554
|
+
# in BEIDEN Listen - im Schnittmuster und im Stamm -, und deshalb konnte der
|
|
555
|
+
# Waechter die Luecke nicht melden: *Ein Waechter, der weniger sucht, als der
|
|
556
|
+
# Schnitt entfernt, kann per Konstruktion nichts finden* (D-205).
|
|
557
|
+
# 1.14.0: der Gegenstand von `bew` - die Erklaerung bewertet nicht und schlaegt
|
|
558
|
+
# nichts vor. Weiter als das Schnittmuster: jede Beugung, auch ohne die Marken.
|
|
559
|
+
"bew": [r"keine\s+Bewertung\w*", r"ohne\s+Bewertung\w*", r"bewerte[nt]?\s+nicht\w*",
|
|
560
|
+
r"Bewertung\w*\s+als\s+Feststellung\w*", r"(Ä|Ae)nderungsvorschl\w*",
|
|
561
|
+
r"beim\s+Menschen", r"belegt\w*\s+Beobachtung\w*"],
|
|
562
|
+
"fern": [r"Fernwirkung\w*", r"\bV1\b", r"\bV2\b", r"\bV11\b",
|
|
563
|
+
r"git\s+(push|merge)\b", r"gemergt\w*", r"Reifeaussage\w*",
|
|
564
|
+
r"Freigabeaussage\w*", r"Delegationsverbot\w*",
|
|
565
|
+
r"(f(ü|ue)hrt|f(ü|ue)hren)\s+(der|die)\s+Mensch",
|
|
566
|
+
r"keine Aktion im Review-?Werkzeug",
|
|
567
|
+
r"Eintrag\w*\s+im\s+Ticketsystem",
|
|
568
|
+
r"Ticketsystem\s+schreib\w*",
|
|
569
|
+
r"kein\s+Ticketsystem\s+ab\b",
|
|
570
|
+
r"kein\s+Vorgang\s+angelegt",
|
|
571
|
+
r"selbst\s+einzutragen"],
|
|
572
|
+
"plan": [r"best(ä|ae)tigt\w*\s+Plan\w*", r"Plan\w*\s+best(ä|ae)tigt\w*",
|
|
573
|
+
r"Plan-?Review", r"Planpflicht", r"Planreferenz", r"Planbedarf",
|
|
574
|
+
r"Planfreigabe\w*", r"Freigabe(erfordernis|voraussetzung)\w*",
|
|
575
|
+
r"dokumentierte\w*\s+Freigabe", r"ohne\s+Plan", r"APPROVAL_ROLE"],
|
|
576
|
+
"test": [r"Testnachweis\w*", r"Fehlschl\w*", r"fehlschlagend\w*",
|
|
577
|
+
r"gr(ü|ue)n\w*\s+(machen|melden|zu)", r"Zusicherung\w*", r"Assertion\w*",
|
|
578
|
+
r"(ü|ue)berspring\w*", r"it\.skip", r"roter?\w*\s+(Stand|Suite)"],
|
|
579
|
+
"befund": [r"verhaltensneutral\w*", r"funktional\w*\s+(Ä|Ae|ä|ae)nderung\w*",
|
|
580
|
+
r"Befund\w*\s+mit\s+Fundstelle", r"nicht\s+beheben", r"mitfix\w*",
|
|
581
|
+
r"fw-error-analyze"],
|
|
582
|
+
"k3": STAMM_K3,
|
|
583
|
+
"sc1": [r"\bScope\w*", r"beil(ä|ae)ufig\w*", r"Ausweitung\w*",
|
|
584
|
+
r"au(ß|ss)erhalb\s+des\s+(Auftrags|Scopes)", r"Delegationsverbot\w*",
|
|
585
|
+
r"\bV3\b", r"READ_ONLY_PATHS", r"Nur-?Lese\w*",
|
|
586
|
+
r"(separate|eigene)\w*\s+Ticket\w*"],
|
|
587
|
+
"inj": STAMM_INJ,
|
|
588
|
+
"testnachweis": [r"Testnachweis\w*", r"\bfw-tests\b",
|
|
589
|
+
r"Abdeckung\w*\s+des\s+Verhaltens",
|
|
590
|
+
r"identisch\w*\s+Testergebnis\w*",
|
|
591
|
+
r"Testergebnis\w*\s+identisch\w*",
|
|
592
|
+
r"ohne\s+(automatisierte\s+)?Tests"],
|
|
593
|
+
"abw": [r"Abweichung\w*\s+vo[nm]\s+\w*\s*(Plan|Scope)\w*",
|
|
594
|
+
r"(Plan|Scope)\w*.{0,30}Abweichung\w*",
|
|
595
|
+
r"erneut\w*\s+Best(ä|ae)tigung\w*", r"\[HALT\]",
|
|
596
|
+
r"Halte-?[Pp]unkt\w*", r"vor\s+dem\s+ersten\s+Schreibzugriff"],
|
|
597
|
+
# --- NACHGETRAGEN MIT 0.77.0 (CR-2026-104) ------------------------------------
|
|
598
|
+
# Die fuenf Klassen ohne Stammmuster. Sie haben bis hierher nicht abgebrochen,
|
|
599
|
+
# weil Buendel 3 sie nicht gebraucht hat - der Stammwaechter kam erst mit
|
|
600
|
+
# 0.75.0, nach dem Messtag. 🔴 Fuer Buendel 4 haette der Baumbau abgebrochen,
|
|
601
|
+
# und das waere richtig gewesen: `n03`, `halt`, `konf` und `risiko` stehen in
|
|
602
|
+
# den Kontrollzuschnitten von `fw-review-support` und `fw-mr-description`.
|
|
603
|
+
# `annimm\w*` ist gestrichen: Es traf `clients/README.md` ("das Frontmatter
|
|
604
|
+
# nimmt … an") - ein anderer Sinn desselben Wortes. `Annahme\w*` und
|
|
605
|
+
# `annehm\w*` decken den Gegenstand.
|
|
606
|
+
"n03": [r"No\s*Assumption", r"Annahme\w*", r"annehm\w*",
|
|
607
|
+
r"unterstell\w*", r"R(ü|ue)ckfrag\w*", r"nachfrag\w*",
|
|
608
|
+
r"\[R(Ü|UE)CKFRAGE\]", r"stillschweigend\w*", r"Unklarheit\w*",
|
|
609
|
+
r"\bP3\b", r"offene\w*\s+Frage\w*", r"statt\s+(zu\s+)?rate\w*",
|
|
610
|
+
r"nicht\s+rate\w*"],
|
|
611
|
+
# Die Klasse ist die VEREINIGUNG zweier Schnitte, und ihr Stammmuster ist es
|
|
612
|
+
# auch. Sie hier noch einmal auszuschreiben hiesse, zwei Listen zu pflegen, die
|
|
613
|
+
# dasselbe sagen - und eine Zahl, die man nicht zaehlt, ist erfunden.
|
|
614
|
+
"injk3": STAMM_INJ + STAMM_K3,
|
|
615
|
+
"halt": [r"\[HALT\]", r"anhalt\w*", r"h(ä|ae)lt\w*\s+an\b", r"Halte-?[Pp]unkt\w*",
|
|
616
|
+
r"vor\s+dem\s+ersten\s+Schreibzugriff", r"setzt\s+nichts\s+um",
|
|
617
|
+
r"behebt\s+nichts", r"f(ü|ue)hrt\s+nichts\s+aus", r"keine\s+Umsetzung",
|
|
618
|
+
r"Planbest(ä|ae)tigung\w*", r"Freigabepunkt\w*",
|
|
619
|
+
r"zur\s+Best(ä|ae)tigung\s+vor", r"Umsetzung\s+beginnt\s+erst",
|
|
620
|
+
r"Folge-?Skill\w*"],
|
|
621
|
+
# 🔴 ZWEIMAL EINGEENGT, UND BEIDE MALE AUS DEMSELBEN GRUND WIE BEI `plan`
|
|
622
|
+
# (gemessen am 2026-09-19, CR-2026-104): Der erste Entwurf fuehrte fuer `konf`
|
|
623
|
+
# ein blosses `vermute\w*` und fuer `risiko` ein blosses `Kontrollstufe\w*` -
|
|
624
|
+
# 68 beziehungsweise 747 Meldungen. Beide trafen einen ANDEREN Sinn desselben
|
|
625
|
+
# Wortes: "der vermutete Bereich" ist eine EINGABE von fw-change-analyze, und
|
|
626
|
+
# die Kontrollstufe nennt jedes Ausgabeformat des Frameworks. Ein Stammmuster
|
|
627
|
+
# ist weiter als das Schnittmuster, aber es sucht den GEGENSTAND.
|
|
628
|
+
"konf": [r"Konfidenz\w*", r"Fundstelle\w*", r"erfund\w*", r"erfind\w*",
|
|
629
|
+
r"Code-?Stand\w*", r"nicht\s+belegbar\w*",
|
|
630
|
+
r"beobachtet\s*\(", r"geschlossen\s*\(",
|
|
631
|
+
r"auf\s+Basis\s+vermutet\w*", r"ohne\s+Beleg\w*"],
|
|
632
|
+
"risiko": [r"Risikofaktor\w*", r"Risiko-?Abgleich\w*", r"\bR1[013]\b",
|
|
633
|
+
r"nicht\s+eigenm(ä|ae)chtig",
|
|
634
|
+
r"Anstieg\s+der\s+Kontrollstufe",
|
|
635
|
+
r"(h(ö|oe)her\w*|neue\w*)\s+Einstufung\w*",
|
|
636
|
+
r"Kontrollstufe\s+\w*\s*(senken|(ä|ae)ndern|herabsetzen)",
|
|
637
|
+
r"Einstufung\w*\s+(anheben|erh(ö|oe)hen|melden)"],
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
OHNE_STAMM = "--ohne-stammwaechter" in sys.argv
|
|
641
|
+
|
|
642
|
+
if KLASSE not in KLASSEN:
|
|
643
|
+
raise SystemExit(" | ".join(sorted(KLASSEN)))
|
|
644
|
+
if KLASSE not in STAMM and not OHNE_STAMM:
|
|
645
|
+
raise SystemExit(
|
|
646
|
+
"ABBRUCH: fuer die Klasse %s ist kein Stammmuster hinterlegt (D-205).\n"
|
|
647
|
+
"Der Waechter wuerde mit dem Schnittmuster pruefen und nichts finden.\n"
|
|
648
|
+
"Entweder ein STAMM-Muster hinterlegen oder --ohne-stammwaechter setzen\n"
|
|
649
|
+
"und die Abweichung ins Protokoll schreiben." % KLASSE)
|
|
650
|
+
|
|
651
|
+
K = KLASSEN[KLASSE]
|
|
652
|
+
ZEILE_RE = [re.compile(x, re.IGNORECASE) for x in K["ZEILE"]]
|
|
653
|
+
NUR_SATZ_RE = [re.compile(x, re.IGNORECASE) for x in K.get("NUR_SATZ", [])]
|
|
654
|
+
ABSCHNITT_RE = [re.compile(x, re.IGNORECASE) for x in K["ABSCHNITT"]]
|
|
655
|
+
MARKEN_RE = [re.compile(x, re.IGNORECASE) for x in K["MARKEN"]]
|
|
656
|
+
BEHALTEN = {x.replace("/", os.sep) for x in K.get("BEHALTEN", [])}
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
def dateien(wurzel):
|
|
660
|
+
for teil in BEREICHE:
|
|
661
|
+
p = os.path.join(wurzel, teil.replace("/", os.sep))
|
|
662
|
+
if os.path.isfile(p):
|
|
663
|
+
yield p
|
|
664
|
+
elif os.path.isdir(p):
|
|
665
|
+
for w, _, ds in os.walk(p):
|
|
666
|
+
for d in ds:
|
|
667
|
+
if d.lower().endswith((".md", ".txt", ".template", ".yaml", ".yml")):
|
|
668
|
+
voll = os.path.join(w, d)
|
|
669
|
+
if os.path.relpath(voll, wurzel) in BEHALTEN:
|
|
670
|
+
continue
|
|
671
|
+
yield voll
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
def ebene(zeile):
|
|
675
|
+
m = re.match(r"^(#+) ", zeile)
|
|
676
|
+
return len(m.group(1)) if m else 0
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
def weg(pfad):
|
|
680
|
+
def onexc(func, p, exc):
|
|
681
|
+
os.chmod(p, 0o700)
|
|
682
|
+
func(p)
|
|
683
|
+
shutil.rmtree(pfad, onexc=onexc)
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
# --- Kopieren ---------------------------------------------------------------------
|
|
687
|
+
if os.path.exists(ZIEL):
|
|
688
|
+
weg(ZIEL)
|
|
689
|
+
shutil.copytree(QUELLE, ZIEL)
|
|
690
|
+
print("kopiert nach", ZIEL)
|
|
691
|
+
|
|
692
|
+
weg_zeilen = weg_abschnitte = weg_saetze = 0
|
|
693
|
+
beruehrt = []
|
|
694
|
+
|
|
695
|
+
for pfad in dateien(ZIEL):
|
|
696
|
+
roh = io.open(pfad, encoding="utf-8", newline="").read()
|
|
697
|
+
crlf = "\r\n" in roh
|
|
698
|
+
zeilen = roh.replace("\r\n", "\n").split("\n")
|
|
699
|
+
|
|
700
|
+
neu = []
|
|
701
|
+
i = 0
|
|
702
|
+
n_z = n_a = n_s = 0
|
|
703
|
+
while i < len(zeilen):
|
|
704
|
+
z = zeilen[i]
|
|
705
|
+
treffer_abschnitt = next((r for r in ABSCHNITT_RE if r.search(z)), None)
|
|
706
|
+
if treffer_abschnitt is not None and ebene(z):
|
|
707
|
+
e = ebene(z)
|
|
708
|
+
i += 1
|
|
709
|
+
while i < len(zeilen) and not (ebene(zeilen[i]) and ebene(zeilen[i]) <= e):
|
|
710
|
+
i += 1
|
|
711
|
+
n_a += 1
|
|
712
|
+
continue
|
|
713
|
+
# 🔴 NUR_SATZ GEHT VOR ZEILE. Eine Zeile, die Schranke UND
|
|
714
|
+
# Meszgegenstand traegt, darf nicht als Ganzes fallen - aus ihr faellt
|
|
715
|
+
# allein der schrankensetzende Satz (0.83.0, CR-2026-116).
|
|
716
|
+
if any(r.search(z) for r in NUR_SATZ_RE):
|
|
717
|
+
for s in K["SATZ"]:
|
|
718
|
+
if s in z:
|
|
719
|
+
z = z.replace(s, "")
|
|
720
|
+
n_s += 1
|
|
721
|
+
neu.append(z)
|
|
722
|
+
i += 1
|
|
723
|
+
continue
|
|
724
|
+
if any(r.search(z) for r in ZEILE_RE):
|
|
725
|
+
i += 1
|
|
726
|
+
n_z += 1
|
|
727
|
+
continue
|
|
728
|
+
for s in K["SATZ"]:
|
|
729
|
+
if s in z:
|
|
730
|
+
z = z.replace(s, "")
|
|
731
|
+
n_s += 1
|
|
732
|
+
neu.append(z)
|
|
733
|
+
i += 1
|
|
734
|
+
|
|
735
|
+
if (n_z or n_a or n_s):
|
|
736
|
+
text = "\n".join(neu)
|
|
737
|
+
if crlf:
|
|
738
|
+
text = text.replace("\n", "\r\n")
|
|
739
|
+
daten = text.encode("utf-8")
|
|
740
|
+
io.open(pfad, "wb").write(daten)
|
|
741
|
+
weg_zeilen += n_z
|
|
742
|
+
weg_abschnitte += n_a
|
|
743
|
+
weg_saetze += n_s
|
|
744
|
+
beruehrt.append((os.path.relpath(pfad, ZIEL), n_z, n_a, n_s))
|
|
745
|
+
|
|
746
|
+
print("entfernt: %d Zeilen, %d Abschnitte, %d Saetze in %d Traegern"
|
|
747
|
+
% (weg_zeilen, weg_abschnitte, weg_saetze, len(beruehrt)))
|
|
748
|
+
for r, a, b, c in sorted(beruehrt, key=lambda x: -(x[1] + x[2]))[:15]:
|
|
749
|
+
print(" %-72s Z%-3d A%-3d S%-3d" % (r, a, b, c))
|
|
750
|
+
if len(beruehrt) > 15:
|
|
751
|
+
print(" ... und %d weitere Traeger" % (len(beruehrt) - 15))
|
|
752
|
+
|
|
753
|
+
# --- Der SessionStart-Hook, wo die Schranke ihn als zweiten Traeger hat ------------
|
|
754
|
+
if K.get("HOOK_WEG"):
|
|
755
|
+
pfad = os.path.join(ZIEL, ".claude", "settings.json")
|
|
756
|
+
d = json.loads(io.open(pfad, encoding="utf-8", newline="").read())
|
|
757
|
+
if "SessionStart" not in d.get("hooks", {}):
|
|
758
|
+
raise SystemExit("ABBRUCH: kein SessionStart-Hook zum Entfernen")
|
|
759
|
+
del d["hooks"]["SessionStart"]
|
|
760
|
+
daten = (json.dumps(d, ensure_ascii=False, indent=2) + "\n").encode("utf-8")
|
|
761
|
+
io.open(pfad, "wb").write(daten)
|
|
762
|
+
print("SessionStart-Hook entfernt - der zweite Traeger derselben Anweisung")
|
|
763
|
+
|
|
764
|
+
# --- Waechter ---------------------------------------------------------------------
|
|
765
|
+
for rel in BEHALTEN:
|
|
766
|
+
if not os.path.isfile(os.path.join(ZIEL, rel)):
|
|
767
|
+
weg(ZIEL)
|
|
768
|
+
raise SystemExit("ABBRUCH: %s fehlt im Kontrollbaum - Baum geloescht" % rel)
|
|
769
|
+
print("Waechter: %s unberuehrt" % rel.replace(os.sep, "/"))
|
|
770
|
+
|
|
771
|
+
rest = []
|
|
772
|
+
for pfad in dateien(ZIEL):
|
|
773
|
+
text = io.open(pfad, encoding="utf-8", newline="").read()
|
|
774
|
+
for r in MARKEN_RE:
|
|
775
|
+
m = r.search(text)
|
|
776
|
+
if m:
|
|
777
|
+
rest.append((os.path.relpath(pfad, ZIEL), r.pattern, m.group(0)))
|
|
778
|
+
if rest:
|
|
779
|
+
for r in rest[:40]:
|
|
780
|
+
print(" REST:", r)
|
|
781
|
+
weg(ZIEL)
|
|
782
|
+
raise SystemExit("ABBRUCH: %d Restfundstellen - Baum geloescht" % len(rest))
|
|
783
|
+
print("Waechter 1 (Marken): keine Restfundstelle der %d Marken in den REGELQUELLEN"
|
|
784
|
+
% len(MARKEN_RE))
|
|
785
|
+
|
|
786
|
+
# --- Waechter 2: der Stammwaechter (D-205) ----------------------------------------
|
|
787
|
+
# Er sucht den GEGENSTAND in allen Formen - und er ist WEITER als das Schnittmuster.
|
|
788
|
+
# Nur deshalb kann er etwas finden, was der Schnitt nicht kannte.
|
|
789
|
+
if KLASSE in STAMM:
|
|
790
|
+
stamm_re = [(x, re.compile(x, re.IGNORECASE)) for x in STAMM[KLASSE]]
|
|
791
|
+
rest2 = []
|
|
792
|
+
for pfad in dateien(ZIEL):
|
|
793
|
+
text = io.open(pfad, encoding="utf-8", newline="").read()
|
|
794
|
+
for nr, z in enumerate(text.replace("\r\n", "\n").split("\n"), 1):
|
|
795
|
+
treffer = [p for p, r in stamm_re if r.search(z)]
|
|
796
|
+
if treffer:
|
|
797
|
+
rest2.append((os.path.relpath(pfad, ZIEL), nr, "+".join(treffer),
|
|
798
|
+
z.strip()[:90]))
|
|
799
|
+
if rest2:
|
|
800
|
+
for r in rest2[:40]:
|
|
801
|
+
print(" REST(Stamm) %s:%d [%s]" % (r[0], r[1], r[2]))
|
|
802
|
+
print(" %s" % r[3])
|
|
803
|
+
if len(rest2) > 40:
|
|
804
|
+
print(" ... und %d weitere" % (len(rest2) - 40))
|
|
805
|
+
weg(ZIEL)
|
|
806
|
+
raise SystemExit(
|
|
807
|
+
"ABBRUCH: %d Restfundstellen des GEGENSTANDS - Baum geloescht.\n"
|
|
808
|
+
"Der Zuschnitt ist unfertig. Wird er so gefahren, traegt die Zelle\n"
|
|
809
|
+
"`nicht erhoben` mit Grund - nicht `nein` (D-205)." % len(rest2))
|
|
810
|
+
print("Waechter 2 (Stamm): keine Restfundstelle des Gegenstands in %d Mustern"
|
|
811
|
+
% len(stamm_re))
|
|
812
|
+
else:
|
|
813
|
+
print("\U0001F534 WARNUNG: kein Stammwaechter fuer die Klasse %s (--ohne-stammwaechter).\n"
|
|
814
|
+
" Der Marken-Waechter prueft mit dem Schnittmuster und belegt nur den\n"
|
|
815
|
+
" Schnitt, nicht die Abwesenheit der Schranke. Diese Abweichung des\n"
|
|
816
|
+
" Zuschnitts gehoert ins Protokoll (D-205)." % KLASSE)
|
|
817
|
+
|
|
818
|
+
# --- Zaehlung in den Aufzeichnungen (kein Abbruchgrund, aber ein Messwert) ---------
|
|
819
|
+
auf = {}
|
|
820
|
+
for teil in AUFZEICHNUNGEN:
|
|
821
|
+
p = os.path.join(ZIEL, teil.replace("/", os.sep))
|
|
822
|
+
pfade = []
|
|
823
|
+
if os.path.isfile(p):
|
|
824
|
+
pfade = [p]
|
|
825
|
+
elif os.path.isdir(p):
|
|
826
|
+
for w, _, ds in os.walk(p):
|
|
827
|
+
if "__pycache__" in w:
|
|
828
|
+
continue
|
|
829
|
+
pfade += [os.path.join(w, d) for d in ds
|
|
830
|
+
if d.lower().endswith((".md", ".txt", ".yaml", ".yml", ".template"))]
|
|
831
|
+
for pf in pfade:
|
|
832
|
+
text = io.open(pf, encoding="utf-8", errors="replace").read()
|
|
833
|
+
n = sum(len(r.findall(text)) for r in MARKEN_RE)
|
|
834
|
+
if n:
|
|
835
|
+
auf[os.path.relpath(pf, ZIEL).replace(chr(92), "/")] = n
|
|
836
|
+
print("In den AUFZEICHNUNGEN stehen die Marken weiter: %d Fundstellen in %d Traegern"
|
|
837
|
+
% (sum(auf.values()), len(auf)))
|
|
838
|
+
for k, v in sorted(auf.items(), key=lambda x: -x[1])[:6]:
|
|
839
|
+
print(" %-72s %d" % (k, v))
|
|
840
|
+
print(" (Eine Aufzeichnung ist nach Regel 2.5 ein Datum, keine Anweisung - D-141.)")
|
|
841
|
+
print("OK")
|