@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,411 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
bauen.py - Die Pakete der Paketquellen aus einem Release-Archiv bauen (CR-2026-168, D-520).
|
|
4
|
+
|
|
5
|
+
Hintergrund: Das Release-Archiv entsteht aus der signierten Marke (RELEASE_PROCESS.md 4.1,
|
|
6
|
+
Schritt 5) und traegt genau `git ls-tree` der Marke. Dieses Skript baut daraus - und aus
|
|
7
|
+
nichts anderem - vier Erzeugnisse, damit jede Paketquelle denselben Inhalt liefert:
|
|
8
|
+
|
|
9
|
+
koolie-<V>-py3-none-any.whl PyPI (pip, pipx, uv): der Baum unter koolie/baum/,
|
|
10
|
+
der Befehl `koolie` als Einstiegspunkt
|
|
11
|
+
koolie-<V>.tgz npm: der Baum unter package/, der Befehl ueber
|
|
12
|
+
paketquellen/npm/koolie.js, KEIN Installationsskript;
|
|
13
|
+
Paketname @renoxar/koolie (D-535)
|
|
14
|
+
scoop/koolie.json Scoop: laedt das Archiv von der Download-Adresse und
|
|
15
|
+
prueft seine SHA-256
|
|
16
|
+
homebrew/koolie.rb Homebrew: ebenso
|
|
17
|
+
|
|
18
|
+
dazu SHA256SUMS ueber alle vier und das Archiv. Erzeugt wird nur, was sich aus Archiv und
|
|
19
|
+
Download-Adresse ableiten laesst: Metadaten, zwei Einstiegsdateien des Wheels, die
|
|
20
|
+
Manifeste. Die Version kommt aus .koolie/core/VERSION im Archiv - nie aus diesem Skript.
|
|
21
|
+
|
|
22
|
+
Die Erzeugnisse sind bytegleich wiederholbar (feste Zeitstempel, sortierte Eintraege,
|
|
23
|
+
feste Modi); bauen.py prueft nach dem Bau selbst nach: Dateimenge von Wheel und
|
|
24
|
+
npm-Paket = Dateimenge des Archivs, Version, Pruefsumme in beiden Manifesten, RECORD.
|
|
25
|
+
|
|
26
|
+
Die Beschreibung auf den Seiten von PyPI und npm ist README.en.md mit absoluten Links auf
|
|
27
|
+
die Marke im GitHub-Spiegel (CR-2026-170, D-528): Ein relativer Link fuehrt dort ins Leere.
|
|
28
|
+
Die Dateien im Paket bleiben die des Archivs; nur die Beschreibung in METADATA und das Feld
|
|
29
|
+
`readme` der package.json tragen die umgeschriebenen Links - npm zeigt so die englische
|
|
30
|
+
statt der deutschen README.md des Baums.
|
|
31
|
+
|
|
32
|
+
--vorab N baut eine Vorabversion fuer die Installationsprobe auf TestPyPI vor der
|
|
33
|
+
Signatur der Marke (D-529): Wheel `<V>.devN`, npm `<V>-dev.N`. Der Baum im Paket bleibt
|
|
34
|
+
der des Archivs, `koolie --version` nennt deshalb weiter <V>.
|
|
35
|
+
|
|
36
|
+
Veroeffentlicht wird hier NICHTS (D-521): Das ist Schritt 9 von RELEASE_PROCESS.md 4.2.
|
|
37
|
+
|
|
38
|
+
Aufruf:
|
|
39
|
+
|
|
40
|
+
python paketquellen/bauen.py --archiv <koolie-V.tar.gz> --aus <verzeichnis>
|
|
41
|
+
[--url-basis <adresse>] [--vorab N]
|
|
42
|
+
|
|
43
|
+
--url-basis ist die Adresse, unter der das Archiv liegt; Standard ist das GitHub-Release
|
|
44
|
+
der Marke. Fuer eine Messung ohne Veroeffentlichung darf es eine lokale Adresse sein.
|
|
45
|
+
|
|
46
|
+
Exit-Code: 0 ohne Befund, 1 mit Befund, 2 bei falschem Aufruf.
|
|
47
|
+
"""
|
|
48
|
+
from __future__ import annotations
|
|
49
|
+
|
|
50
|
+
import argparse
|
|
51
|
+
import base64
|
|
52
|
+
import gzip
|
|
53
|
+
import hashlib
|
|
54
|
+
import io
|
|
55
|
+
import json
|
|
56
|
+
import os
|
|
57
|
+
import re
|
|
58
|
+
import sys
|
|
59
|
+
import tarfile
|
|
60
|
+
import zipfile
|
|
61
|
+
|
|
62
|
+
REPO = "https://github.com/Renoxar/koolie"
|
|
63
|
+
# npm sperrt "koolie" als zu aehnlich zu "cookie" (E403 beim ersten Hochladen, 2026-10-01);
|
|
64
|
+
# der Befehl heisst weiter koolie, nur das Paket traegt den Scope des Kontos (D-535)
|
|
65
|
+
NPM_NAME = "@renoxar/koolie"
|
|
66
|
+
ZEIT_ZIP = (1980, 1, 1, 0, 0, 0)
|
|
67
|
+
ZEIT_TAR = 315532800 # 1980-01-01, wie im Wheel
|
|
68
|
+
BESCHREIBUNG = ("Rules, skills and a protective hook for AI coding assistants - "
|
|
69
|
+
"one rule source, installed per project.")
|
|
70
|
+
HINWEIS = ("Koolie {v} ist installiert. Ins Projekt kommt es mit dem Befehl 'koolie' "
|
|
71
|
+
"im Projektverzeichnis (Dialog mit Banner) oder 'koolie --target <projekt>'.")
|
|
72
|
+
|
|
73
|
+
# Ein Markdown-Link, dessen Ziel keine Adresse und kein Anker ist: ](ziel) oder ](ziel#anker)
|
|
74
|
+
RELATIVER_LINK = re.compile(r"\]\((?!https?://|mailto:|#)([^)\s]+)\)")
|
|
75
|
+
|
|
76
|
+
INIT_PY = '''"""Koolie aus dem Wheel (CR-2026-168). Der Baum des Releases liegt unter baum/."""
|
|
77
|
+
'''
|
|
78
|
+
|
|
79
|
+
MAIN_PY = '''"""Der Befehl koolie aus dem Wheel (CR-2026-168, D-520): startet
|
|
80
|
+
baum/paketquellen/koolie_befehl.py im mitgelieferten Baum."""
|
|
81
|
+
import os
|
|
82
|
+
import runpy
|
|
83
|
+
import sys
|
|
84
|
+
|
|
85
|
+
BEFEHL = os.path.join(os.path.dirname(os.path.abspath(__file__)), "baum", "paketquellen",
|
|
86
|
+
"koolie_befehl.py")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def main():
|
|
90
|
+
return runpy.run_path(BEFEHL, run_name="koolie_befehl")["main"]()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
if __name__ == "__main__":
|
|
94
|
+
sys.exit(main())
|
|
95
|
+
'''
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class Befund(Exception):
|
|
99
|
+
pass
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
# --- Archiv lesen -------------------------------------------------------------------
|
|
103
|
+
def archiv_lesen(pfad: str) -> tuple[str, str, dict]:
|
|
104
|
+
"""(Version, Praefix, {relativer Pfad: Bytes}) - nur Dateien, ohne Praefix."""
|
|
105
|
+
dateien = {}
|
|
106
|
+
with tarfile.open(pfad, "r:gz") as tf:
|
|
107
|
+
mitglieder = [m for m in tf.getmembers() if m.isfile()]
|
|
108
|
+
praefixe = {m.name.split("/", 1)[0] for m in mitglieder}
|
|
109
|
+
if len(praefixe) != 1:
|
|
110
|
+
raise Befund(f"Archiv ohne einheitliches Praefix: {sorted(praefixe)[:3]}")
|
|
111
|
+
praefix = praefixe.pop()
|
|
112
|
+
for m in mitglieder:
|
|
113
|
+
dateien[m.name[len(praefix) + 1:]] = tf.extractfile(m).read()
|
|
114
|
+
if ".koolie/core/VERSION" not in dateien:
|
|
115
|
+
raise Befund("Archiv ohne .koolie/core/VERSION")
|
|
116
|
+
version = dateien[".koolie/core/VERSION"].decode("utf-8").strip()
|
|
117
|
+
if praefix != f"koolie-{version}":
|
|
118
|
+
raise Befund(f"Praefix {praefix} passt nicht zu VERSION {version}")
|
|
119
|
+
for pflicht in ("paketquellen/koolie_befehl.py", "paketquellen/koolie.cmd",
|
|
120
|
+
"paketquellen/npm/koolie.js", "LICENSE", "README.en.md"):
|
|
121
|
+
if pflicht not in dateien:
|
|
122
|
+
raise Befund(f"Archiv ohne {pflicht}")
|
|
123
|
+
return version, praefix, dateien
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def beschreibung(version: str, dateien: dict) -> str:
|
|
127
|
+
"""README.en.md mit absoluten Links auf die Marke v<version> im GitHub-Spiegel (D-528)."""
|
|
128
|
+
text = dateien["README.en.md"].decode("utf-8").replace("\r\n", "\n")
|
|
129
|
+
|
|
130
|
+
def absolut(treffer: re.Match) -> str:
|
|
131
|
+
ziel = treffer.group(1)
|
|
132
|
+
while ziel.startswith("./"):
|
|
133
|
+
ziel = ziel[2:]
|
|
134
|
+
return f"]({REPO}/blob/v{version}/{ziel})"
|
|
135
|
+
|
|
136
|
+
return RELATIVER_LINK.sub(absolut, text)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def paketversionen(version: str, vorab: int | None) -> tuple[str, str]:
|
|
140
|
+
"""(Wheel-Version nach PEP 440, npm-Version nach SemVer) - mit --vorab N eine Vorabversion."""
|
|
141
|
+
if vorab is None:
|
|
142
|
+
return version, version
|
|
143
|
+
return f"{version}.dev{vorab}", f"{version}-dev.{vorab}"
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def sha256(daten: bytes) -> str:
|
|
147
|
+
return hashlib.sha256(daten).hexdigest()
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
# --- Wheel ---------------------------------------------------------------------------
|
|
151
|
+
def _record_hash(daten: bytes) -> str:
|
|
152
|
+
return "sha256=" + base64.urlsafe_b64encode(hashlib.sha256(daten).digest()).decode().rstrip("=")
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def metadaten(version: str, dateien: dict, paketversion: str | None = None) -> str:
|
|
156
|
+
kopf = [
|
|
157
|
+
"Metadata-Version: 2.1",
|
|
158
|
+
"Name: koolie",
|
|
159
|
+
f"Version: {paketversion or version}",
|
|
160
|
+
f"Summary: {BESCHREIBUNG}",
|
|
161
|
+
"License: GPL-3.0-only",
|
|
162
|
+
f"Project-URL: Repository, {REPO}",
|
|
163
|
+
"Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
|
164
|
+
"Classifier: Programming Language :: Python :: 3",
|
|
165
|
+
"Classifier: Environment :: Console",
|
|
166
|
+
"Requires-Python: >=3.8",
|
|
167
|
+
"Description-Content-Type: text/markdown",
|
|
168
|
+
]
|
|
169
|
+
return "\n".join(kopf) + "\n\n" + beschreibung(version, dateien)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def wheel_bauen(version: str, dateien: dict, paketversion: str | None = None) -> tuple[str, bytes]:
|
|
173
|
+
paketversion = paketversion or version
|
|
174
|
+
di = f"koolie-{paketversion}.dist-info"
|
|
175
|
+
inhalt = {"koolie/__init__.py": INIT_PY.encode(), "koolie/__main__.py": MAIN_PY.encode()}
|
|
176
|
+
for rel, daten in dateien.items():
|
|
177
|
+
inhalt["koolie/baum/" + rel] = daten
|
|
178
|
+
inhalt[f"{di}/METADATA"] = metadaten(version, dateien, paketversion).encode("utf-8")
|
|
179
|
+
inhalt[f"{di}/WHEEL"] = (b"Wheel-Version: 1.0\nGenerator: koolie-bauen\n"
|
|
180
|
+
b"Root-Is-Purelib: true\nTag: py3-none-any\n")
|
|
181
|
+
inhalt[f"{di}/entry_points.txt"] = b"[console_scripts]\nkoolie = koolie.__main__:main\n"
|
|
182
|
+
inhalt[f"{di}/LICENSE"] = dateien["LICENSE"]
|
|
183
|
+
zeilen = [f"{n},{_record_hash(d)},{len(d)}" for n, d in sorted(inhalt.items())]
|
|
184
|
+
zeilen.append(f"{di}/RECORD,,")
|
|
185
|
+
inhalt[f"{di}/RECORD"] = ("\n".join(zeilen) + "\n").encode()
|
|
186
|
+
puffer = io.BytesIO()
|
|
187
|
+
with zipfile.ZipFile(puffer, "w", zipfile.ZIP_DEFLATED) as zf:
|
|
188
|
+
# dist-info zuletzt, RECORD als letzte Datei (PEP 427 empfiehlt es)
|
|
189
|
+
namen = sorted(n for n in inhalt if not n.startswith(di)) + \
|
|
190
|
+
sorted(n for n in inhalt if n.startswith(di) and not n.endswith("RECORD")) + \
|
|
191
|
+
[f"{di}/RECORD"]
|
|
192
|
+
for n in namen:
|
|
193
|
+
zi = zipfile.ZipInfo(n, ZEIT_ZIP)
|
|
194
|
+
zi.external_attr = (0o100644 << 16)
|
|
195
|
+
zi.compress_type = zipfile.ZIP_DEFLATED
|
|
196
|
+
zf.writestr(zi, inhalt[n])
|
|
197
|
+
return f"koolie-{paketversion}-py3-none-any.whl", puffer.getvalue()
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
# --- npm -----------------------------------------------------------------------------
|
|
201
|
+
def package_json(version: str, dateien: dict, paketversion: str | None = None) -> bytes:
|
|
202
|
+
daten = {
|
|
203
|
+
"name": NPM_NAME,
|
|
204
|
+
"version": paketversion or version,
|
|
205
|
+
"description": BESCHREIBUNG,
|
|
206
|
+
"license": "GPL-3.0-only",
|
|
207
|
+
"homepage": REPO,
|
|
208
|
+
"repository": {"type": "git", "url": f"git+{REPO}.git"},
|
|
209
|
+
"bin": {"koolie": "paketquellen/npm/koolie.js"},
|
|
210
|
+
"engines": {"node": ">=16"},
|
|
211
|
+
"readme": beschreibung(version, dateien),
|
|
212
|
+
# ein Paket mit Scope ist auf npm sonst privat - und das Hochladen scheitert
|
|
213
|
+
"publishConfig": {"access": "public"},
|
|
214
|
+
}
|
|
215
|
+
return (json.dumps(daten, indent=2, ensure_ascii=True) + "\n").encode()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def _tar_eintrag(tf: tarfile.TarFile, name: str, daten: bytes) -> None:
|
|
219
|
+
ti = tarfile.TarInfo(name)
|
|
220
|
+
ti.size, ti.mtime, ti.mode = len(daten), ZEIT_TAR, 0o644
|
|
221
|
+
ti.uid = ti.gid = 0
|
|
222
|
+
ti.uname = ti.gname = ""
|
|
223
|
+
tf.addfile(ti, io.BytesIO(daten))
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def npm_bauen(version: str, dateien: dict, paketversion: str | None = None) -> tuple[str, bytes]:
|
|
227
|
+
paketversion = paketversion or version
|
|
228
|
+
roh = io.BytesIO()
|
|
229
|
+
with tarfile.open(fileobj=roh, mode="w", format=tarfile.PAX_FORMAT) as tf:
|
|
230
|
+
_tar_eintrag(tf, "package/package.json", package_json(version, dateien, paketversion))
|
|
231
|
+
for rel in sorted(dateien):
|
|
232
|
+
_tar_eintrag(tf, "package/" + rel, dateien[rel])
|
|
233
|
+
gz = io.BytesIO()
|
|
234
|
+
with gzip.GzipFile(filename="", mode="wb", fileobj=gz, mtime=0, compresslevel=9) as g:
|
|
235
|
+
g.write(roh.getvalue())
|
|
236
|
+
return f"koolie-{paketversion}.tgz", gz.getvalue()
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
# --- Manifeste -----------------------------------------------------------------------
|
|
240
|
+
def scoop_bauen(version: str, url: str, hashwert: str) -> bytes:
|
|
241
|
+
daten = {
|
|
242
|
+
"version": version,
|
|
243
|
+
"description": BESCHREIBUNG,
|
|
244
|
+
"homepage": REPO,
|
|
245
|
+
"license": "GPL-3.0-only",
|
|
246
|
+
"suggest": {"Python 3.8+": "python"},
|
|
247
|
+
"url": url,
|
|
248
|
+
"hash": hashwert,
|
|
249
|
+
"extract_dir": f"koolie-{version}",
|
|
250
|
+
"bin": [["paketquellen\\koolie.cmd", "koolie"]],
|
|
251
|
+
"notes": HINWEIS.format(v=version),
|
|
252
|
+
"checkver": "github",
|
|
253
|
+
"autoupdate": {
|
|
254
|
+
"url": f"{REPO}/releases/download/v$version/koolie-$version.tar.gz",
|
|
255
|
+
"extract_dir": "koolie-$version",
|
|
256
|
+
"hash": {"url": "$url.sha256"},
|
|
257
|
+
},
|
|
258
|
+
}
|
|
259
|
+
return (json.dumps(daten, indent=4, ensure_ascii=True) + "\n").encode()
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def homebrew_bauen(version: str, url: str, hashwert: str) -> bytes:
|
|
263
|
+
text = f'''# Koolie {version} - Formel fuer einen eigenen Tap (CR-2026-168, D-520).
|
|
264
|
+
# Erzeugt von paketquellen/bauen.py; nicht von Hand aendern.
|
|
265
|
+
class Koolie < Formula
|
|
266
|
+
desc "{BESCHREIBUNG}"
|
|
267
|
+
homepage "{REPO}"
|
|
268
|
+
url "{url}"
|
|
269
|
+
sha256 "{hashwert}"
|
|
270
|
+
license "GPL-3.0-only"
|
|
271
|
+
|
|
272
|
+
depends_on "python@3.13"
|
|
273
|
+
|
|
274
|
+
def install
|
|
275
|
+
libexec.install Dir["*"], ".koolie"
|
|
276
|
+
(bin/"koolie").write <<~EOS
|
|
277
|
+
#!/bin/sh
|
|
278
|
+
exec "#{{Formula["python@3.13"].opt_bin}}/python3.13" "#{{libexec}}/paketquellen/koolie_befehl.py" "$@"
|
|
279
|
+
EOS
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def caveats
|
|
283
|
+
"{HINWEIS.format(v=version)}"
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
test do
|
|
287
|
+
assert_match "koolie #{{version}}", shell_output("#{{bin}}/koolie --version")
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
'''
|
|
291
|
+
return text.encode()
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
# --- Nachpruefen ---------------------------------------------------------------------
|
|
295
|
+
def nachpruefen(version: str, dateien: dict, whl: bytes, tgz: bytes,
|
|
296
|
+
scoop: bytes, brew: bytes, hashwert: str, vorab: int | None = None) -> list:
|
|
297
|
+
befunde = []
|
|
298
|
+
wversion, nversion = paketversionen(version, vorab)
|
|
299
|
+
# unabhaengig von paketversionen(): eine Vorabversion darf nie die Version der Marke
|
|
300
|
+
# belegen - eine Version laesst sich auf PyPI und npm nur einmal vergeben (D-529)
|
|
301
|
+
soll_w, soll_n = (version, version) if vorab is None else (f"{version}.dev{vorab}", f"{version}-dev.{vorab}")
|
|
302
|
+
if (wversion, nversion) != (soll_w, soll_n):
|
|
303
|
+
befunde.append(f"Vorabversion: Wheel {wversion}, npm {nversion} statt {soll_w}, {soll_n}")
|
|
304
|
+
soll = set(dateien)
|
|
305
|
+
with zipfile.ZipFile(io.BytesIO(whl)) as zf:
|
|
306
|
+
namen = zf.namelist()
|
|
307
|
+
baum = {n[len("koolie/baum/"):] for n in namen if n.startswith("koolie/baum/")}
|
|
308
|
+
if baum != soll:
|
|
309
|
+
befunde.append(f"Wheel: {len(baum ^ soll)} Dateien weichen vom Archiv ab")
|
|
310
|
+
di = f"koolie-{wversion}.dist-info/"
|
|
311
|
+
record = zf.read(di + "RECORD").decode().splitlines()
|
|
312
|
+
for zeile in record:
|
|
313
|
+
name, h, groesse = zeile.rsplit(",", 2)
|
|
314
|
+
if name == di + "RECORD":
|
|
315
|
+
continue
|
|
316
|
+
d = zf.read(name)
|
|
317
|
+
if h != _record_hash(d) or int(groesse) != len(d):
|
|
318
|
+
befunde.append(f"Wheel: RECORD stimmt nicht fuer {name}")
|
|
319
|
+
if len(record) != len(namen):
|
|
320
|
+
befunde.append("Wheel: RECORD zaehlt nicht jede Datei")
|
|
321
|
+
meta = zf.read(di + "METADATA").decode("utf-8")
|
|
322
|
+
if f"Version: {wversion}\n" not in meta:
|
|
323
|
+
befunde.append("Wheel: Version in METADATA")
|
|
324
|
+
if RELATIVER_LINK.search(meta):
|
|
325
|
+
befunde.append("Wheel: relativer Link in der Beschreibung - auf PyPI fuehrt er ins Leere")
|
|
326
|
+
with tarfile.open(fileobj=io.BytesIO(tgz), mode="r:gz") as tf:
|
|
327
|
+
namen = {m.name[len("package/"):] for m in tf.getmembers() if m.isfile()}
|
|
328
|
+
pj = json.loads(tf.extractfile("package/package.json").read())
|
|
329
|
+
if namen - {"package.json"} != soll:
|
|
330
|
+
befunde.append("npm: Dateimenge weicht vom Archiv ab")
|
|
331
|
+
if pj.get("version") != nversion or "scripts" in pj:
|
|
332
|
+
befunde.append("npm: Version oder Installationsskript in package.json")
|
|
333
|
+
if pj["bin"]["koolie"] not in soll:
|
|
334
|
+
befunde.append("npm: bin zeigt auf keine Datei des Baums")
|
|
335
|
+
if pj.get("name") != NPM_NAME or pj.get("publishConfig", {}).get("access") != "public":
|
|
336
|
+
befunde.append(f"npm: Name nicht {NPM_NAME} oder nicht oeffentlich (publishConfig)")
|
|
337
|
+
if not pj.get("readme") or RELATIVER_LINK.search(pj["readme"]):
|
|
338
|
+
befunde.append("npm: readme fehlt oder traegt einen relativen Link")
|
|
339
|
+
sc = json.loads(scoop)
|
|
340
|
+
if sc["hash"] != hashwert or sc["version"] != version:
|
|
341
|
+
befunde.append("Scoop: Hash oder Version")
|
|
342
|
+
if sc["bin"][0][0].replace("\\", "/") not in soll:
|
|
343
|
+
befunde.append("Scoop: bin zeigt auf keine Datei des Baums")
|
|
344
|
+
if f'sha256 "{hashwert}"' not in brew.decode():
|
|
345
|
+
befunde.append("Homebrew: Hash")
|
|
346
|
+
return befunde
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def main(argv: list | None = None) -> int:
|
|
350
|
+
ap = argparse.ArgumentParser(description="Pakete der Paketquellen aus einem Release-Archiv bauen.")
|
|
351
|
+
ap.add_argument("--archiv", required=True)
|
|
352
|
+
ap.add_argument("--aus", required=True)
|
|
353
|
+
ap.add_argument("--url-basis", default=None,
|
|
354
|
+
help="Adresse des Archivs ohne Dateinamen (Standard: GitHub-Release der Marke)")
|
|
355
|
+
ap.add_argument("--vorab", type=int, default=None, metavar="N",
|
|
356
|
+
help="Vorabversion <V>.devN (Wheel) und <V>-dev.N (npm) fuer TestPyPI (D-529)")
|
|
357
|
+
a = ap.parse_args(argv)
|
|
358
|
+
try:
|
|
359
|
+
version, praefix, dateien = archiv_lesen(a.archiv)
|
|
360
|
+
except (Befund, OSError, tarfile.TarError) as exc:
|
|
361
|
+
print(f"FEHLER: {exc}", file=sys.stderr)
|
|
362
|
+
return 1
|
|
363
|
+
with open(a.archiv, "rb") as fh:
|
|
364
|
+
archivdaten = fh.read()
|
|
365
|
+
hashwert = sha256(archivdaten)
|
|
366
|
+
basis = (a.url_basis or f"{REPO}/releases/download/v{version}").rstrip("/")
|
|
367
|
+
url = f"{basis}/{praefix}.tar.gz"
|
|
368
|
+
|
|
369
|
+
if a.vorab is not None and a.vorab < 1:
|
|
370
|
+
print("FEHLER: --vorab braucht eine Zahl ab 1", file=sys.stderr)
|
|
371
|
+
return 2
|
|
372
|
+
wversion, nversion = paketversionen(version, a.vorab)
|
|
373
|
+
whl_name, whl = wheel_bauen(version, dateien, wversion)
|
|
374
|
+
tgz_name, tgz = npm_bauen(version, dateien, nversion)
|
|
375
|
+
scoop = scoop_bauen(version, url, hashwert)
|
|
376
|
+
brew = homebrew_bauen(version, url, hashwert)
|
|
377
|
+
befunde = nachpruefen(version, dateien, whl, tgz, scoop, brew, hashwert, a.vorab)
|
|
378
|
+
# bytegleich wiederholbar - ein zweiter Bau muss dieselben Bytes liefern
|
|
379
|
+
if (wheel_bauen(version, dateien, wversion)[1],
|
|
380
|
+
npm_bauen(version, dateien, nversion)[1]) != (whl, tgz):
|
|
381
|
+
befunde.append("zweiter Bau nicht bytegleich")
|
|
382
|
+
|
|
383
|
+
os.makedirs(os.path.join(a.aus, "scoop"), exist_ok=True)
|
|
384
|
+
os.makedirs(os.path.join(a.aus, "homebrew"), exist_ok=True)
|
|
385
|
+
erzeugt = {whl_name: whl, tgz_name: tgz, "scoop/koolie.json": scoop,
|
|
386
|
+
"homebrew/koolie.rb": brew}
|
|
387
|
+
for rel, daten in erzeugt.items():
|
|
388
|
+
with open(os.path.join(a.aus, rel), "wb") as fh:
|
|
389
|
+
fh.write(daten)
|
|
390
|
+
summen = {os.path.basename(a.archiv): hashwert}
|
|
391
|
+
summen.update({rel: sha256(d) for rel, d in erzeugt.items()})
|
|
392
|
+
with open(os.path.join(a.aus, "SHA256SUMS"), "w", encoding="utf-8", newline="\n") as fh:
|
|
393
|
+
for rel in sorted(summen):
|
|
394
|
+
fh.write(f"{summen[rel]} {rel}\n")
|
|
395
|
+
|
|
396
|
+
if a.vorab is not None:
|
|
397
|
+
print(f"Vorabversion: Wheel {wversion}, npm {nversion} (nur fuer TestPyPI, D-529)")
|
|
398
|
+
print(f"Koolie {version}: {len(dateien)} Dateien aus {os.path.basename(a.archiv)} "
|
|
399
|
+
f"(SHA-256 {hashwert[:8]}...{hashwert[-8:]})")
|
|
400
|
+
for rel, daten in erzeugt.items():
|
|
401
|
+
print(f" {rel:34} {len(daten):>10} Bytes")
|
|
402
|
+
print(f" Download-Adresse: {url}")
|
|
403
|
+
if befunde:
|
|
404
|
+
print("BEFUNDE:", *befunde, sep="\n ")
|
|
405
|
+
return 1
|
|
406
|
+
print("Nachpruefung ohne Befund (Wheel, npm, Scoop, Homebrew; zweimal bytegleich)")
|
|
407
|
+
return 0
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
if __name__ == "__main__":
|
|
411
|
+
sys.exit(main())
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
rem Koolie - der Befehl koolie fuer Windows aus einem entpackten Release-Archiv
|
|
3
|
+
rem (CR-2026-168, D-520). Scoop legt einen Shim auf diese Datei.
|
|
4
|
+
rem
|
|
5
|
+
rem Sucht ein Python ab 3.8 und reicht alle Argumente an koolie_befehl.py weiter. Anders
|
|
6
|
+
rem als install.cmd haelt er am Ende nicht an: Er wird aus einem offenen Terminal
|
|
7
|
+
rem aufgerufen, nicht per Doppelklick.
|
|
8
|
+
rem
|
|
9
|
+
rem BEWUSST OHNE SPRUNGMARKEN wie install.cmd: Das Release-Archiv liefert LF-Zeilenenden.
|
|
10
|
+
setlocal
|
|
11
|
+
set "KOOLIE_PY="
|
|
12
|
+
for %%K in ("py -3" "python3" "python") do (
|
|
13
|
+
if not defined KOOLIE_PY (
|
|
14
|
+
%%~K -c "import sys; sys.exit(0 if sys.version_info >= (3, 8) else 1)" >nul 2>&1 && set "KOOLIE_PY=%%~K"
|
|
15
|
+
)
|
|
16
|
+
)
|
|
17
|
+
if not defined KOOLIE_PY (
|
|
18
|
+
echo Koolie braucht Python 3.8 oder neuer - gefunden wurde keines.
|
|
19
|
+
echo Installieren, zum Beispiel: winget install Python.Python.3.12
|
|
20
|
+
endlocal & exit /b 9009
|
|
21
|
+
)
|
|
22
|
+
%KOOLIE_PY% "%~dp0koolie_befehl.py" %*
|
|
23
|
+
endlocal & exit /b %ERRORLEVEL%
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
koolie_befehl.py - Der Befehl `koolie`, wie ihn die Paketquellen einrichten (CR-2026-168).
|
|
4
|
+
|
|
5
|
+
Hintergrund (D-518, D-519): Eine Paketquelle legt Koolie auf den Rechner, nicht in ein
|
|
6
|
+
Projekt. Ins Projekt kommt es erst durch den Aufruf dieses Befehls - und nur dieser Aufruf
|
|
7
|
+
laeuft bei jeder Paketquelle im Terminal des Nutzers. Der Installationsschritt der
|
|
8
|
+
Paketquelle selbst tut es nicht (gemessen 2026-09-30): pip fuehrt beim Installieren eines
|
|
9
|
+
Wheels nichts aus, npm verschluckt die Ausgabe eines Installationsskripts, Chocolatey gibt
|
|
10
|
+
ihm kein Terminal, winget installiert still. Deshalb steht das Banner HIER und nicht in
|
|
11
|
+
einem Installationsskript.
|
|
12
|
+
|
|
13
|
+
koolie der Dialog aus install_dialog.py, mit Banner; das
|
|
14
|
+
aktuelle Verzeichnis ist die Vorgabe (D-532)
|
|
15
|
+
koolie <Argumente von install.py> Banner, dann install.py mit genau diesen Argumenten
|
|
16
|
+
koolie --version nur die Version, ohne Banner
|
|
17
|
+
|
|
18
|
+
Das Banner waehlt seine Variante selbst (banner.py, D-506): ohne Terminal die
|
|
19
|
+
Textvariante, mit NO_COLOR einfarbig, mit --no-banner oder KOOLIE_NO_BANNER=1 gar nichts.
|
|
20
|
+
--no-banner wird vor dem Aufruf von install.py entfernt; install.py kennt es nicht.
|
|
21
|
+
|
|
22
|
+
Der Kern liegt neben diesem Ordner unter .koolie/core - im Wheel, im npm-Paket und im
|
|
23
|
+
entpackten Release-Archiv gleich (D-520). Dieses Skript entscheidet nichts, was install.py
|
|
24
|
+
nicht selbst prueft.
|
|
25
|
+
|
|
26
|
+
Exit-Code: der von install.py beziehungsweise des Dialogs; 2, wenn der Kern fehlt.
|
|
27
|
+
"""
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
import os
|
|
31
|
+
import subprocess
|
|
32
|
+
import sys
|
|
33
|
+
|
|
34
|
+
WURZEL = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
35
|
+
KERN = os.path.join(WURZEL, ".koolie", "core")
|
|
36
|
+
KEIN_BANNER = "--no-banner"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def kern_da() -> bool:
|
|
40
|
+
return all(os.path.isfile(os.path.join(KERN, n))
|
|
41
|
+
for n in ("install.py", "install_dialog.py", "banner.py", "VERSION"))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def version() -> str:
|
|
45
|
+
with open(os.path.join(KERN, "VERSION"), encoding="utf-8") as fh:
|
|
46
|
+
return fh.read().strip()
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def banner_ausgeben(argv: list) -> None:
|
|
50
|
+
"""Wie im Dialog: in einer eigenen Huelle, das Banner haelt nichts auf (F-5)."""
|
|
51
|
+
try:
|
|
52
|
+
if KERN not in sys.path:
|
|
53
|
+
sys.path.insert(0, KERN)
|
|
54
|
+
import banner
|
|
55
|
+
banner.ausgeben(argv=argv, version=version())
|
|
56
|
+
except Exception: # noqa: BLE001
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def main(argv: list | None = None) -> int:
|
|
61
|
+
argv = list(sys.argv[1:] if argv is None else argv)
|
|
62
|
+
if not kern_da():
|
|
63
|
+
print(f"FEHLER: Der Kern fehlt unter {KERN} - das Paket ist unvollstaendig.",
|
|
64
|
+
file=sys.stderr)
|
|
65
|
+
return 2
|
|
66
|
+
if argv in (["--version"], ["-V"]):
|
|
67
|
+
print(f"koolie {version()}")
|
|
68
|
+
return 0
|
|
69
|
+
rest = [a for a in argv if a != KEIN_BANNER]
|
|
70
|
+
if not rest:
|
|
71
|
+
# Der Dialog gibt das Banner selbst aus und wertet --no-banner selbst aus. Das
|
|
72
|
+
# Verzeichnis des Aufrufs ist die Vorgabe fuer das Projekt (D-532): uvx, pipx run
|
|
73
|
+
# und npx starten den Befehl dort, wo der Nutzer steht.
|
|
74
|
+
return subprocess.run([sys.executable, os.path.join(KERN, "install_dialog.py"),
|
|
75
|
+
*argv, "--vorgabe", os.getcwd()]).returncode
|
|
76
|
+
banner_ausgeben(argv)
|
|
77
|
+
sys.stdout.flush()
|
|
78
|
+
return subprocess.run([sys.executable, os.path.join(KERN, "install.py"), *rest]).returncode
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
sys.exit(main())
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Koolie - der Befehl koolie aus dem npm-Paket (CR-2026-168, D-520).
|
|
3
|
+
//
|
|
4
|
+
// Koolie ist Python; dieses Skript sucht ein Python ab 3.8 und reicht alle Argumente an
|
|
5
|
+
// paketquellen/koolie_befehl.py weiter. stdio wird geerbt: Das Banner sieht dasselbe
|
|
6
|
+
// Terminal wie der Nutzer (gemessen 2026-09-30: npx/bin mit Terminal, postinstall ohne).
|
|
7
|
+
// Bewusst KEIN Installationsskript im Paket (D-519).
|
|
8
|
+
"use strict";
|
|
9
|
+
const { spawnSync } = require("child_process");
|
|
10
|
+
const path = require("path");
|
|
11
|
+
|
|
12
|
+
const befehl = path.join(__dirname, "..", "koolie_befehl.py");
|
|
13
|
+
const kandidaten = process.platform === "win32"
|
|
14
|
+
? [["py", ["-3"]], ["python3", []], ["python", []]]
|
|
15
|
+
: [["python3", []], ["python", []]];
|
|
16
|
+
const probe = "import sys; sys.exit(0 if sys.version_info >= (3, 8) else 1)";
|
|
17
|
+
|
|
18
|
+
for (const [exe, vorab] of kandidaten) {
|
|
19
|
+
const p = spawnSync(exe, [...vorab, "-c", probe], { stdio: "ignore" });
|
|
20
|
+
if (p.status === 0) {
|
|
21
|
+
const lauf = spawnSync(exe, [...vorab, befehl, ...process.argv.slice(2)], { stdio: "inherit" });
|
|
22
|
+
process.exit(lauf.status === null ? 1 : lauf.status);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
console.error("Koolie braucht Python 3.8 oder neuer - gefunden wurde keines.");
|
|
26
|
+
process.exit(9009);
|