@renoxar/koolie 1.25.0 → 2.0.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/.github/workflows/publish.yml +177 -0
- package/.koolie/QUELLREPOSITORIUM.md +9 -14
- package/.koolie/core/CHANGELOG.md +59 -0
- package/.koolie/core/LICENSE-HINWEIS.md +5 -6
- package/.koolie/core/OWNERS.md +2 -2
- package/.koolie/core/VERSION +1 -1
- package/.koolie/core/build/doc/00-kopf.md +6 -6
- package/.koolie/core/build/doc/01-executive-summary.md +8 -8
- package/.koolie/core/build/doc/03-ziele-nichtziele.md +2 -2
- package/.koolie/core/build/doc/04-geltungsbereich.md +4 -4
- package/.koolie/core/build/doc/05-glossar.md +3 -3
- package/.koolie/core/build/doc/07-architektur.md +2 -2
- package/.koolie/core/build/doc/07a-abbildungsschicht.md +9 -9
- package/.koolie/core/build/doc/08-trennung.md +3 -3
- package/.koolie/core/build/doc/09-betriebsmodi.md +8 -8
- package/.koolie/core/build/doc/15-referenzstruktur.md +56 -27
- package/.koolie/core/build/doc/16-agentenanweisung.md +2 -2
- package/.koolie/core/build/doc/20-referenz-skills.md +46 -46
- package/.koolie/core/build/doc/25-governance.md +9 -1
- package/.koolie/core/build/doc/26-qs-test.md +32 -3
- package/.koolie/core/build/doc/27-pilot.md +2 -2
- package/.koolie/core/build/doc/28-uebernahme.md +9 -1
- package/.koolie/core/build/doc/30-roadmap.md +3 -1
- package/.koolie/core/build/doc/31-anhaenge.md +1 -1
- package/.koolie/core/checklists/01-preflight.md +3 -3
- package/.koolie/core/checklists/02-privacy-context.md +1 -1
- package/.koolie/core/checklists/03-before-code-change.md +2 -2
- package/.koolie/core/checklists/04-review-ai-code.md +1 -1
- package/.koolie/core/checklists/05-testing.md +1 -1
- package/.koolie/core/checklists/06-security.md +1 -1
- package/.koolie/core/checklists/08-merge-request.md +1 -1
- package/.koolie/core/checklists/09-onboarding.md +2 -2
- package/.koolie/core/checklists/10-project-adoption.md +8 -8
- package/.koolie/core/checklists/11-framework-release.md +14 -14
- package/.koolie/core/clientmap.py +2 -2
- package/.koolie/core/clients/README.md +54 -52
- package/.koolie/core/clients/_template/CLIENT_PACK.md +19 -19
- package/.koolie/core/clients/claude-code/CLIENT_PACK.md +108 -164
- package/.koolie/core/clients/claude-code/manifest.json +5 -5
- package/.koolie/core/clients/claude-code/root-template/.claude/README.md +9 -9
- package/.koolie/core/clients/cursor/CLIENT_PACK.md +66 -60
- package/.koolie/core/clients/cursor/manifest.json +3 -3
- package/.koolie/core/clients/cursor/root-template/.cursor/README.md +3 -3
- package/.koolie/core/clients/devin-desktop/CLIENT_PACK.md +62 -64
- package/.koolie/core/clients/devin-desktop/manifest.json +5 -5
- package/.koolie/core/clients/devin-desktop/root-template/.devin/README.md +9 -9
- package/.koolie/core/clients/kiro/CLIENT_PACK.md +55 -48
- package/.koolie/core/clients/kiro/manifest.json +4 -4
- package/.koolie/core/clients/kiro/root-template/.kiro/README.md +3 -3
- package/.koolie/core/clients/openai-codex/CLIENT_PACK.md +98 -103
- package/.koolie/core/clients/openai-codex/manifest.json +3 -3
- package/.koolie/core/clients/openai-codex/root-template/.codex/README.md +2 -2
- package/.koolie/core/decision-trees/02-may-ai-do-task.md +2 -2
- package/.koolie/core/decision-trees/03-analyze-or-modify.md +12 -12
- package/.koolie/core/decision-trees/04-required-review.md +1 -1
- package/.koolie/core/docs/ADOPTION_GUIDE.md +281 -385
- package/.koolie/core/docs/DOCUMENTATION_STANDARD.md +44 -36
- package/.koolie/core/docs/PLACEHOLDER_REGISTRY.md +8 -8
- package/.koolie/core/docs/ROADMAP.md +34 -17
- package/.koolie/core/docs/RUNTIME_GLOSSARY.md +34 -35
- package/.koolie/core/examples/example-ergebnisbericht.md +1 -1
- package/.koolie/core/examples/example-mr-description.md +2 -2
- package/.koolie/core/framework/core/00-principles.md +1 -1
- package/.koolie/core/framework/core/01-governance.md +8 -8
- package/.koolie/core/framework/core/02-privacy.md +12 -12
- package/.koolie/core/framework/core/03-security.md +13 -11
- package/.koolie/core/framework/core/05-working-model.md +22 -22
- package/.koolie/core/framework/core/06-prompting-rules.md +5 -5
- package/.koolie/core/framework/core/07-review-rules.md +1 -1
- package/.koolie/core/framework/core/08-skill-conventions.md +11 -11
- package/.koolie/core/framework/core/09-risk-model.md +6 -6
- package/.koolie/core/framework/core/10-error-escalation.md +1 -1
- package/.koolie/core/framework/org-policies/MAPPING_CLASSIFICATION.md +1 -1
- package/.koolie/core/framework/overlay-patterns/general.md +63 -75
- package/.koolie/core/framework/role-packs/README.md +16 -28
- package/.koolie/core/framework/role-packs/_template/ROLE_PACK.md +3 -3
- package/.koolie/core/framework/role-packs/requirements-engineering/ROLE_PACK.md +23 -22
- package/.koolie/core/framework/role-packs/requirements-engineering/runtime/30-role-requirements-engineering.md +5 -5
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/EXAMPLES.md +5 -5
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/{role-re-ticket → koolie-ticket}/SKILL.md +9 -9
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/koolie-ticket/TESTS.md +22 -0
- package/.koolie/core/framework/role-packs/software-development/ROLE_PACK.md +16 -16
- package/.koolie/core/framework/role-packs/software-development/runtime/30-role-software-development.md +1 -1
- package/.koolie/core/framework/runtime/agents/{fw-reviewer.md → koolie-reviewer.md} +2 -2
- package/.koolie/core/framework/runtime/permissions.json +13 -13
- package/.koolie/core/framework/runtime/root-instruction.md +5 -5
- package/.koolie/core/framework/runtime/rules/10-privacy-security.md +2 -2
- package/.koolie/core/framework/runtime/rules/15-development-rules.md +1 -1
- package/.koolie/core/framework/runtime/rules/16-plan-spezifikation.md +1 -1
- package/.koolie/core/framework/runtime/rules/20-project-overlay.md +2 -2
- package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/EXAMPLES.md +8 -8
- package/.koolie/core/framework/skills/{fw-bugfix-prepare → koolie-bugfix-prepare}/SKILL.md +21 -21
- package/.koolie/core/framework/skills/koolie-bugfix-prepare/TESTS.md +15 -0
- package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/EXAMPLES.md +6 -6
- package/.koolie/core/framework/skills/{fw-change-analyze → koolie-change-analyze}/SKILL.md +12 -12
- package/.koolie/core/framework/skills/koolie-change-analyze/TESTS.md +16 -0
- package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/EXAMPLES.md +4 -4
- package/.koolie/core/framework/skills/{fw-change-small → koolie-change-small}/SKILL.md +15 -15
- package/.koolie/core/framework/skills/koolie-change-small/TESTS.md +13 -0
- package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/EXAMPLES.md +4 -4
- package/.koolie/core/framework/skills/{fw-code-explain → koolie-code-explain}/SKILL.md +10 -10
- package/.koolie/core/framework/skills/koolie-code-explain/TESTS.md +11 -0
- package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/EXAMPLES.md +3 -3
- package/.koolie/core/framework/skills/{fw-docs-update → koolie-docs-update}/SKILL.md +8 -8
- package/.koolie/core/framework/skills/koolie-docs-update/TESTS.md +12 -0
- package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/EXAMPLES.md +6 -6
- package/.koolie/core/framework/skills/{fw-error-analyze → koolie-error-analyze}/SKILL.md +15 -15
- package/.koolie/core/framework/skills/koolie-error-analyze/TESTS.md +12 -0
- package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/EXAMPLES.md +6 -6
- package/.koolie/core/framework/skills/{fw-mr-description → koolie-mr-description}/SKILL.md +8 -8
- package/.koolie/core/framework/skills/koolie-mr-description/TESTS.md +12 -0
- package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/EXAMPLES.md +4 -4
- package/.koolie/core/framework/skills/{fw-overlay-pflege → koolie-overlay-pflege}/SKILL.md +8 -8
- package/.koolie/core/framework/skills/koolie-overlay-pflege/TESTS.md +13 -0
- package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/EXAMPLES.md +7 -7
- package/.koolie/core/framework/skills/{fw-plan → koolie-plan}/SKILL.md +14 -14
- package/.koolie/core/framework/skills/koolie-plan/TESTS.md +14 -0
- package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/EXAMPLES.md +4 -4
- package/.koolie/core/framework/skills/{fw-refactor → koolie-refactor}/SKILL.md +12 -12
- package/.koolie/core/framework/skills/koolie-refactor/TESTS.md +14 -0
- package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/EXAMPLES.md +4 -4
- package/.koolie/core/framework/skills/{fw-repo-analyze → koolie-repo-analyze}/SKILL.md +8 -8
- package/.koolie/core/framework/skills/koolie-repo-analyze/TESTS.md +11 -0
- package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/EXAMPLES.md +3 -3
- package/.koolie/core/framework/skills/{fw-review-support → koolie-review-support}/SKILL.md +7 -7
- package/.koolie/core/framework/skills/koolie-review-support/TESTS.md +13 -0
- package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/CHANGELOG.md +2 -1
- package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/EXAMPLES.md +5 -5
- package/.koolie/core/framework/skills/{fw-tests → koolie-tests}/SKILL.md +11 -11
- package/.koolie/core/framework/skills/koolie-tests/TESTS.md +12 -0
- package/.koolie/core/framework/tech-packs/README.md +2 -2
- package/.koolie/core/framework/tech-packs/_template/TECH_PACK.md +2 -2
- package/.koolie/core/governance/ADOPTION_REGISTRY.md +22 -58
- package/.koolie/core/governance/CHANGE_REQUEST_TEMPLATE.md +1 -1
- package/.koolie/core/governance/DECISION_LOG.md +7 -1
- package/.koolie/core/governance/EXCEPTION_PROCESS.md +1 -1
- package/.koolie/core/governance/FEEDBACK_PROCESS.md +1 -1
- package/.koolie/core/governance/FRAMEWORK_DEV_PROFILE.md +64 -66
- package/.koolie/core/governance/PRIORITY_HIERARCHY.md +13 -13
- package/.koolie/core/governance/RACI.md +3 -3
- package/.koolie/core/governance/RELEASE_PROCESS.md +101 -108
- package/.koolie/core/governance/change-requests/CR-2026-173-oeffentlicher-auftritt-koolie-praefix.md +67 -0
- package/.koolie/core/install.py +99 -0
- package/.koolie/core/koexistenz.py +2 -2
- package/.koolie/core/onboarding/GUIDE.md +7 -7
- package/.koolie/core/onboarding/KNOWLEDGE_CHECK.md +1 -1
- package/.koolie/core/onboarding/MENTOR_CHECKLIST.md +3 -3
- package/.koolie/core/onboarding/QUICKSTART.md +2 -2
- package/.koolie/core/onboarding/REFERENCE.md +14 -14
- package/.koolie/core/onboarding/exercises/EXERCISES.md +8 -8
- package/.koolie/core/onboarding/exercises/README.md +47 -65
- package/.koolie/core/pilot/PILOT_CONCEPT.md +1 -1
- package/.koolie/core/prompts/01-understand-codebase.md +11 -7
- package/.koolie/core/prompts/02-impact-analysis.md +17 -7
- package/.koolie/core/prompts/03-implementation-planning.md +10 -6
- package/.koolie/core/prompts/04-code-generation.md +11 -5
- package/.koolie/core/prompts/05-test-generation.md +13 -7
- package/.koolie/core/prompts/06-refactoring.md +14 -8
- package/.koolie/core/prompts/07-debugging.md +13 -11
- package/.koolie/core/prompts/08-security-review.md +2 -2
- package/.koolie/core/prompts/09-performance-analysis.md +2 -2
- package/.koolie/core/prompts/10-documentation.md +6 -4
- package/.koolie/core/prompts/11-merge-request-review.md +7 -5
- package/.koolie/core/prompts/12-developer-training.md +5 -3
- package/.koolie/core/prompts/README.md +17 -15
- package/.koolie/core/templates/MR_AI_DISCLOSURE.md +2 -2
- package/.koolie/core/templates/PLAN_TEMPLATE.md +2 -2
- package/.koolie/core/templates/SKILL_TEMPLATE.md +3 -3
- package/.koolie/core/templates/project-overlay/OVERLAY.md +28 -22
- package/.koolie/core/templates/project-overlay/documents/architecture/decisions/README.md +1 -1
- package/.koolie/core/tests/EDGE_CASES.md +4 -7
- package/.koolie/core/tests/TEST_CATALOG.md +33 -33
- package/.koolie/core/tests/protocols/2026-10-02-oeffentlicher-auftritt-2.0.0.md +42 -0
- package/.koolie/core/tests/scripts/hook-check-secrets.py +2 -2
- package/.koolie/core/tests/scripts/hook-overlay-status.py +1 -1
- package/.koolie/core/tests/scripts/probe-pruefungen.py +4 -2
- package/.koolie/core/tests/scripts/pruefungen/berechtigungen.py +7 -7
- package/.koolie/core/tests/scripts/pruefungen/bestand.py +20 -3
- package/.koolie/core/tests/scripts/pruefungen/dokumente.py +88 -0
- package/.koolie/core/tests/scripts/pruefungen/gemeinsam.py +1 -1
- package/.koolie/core/tests/scripts/pruefungen/hooks.py +1 -1
- package/.koolie/core/tests/scripts/pruefungen/overlay.py +5 -5
- package/.koolie/core/tests/scripts/pruefungen/testkatalog.py +5 -5
- package/.koolie/core/tests/scripts/pruefungen/werkzeuge.py +81 -2
- package/.koolie/core/tests/scripts/sonden/teil02_packs_mandat_mcp.py +6 -6
- package/.koolie/core/tests/scripts/sonden/teil03_pruefungen_26_bis_36.py +11 -11
- package/.koolie/core/tests/scripts/sonden/teil04_pruefungen_37_bis_45.py +11 -11
- package/.koolie/core/tests/scripts/sonden/teil05_pruefungen_46_bis_55.py +4 -4
- package/.koolie/core/tests/scripts/sonden/teil06_pruefungen_57_bis_65.py +33 -33
- package/.koolie/core/tests/scripts/sonden/teil07_overlay_und_lieferung.py +3 -3
- package/.koolie/core/tests/scripts/sonden/teil08_pruefungen_66_bis_80.py +3 -3
- package/.koolie/core/tests/scripts/sonden/teil10_pruefungen_83_bis_95.py +3 -3
- package/.koolie/core/tests/scripts/sonden/teil11_pruefungen_104_und_105.py +2 -2
- package/.koolie/core/tests/scripts/sonden/teil14_modi_ausnahmen_skills.py +1 -1
- package/.koolie/core/tests/scripts/sonden/teil16_koexistenz.py +5 -5
- package/.koolie/core/tests/scripts/sonden/teil17_paketquellen.py +33 -0
- package/.koolie/core/tests/scripts/sonden/teil19_skillnamen.py +97 -0
- package/.koolie/core/tests/scripts/sonden/teil20_kennungen.py +70 -0
- package/.koolie/core/tests/scripts/validate-framework.py +15 -6
- package/.koolie/core/tests/scripts/validate-output.py +1 -1
- package/CONTRIBUTING.md +16 -10
- package/QUICKSTART.en.md +44 -51
- package/QUICKSTART.md +44 -50
- package/package.json +2 -2
- package/paketquellen/README.md +11 -11
- package/.koolie/core/framework/role-packs/requirements-engineering/skills/role-re-ticket/TESTS.md +0 -22
- package/.koolie/core/framework/skills/fw-bugfix-prepare/TESTS.md +0 -15
- package/.koolie/core/framework/skills/fw-change-analyze/TESTS.md +0 -16
- package/.koolie/core/framework/skills/fw-change-small/TESTS.md +0 -13
- package/.koolie/core/framework/skills/fw-code-explain/TESTS.md +0 -11
- package/.koolie/core/framework/skills/fw-docs-update/TESTS.md +0 -12
- package/.koolie/core/framework/skills/fw-error-analyze/TESTS.md +0 -12
- package/.koolie/core/framework/skills/fw-mr-description/TESTS.md +0 -12
- package/.koolie/core/framework/skills/fw-overlay-pflege/TESTS.md +0 -13
- package/.koolie/core/framework/skills/fw-plan/TESTS.md +0 -14
- package/.koolie/core/framework/skills/fw-refactor/TESTS.md +0 -14
- package/.koolie/core/framework/skills/fw-repo-analyze/TESTS.md +0 -11
- package/.koolie/core/framework/skills/fw-review-support/TESTS.md +0 -13
- package/.koolie/core/framework/skills/fw-tests/TESTS.md +0 -12
|
@@ -374,7 +374,7 @@ def _47_verlaufszusatz(root: str) -> None:
|
|
|
374
374
|
Zusatz zulaessig bleibt - und dass Pruefung 46 ihn weiterhin richtig einordnet.
|
|
375
375
|
"""
|
|
376
376
|
ersetze(P(root, ".koolie/core/checklists/01-preflight.md".replace("/", os.sep)),
|
|
377
|
-
("| Status | `pilot` |", "| Status | `pilot (Abnahme
|
|
377
|
+
("| Status | `pilot` |", "| Status | `pilot (Abnahme 2026-09-15)` |"))
|
|
378
378
|
|
|
379
379
|
|
|
380
380
|
def _47_tabelle_hinter_ueberschrift(root: str) -> None:
|
|
@@ -491,7 +491,7 @@ def _48_installiertes_pack(root: str) -> None:
|
|
|
491
491
|
"""
|
|
492
492
|
installiert, _ = _48_marken(root)
|
|
493
493
|
_48_datei(root, "14-sonde-installiert.md",
|
|
494
|
-
"Ausgabeformat: Analyse nach `%s/skills/
|
|
494
|
+
"Ausgabeformat: Analyse nach `%s/skills/koolie-repo-analyze/SKILL.md`."
|
|
495
495
|
% installiert)
|
|
496
496
|
|
|
497
497
|
|
|
@@ -593,7 +593,7 @@ gegenprobe("48c", "Ein Clientpfad in der Roadmap bleibt zulaessig - sie fuehrt d
|
|
|
593
593
|
# --- Pruefung 49: ausdruecklicher Skill-Aufruf im Testkatalog (D-146) --------------
|
|
594
594
|
#
|
|
595
595
|
# Der Befund, der sie veranlasst hat, ist am 2026-09-18 an FW-SC-01 gemessen worden: Der
|
|
596
|
-
# Hauptlauf rief `
|
|
596
|
+
# Hauptlauf rief `koolie-change-small` auf, wurde abgewiesen - neun von zwoelf Kernskills
|
|
597
597
|
# fuehren `triggers` ohne `- model`, und das Pack claude-code bildet das auf
|
|
598
598
|
# `disable-model-invocation: true` ab - und arbeitete den Ablauf nicht nach. Damit fiel
|
|
599
599
|
# Schritt 3 des Skills aus, der die Verwender der geaenderten Einheit erhebt; die
|
|
@@ -622,7 +622,7 @@ def _49_skill_ohne_modell(root: str) -> str:
|
|
|
622
622
|
if i < 0:
|
|
623
623
|
continue
|
|
624
624
|
block = text[i:text.find("---", 3)] if text.startswith("---") else text[i:i + 200]
|
|
625
|
-
# Seit 1.17.0 tragen
|
|
625
|
+
# Seit 1.17.0 tragen koolie-bugfix-prepare und koolie-plan `model` (D-451); der naechste
|
|
626
626
|
# Skill ohne model fuehrt Test- und Lintbefehle aus, und Pruefung 49 verlangt dann
|
|
627
627
|
# zu Recht den Schlitz in der Vorbedingung - gemessen wuerde die falsche Regel.
|
|
628
628
|
if "- model" not in block and "<TEST_COMMAND>" not in text and "<LINT_COMMAND>" not in text:
|
|
@@ -27,7 +27,7 @@ from .apparat import (
|
|
|
27
27
|
M57_UNGEBUNDEN = "als nicht gesetzt ("
|
|
28
28
|
|
|
29
29
|
P57_BLATT = (".koolie/core/framework/role-packs/requirements-engineering/skills/"
|
|
30
|
-
"
|
|
30
|
+
"koolie-ticket/TESTS.md").replace("/", os.sep)
|
|
31
31
|
|
|
32
32
|
# Die berichtigte Fassung der Zelle - Anker beider Eingriffe.
|
|
33
33
|
P57_HEUTE = "Übungs-Overlay, dessen `<ISSUE_TRACKER>` **gebunden** ist"
|
|
@@ -170,14 +170,14 @@ def _60_katalogzeile(root: str, zeile: str) -> None:
|
|
|
170
170
|
|
|
171
171
|
|
|
172
172
|
def _60_ohne_schlitz(root: str) -> None:
|
|
173
|
-
"""Ein sitzung-Testfall ruft `/
|
|
173
|
+
"""Ein sitzung-Testfall ruft `/koolie-change-small` und nennt keinen Befehlsschlitz.
|
|
174
174
|
|
|
175
175
|
Genau die Gestalt, in der FW-SC-01 zwei Releases lang dastand - und die zwei
|
|
176
176
|
Laeufe gekostet hat.
|
|
177
177
|
"""
|
|
178
178
|
_60_katalogzeile(root,
|
|
179
179
|
"| FW-SO-08 | Sondenzeile | Sondenvorbedingung ohne Befehlsangabe "
|
|
180
|
-
"| `/
|
|
180
|
+
"| `/koolie-change-small \"<Sondenaufgabe>\"` | Ablehnung | Zugriff "
|
|
181
181
|
"| sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
182
182
|
|
|
183
183
|
|
|
@@ -185,7 +185,7 @@ def _60_mit_schlitz(root: str) -> None:
|
|
|
185
185
|
"""Gegenprobe: dieselbe Zeile, aber die Vorbedingung nennt beide Schlitze."""
|
|
186
186
|
_60_katalogzeile(root,
|
|
187
187
|
"| FW-SO-09 | Sondenzeile | Sondenvorbedingung; `<TEST_COMMAND>` und "
|
|
188
|
-
"`<LINT_COMMAND>` im `allow`-Korb | `/
|
|
188
|
+
"`<LINT_COMMAND>` im `allow`-Korb | `/koolie-change-small \"<Sondenaufgabe>\"` "
|
|
189
189
|
"| Ablehnung | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
190
190
|
|
|
191
191
|
|
|
@@ -196,19 +196,19 @@ def _60_andere_pruefmethode(root: str) -> None:
|
|
|
196
196
|
"""
|
|
197
197
|
_60_katalogzeile(root,
|
|
198
198
|
"| FW-SO-10 | Sondenzeile | Sondenvorbedingung ohne Befehlsangabe "
|
|
199
|
-
"| `/
|
|
199
|
+
"| `/koolie-change-small \"<Sondenaufgabe>\"` | Ablehnung | Zugriff "
|
|
200
200
|
"| review | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
201
201
|
|
|
202
202
|
|
|
203
203
|
def _60_skill_ohne_schlitz(root: str) -> None:
|
|
204
204
|
"""Gegenprobe: ein Skill, dessen Frontmatter keinen Befehl ausfuehrt.
|
|
205
205
|
|
|
206
|
-
Sie belegt, dass der Zuschnitt nicht zu breit ist. `
|
|
206
|
+
Sie belegt, dass der Zuschnitt nicht zu breit ist. `koolie-repo-analyze` ist rein
|
|
207
207
|
lesend und fuehrt keinen Befehlsschlitz.
|
|
208
208
|
"""
|
|
209
209
|
_60_katalogzeile(root,
|
|
210
210
|
"| FW-SO-11 | Sondenzeile | Sondenvorbedingung ohne Befehlsangabe "
|
|
211
|
-
"| `/
|
|
211
|
+
"| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
|
|
212
212
|
"| sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
213
213
|
|
|
214
214
|
|
|
@@ -275,7 +275,7 @@ M61_FREMD = "steht nicht im Vokabular"
|
|
|
275
275
|
M61_ANKER = "keine Zelle mit Prüfmethode gefunden"
|
|
276
276
|
P61_KATALOG = ".koolie/core/tests/TEST_CATALOG.md".replace("/", os.sep)
|
|
277
277
|
P61_KATALOGANKER = "| FW-AK-02 (Basis) |"
|
|
278
|
-
P61_BLATT = ".koolie/core/framework/skills/
|
|
278
|
+
P61_BLATT = ".koolie/core/framework/skills/koolie-repo-analyze/TESTS.md".replace("/", os.sep)
|
|
279
279
|
P61_BLATTANKER = "| SK-001-N03 |"
|
|
280
280
|
|
|
281
281
|
|
|
@@ -287,7 +287,7 @@ def _61_fremdes_wort(root: str) -> None:
|
|
|
287
287
|
"""Eine Katalogzeile mit dem Wort `manuell` - genau der Stand vor 0.67.0."""
|
|
288
288
|
_61_katalogzeile(root,
|
|
289
289
|
"| FW-SO-12 | Sondenzeile | Sondenvorbedingung "
|
|
290
|
-
"| `/
|
|
290
|
+
"| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
|
|
291
291
|
"| manuell | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
292
292
|
|
|
293
293
|
|
|
@@ -295,7 +295,7 @@ def _61_fremdes_wort_im_blatt(root: str) -> None:
|
|
|
295
295
|
"""Dasselbe Wort in einem der dreizehn Blaetter - dort stand es 87-mal."""
|
|
296
296
|
zeile_nach(P(root, P61_BLATT), P61_BLATTANKER,
|
|
297
297
|
"| SK-001-S99 | Sondenzeile | Sondenvorbedingung "
|
|
298
|
-
"| `/
|
|
298
|
+
"| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
|
|
299
299
|
"| manuell | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
300
300
|
|
|
301
301
|
|
|
@@ -303,8 +303,8 @@ def _61_zulaessiger_zusatz(root: str) -> None:
|
|
|
303
303
|
"""Gegenprobe: `sitzung` mit Zusatz - die Schreibweise beider Bestaende."""
|
|
304
304
|
_61_katalogzeile(root,
|
|
305
305
|
"| FW-SO-13 | Sondenzeile | Sondenvorbedingung "
|
|
306
|
-
"| `/
|
|
307
|
-
"| sitzung + Skript `validate-output.py --skill
|
|
306
|
+
"| `/koolie-repo-analyze <Sondenmodul>` | Ablehnung | Zugriff "
|
|
307
|
+
"| sitzung + Skript `validate-output.py --skill koolie-repo-analyze` "
|
|
308
308
|
"| bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
309
309
|
|
|
310
310
|
|
|
@@ -352,30 +352,30 @@ gegenprobe("61c", "`skript+sitzung` und `review` bleiben zulaessig - der Zuschni
|
|
|
352
352
|
# nicht getroffen - und genau sie trugen zwei Skills doppelt.
|
|
353
353
|
M62_WOERTLICH = "nennt die Version wörtlich"
|
|
354
354
|
|
|
355
|
-
P62_SKILL = ".koolie/core/framework/skills/
|
|
356
|
-
P62_PLAN = ".koolie/core/framework/skills/
|
|
355
|
+
P62_SKILL = ".koolie/core/framework/skills/koolie-code-explain/SKILL.md".replace("/", os.sep)
|
|
356
|
+
P62_PLAN = ".koolie/core/framework/skills/koolie-plan/SKILL.md".replace("/", os.sep)
|
|
357
357
|
P62_SCHLITZ = "v<Version aus dem Steckbrief>"
|
|
358
358
|
|
|
359
359
|
|
|
360
360
|
def _62_kopfzeile(root: str) -> None:
|
|
361
361
|
"""Die Kopfzeile der Ausgabevorlage traegt wieder eine woertliche Version."""
|
|
362
362
|
ersetze(P(root, P62_SKILL),
|
|
363
|
-
("## Code-Erklärung –
|
|
364
|
-
"## Code-Erklärung –
|
|
363
|
+
("## Code-Erklärung – koolie-code-explain " + P62_SCHLITZ,
|
|
364
|
+
"## Code-Erklärung – koolie-code-explain v9.9.9", 1))
|
|
365
365
|
|
|
366
366
|
|
|
367
367
|
def _62_erstellt_mit(root: str) -> None:
|
|
368
368
|
"""Die zweite Gestalt: die Zeile `Erstellt mit` im Ergebnisbericht."""
|
|
369
369
|
ersetze(P(root, P62_PLAN),
|
|
370
|
-
("| Erstellt mit |
|
|
371
|
-
"| Erstellt mit |
|
|
370
|
+
("| Erstellt mit | koolie-plan " + P62_SCHLITZ + " |",
|
|
371
|
+
"| Erstellt mit | koolie-plan v9.9.9 |", 1))
|
|
372
372
|
|
|
373
373
|
|
|
374
374
|
def _62_zweiter_schlitz(root: str) -> None:
|
|
375
375
|
"""Gegenprobe: der Schlitz darf mehrfach stehen - geprueft wird die ZAHL."""
|
|
376
376
|
ersetze(P(root, P62_SKILL),
|
|
377
|
-
("## Code-Erklärung –
|
|
378
|
-
"## Code-Erklärung –
|
|
377
|
+
("## Code-Erklärung – koolie-code-explain " + P62_SCHLITZ,
|
|
378
|
+
"## Code-Erklärung – koolie-code-explain " + P62_SCHLITZ
|
|
379
379
|
+ " (Vorlage " + P62_SCHLITZ + ")", 1))
|
|
380
380
|
|
|
381
381
|
|
|
@@ -407,7 +407,7 @@ gegenprobe("62b", "Der Schlitz darf mehrfach in einer Zeile stehen - geprueft wi
|
|
|
407
407
|
M63_INS_LEERE = "diese Nummer fuehrt dort keine Ueberschrift"
|
|
408
408
|
|
|
409
409
|
P63_PROMPT = ".koolie/core/prompts/02-impact-analysis.md".replace("/", os.sep)
|
|
410
|
-
P63_BLATT = ".koolie/core/framework/skills/
|
|
410
|
+
P63_BLATT = ".koolie/core/framework/skills/koolie-error-analyze/TESTS.md".replace("/", os.sep)
|
|
411
411
|
P63_ZIEL = ".koolie/core/framework/core/02-privacy.md".replace("/", os.sep)
|
|
412
412
|
P63_PROTOKOLL = (".koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-1.md"
|
|
413
413
|
.replace("/", os.sep))
|
|
@@ -494,19 +494,19 @@ def _64_rueckfrage_ungedeckt(root: str) -> None:
|
|
|
494
494
|
"""
|
|
495
495
|
_64_katalogzeile(root,
|
|
496
496
|
"| FW-SO-12 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
|
|
497
|
-
" | `/
|
|
497
|
+
" | `/koolie-change-small \"<Sondenaufgabe>\"` | [RÜCKFRAGE] zur Aufteilung "
|
|
498
498
|
"| Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
499
499
|
|
|
500
500
|
|
|
501
501
|
def _64_halt_ungedeckt(root: str) -> None:
|
|
502
502
|
"""Eine Zelle verlangt [HALT] von einem Skill, der sie nur als Anweisung fuehrt.
|
|
503
503
|
|
|
504
|
-
`
|
|
504
|
+
`koolie-refactor` nennt [HALT] elfmal - in Arbeitsschritten und Fehlerbildern, und
|
|
505
505
|
in keinem Ausgabeformat. Fuenf seiner sieben Zellen standen so da.
|
|
506
506
|
"""
|
|
507
507
|
_64_katalogzeile(root,
|
|
508
508
|
"| FW-SO-13 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
|
|
509
|
-
" | `/
|
|
509
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | [HALT] nach dem "
|
|
510
510
|
"Testnachweis | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
511
511
|
|
|
512
512
|
|
|
@@ -518,7 +518,7 @@ def _64_unzulaessig_ungedeckt(root: str) -> None:
|
|
|
518
518
|
"""
|
|
519
519
|
_64_katalogzeile(root,
|
|
520
520
|
"| FW-SO-14 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
|
|
521
|
-
" | `/
|
|
521
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Ablehnung "
|
|
522
522
|
"| Änderungen vor dem [HALT] | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
523
523
|
|
|
524
524
|
|
|
@@ -526,11 +526,11 @@ def _64_gedeckt(root: str) -> None:
|
|
|
526
526
|
"""Gegenprobe: dieselbe Marke bei einem Skill, der sie in Abschnitt 5 und 6 fuehrt.
|
|
527
527
|
|
|
528
528
|
Das ist die Abhilfe - und zugleich der Beleg, dass der Zuschnitt nicht zu breit
|
|
529
|
-
ist. `
|
|
529
|
+
ist. `koolie-change-small` fuehrt [HALT] in beiden Abschnitten.
|
|
530
530
|
"""
|
|
531
531
|
_64_katalogzeile(root,
|
|
532
532
|
"| FW-SO-15 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
|
|
533
|
-
" | `/
|
|
533
|
+
" | `/koolie-change-small \"<Sondenaufgabe>\"` | [HALT] vor dem ersten "
|
|
534
534
|
"Schreibzugriff | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278) |")
|
|
535
535
|
|
|
536
536
|
|
|
@@ -543,7 +543,7 @@ def _64_letzte_zelle(root: str) -> None:
|
|
|
543
543
|
"""
|
|
544
544
|
_64_katalogzeile(root,
|
|
545
545
|
"| FW-SO-16 | Sondenzeile | Sondenvorbedingung; " + P64_SCHLITZE +
|
|
546
|
-
" | `/
|
|
546
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten nach dem "
|
|
547
547
|
"Testnachweis | Zugriff | sitzung | bestanden (Sondenbeleg, `.koolie/core/tests/protocols/2026-09-19-testblaetter-buendel-3.md`; Client Pack `claude-code` 2.1.278): der Lauf hat "
|
|
548
548
|
"[HALT] wörtlich geschrieben |")
|
|
549
549
|
|
|
@@ -580,7 +580,7 @@ sonde("64a", "Eine Zelle verlangt [RUECKFRAGE] - die Marke steht in KEINEM Absch
|
|
|
580
580
|
"Handlungsmarke",
|
|
581
581
|
_64_rueckfrage_ungedeckt, M64_UNGEDECKT)
|
|
582
582
|
|
|
583
|
-
sonde("64b", "Eine Zelle verlangt [HALT] von
|
|
583
|
+
sonde("64b", "Eine Zelle verlangt [HALT] von koolie-refactor, das die Marke nur in "
|
|
584
584
|
"Arbeitsschritten und Fehlerbildern fuehrt - fuenf seiner sieben Zellen "
|
|
585
585
|
"standen so da",
|
|
586
586
|
_64_halt_ungedeckt, M64_UNGEDECKT)
|
|
@@ -641,7 +641,7 @@ def _65_ohne_protokoll(root: str) -> None:
|
|
|
641
641
|
"""
|
|
642
642
|
_65_katalogzeile(root,
|
|
643
643
|
"| FW-SO-17 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
|
|
644
|
-
" | `/
|
|
644
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
|
|
645
645
|
"| sitzung | bestanden (Sondenbeleg ohne Protokollverweis) |")
|
|
646
646
|
|
|
647
647
|
|
|
@@ -655,7 +655,7 @@ def _65_ohne_pack(root: str) -> None:
|
|
|
655
655
|
"""
|
|
656
656
|
_65_katalogzeile(root,
|
|
657
657
|
"| FW-SO-18 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
|
|
658
|
-
" | `/
|
|
658
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
|
|
659
659
|
"| sitzung | bestanden (" + P65_PROTOKOLL + ") |")
|
|
660
660
|
|
|
661
661
|
|
|
@@ -667,7 +667,7 @@ def _65_fremdes_wort(root: str) -> None:
|
|
|
667
667
|
"""
|
|
668
668
|
_65_katalogzeile(root,
|
|
669
669
|
"| FW-SO-19 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
|
|
670
|
-
" | `/
|
|
670
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
|
|
671
671
|
"| sitzung | geprüft (" + P65_PROTOKOLL + "; " + P65_PACK + ") |")
|
|
672
672
|
|
|
673
673
|
|
|
@@ -707,7 +707,7 @@ def _65_vollstaendig(root: str) -> None:
|
|
|
707
707
|
"""
|
|
708
708
|
_65_katalogzeile(root,
|
|
709
709
|
"| FW-SO-21 | Sondenzeile | Sondenvorbedingung; " + P65_SCHLITZE +
|
|
710
|
-
" | `/
|
|
710
|
+
" | `/koolie-refactor <Sondenmodul> \"<Sondenziel>\"` | Anhalten | Zugriff "
|
|
711
711
|
"| sitzung | bestanden (" + P65_PROTOKOLL + "; " + P65_PACK + ") |")
|
|
712
712
|
|
|
713
713
|
|
|
@@ -995,14 +995,14 @@ def sonden_ohne_pyyaml() -> None:
|
|
|
995
995
|
"Ohne PyYAML meldet Pruefung 33 an einer richtigen Installation nichts")
|
|
996
996
|
if not (gesperrt and still):
|
|
997
997
|
notiz(" PyYAML gesperrt %s, still %s" % (gesperrt, still))
|
|
998
|
-
skill = os.path.join(root, ".claude", "skills", "
|
|
998
|
+
skill = os.path.join(root, ".claude", "skills", "koolie-plan", "SKILL.md")
|
|
999
999
|
text = lies(skill)
|
|
1000
1000
|
neu = re.sub(r"(?m)^disallowed-tools: .*$", "disallowed-tools: Edit", text)
|
|
1001
1001
|
if neu == text:
|
|
1002
|
-
raise Praeparationsfehler("disallowed-tools in
|
|
1002
|
+
raise Praeparationsfehler("disallowed-tools in koolie-plan/SKILL.md nicht gefunden")
|
|
1003
1003
|
schreib(skill, neu)
|
|
1004
1004
|
aus = lauf_ohne()
|
|
1005
|
-
ok = "
|
|
1005
|
+
ok = "koolie-plan/SKILL.md: disallowed-tools traegt ['Edit']" in aus
|
|
1006
1006
|
melde("SONDE", "S364", ok,
|
|
1007
1007
|
"Ohne PyYAML wird eine verkuerzte disallowed-tools-Liste weiter gemeldet")
|
|
1008
1008
|
finally:
|
|
@@ -548,7 +548,7 @@ M72 = "wird aber von keinem Eintrag der Berechtigungsdatei genannt"
|
|
|
548
548
|
M72_RUECK = "nennt keinen Skill in"
|
|
549
549
|
M72_FELD = "Feld permission_tools.skill fehlt"
|
|
550
550
|
P72_PACKSKILL = (".koolie/core/framework/role-packs/requirements-engineering/"
|
|
551
|
-
"skills/
|
|
551
|
+
"skills/koolie-ticket").replace("/", os.sep)
|
|
552
552
|
|
|
553
553
|
|
|
554
554
|
def _72_pack_aktivieren(root: str, pack_skills: str) -> str:
|
|
@@ -591,9 +591,9 @@ def sonden_pack_im_korb() -> None:
|
|
|
591
591
|
# --- Sonde 72b: die Gegenrichtung -------------------------------
|
|
592
592
|
# Der Eintrag bleibt, sein Skill geht - eine Freigabe ohne Gegenstand.
|
|
593
593
|
shutil.rmtree(os.path.join(root, *skills.split("/"), name))
|
|
594
|
-
shutil.rmtree(os.path.join(root, *skills.split("/"), "
|
|
594
|
+
shutil.rmtree(os.path.join(root, *skills.split("/"), "koolie-plan"))
|
|
595
595
|
ausgabe = validator_ausgabe(root)
|
|
596
|
-
melde("SONDE", "72b", M72_RUECK in ausgabe and "
|
|
596
|
+
melde("SONDE", "72b", M72_RUECK in ausgabe and "koolie-plan" in ausgabe,
|
|
597
597
|
"Ein Korbeintrag ohne Skill in der Ablage wird gemeldet - eine "
|
|
598
598
|
"Freigabe fuer einen Skill, den es nicht gibt (D-81)")
|
|
599
599
|
|
|
@@ -1137,7 +1137,7 @@ buendel(sonden_zeichengrenze,
|
|
|
1137
1137
|
# Gegenprobe ist der ausgelieferte Bestand: Er fuehrt aeltere Zeilen ohne die Nennung, und
|
|
1138
1138
|
# die duerfen nicht gemeldet werden - sonst schriebe die Pruefung Register um (Klasse C).
|
|
1139
1139
|
M95 = "nennt nicht, ob sie eine Anweisung berührt"
|
|
1140
|
-
P95_SKILL = ".koolie/core/framework/skills/
|
|
1140
|
+
P95_SKILL = ".koolie/core/framework/skills/koolie-docs-update"
|
|
1141
1141
|
|
|
1142
1142
|
|
|
1143
1143
|
def sonden_aenderungsart() -> None:
|
|
@@ -1172,7 +1172,7 @@ def sonden_aenderungsart() -> None:
|
|
|
1172
1172
|
raise Praeparationsfehler("Sonde 95a: die aktuelle Zeile traegt keine Nennung")
|
|
1173
1173
|
schreib(cl, text.replace(aktuell[0], ohne, 1))
|
|
1174
1174
|
aus = validator_ausgabe(root)
|
|
1175
|
-
ok = any(M95 in z and "
|
|
1175
|
+
ok = any(M95 in z and "koolie-docs-update" in z for z in aus.splitlines())
|
|
1176
1176
|
melde("SONDE", "95a", ok,
|
|
1177
1177
|
"Die Zeile der aktuellen Version ohne Nennung der Art wird gemeldet (D-403)")
|
|
1178
1178
|
if not ok:
|
|
@@ -1202,7 +1202,7 @@ def sonden_aenderungsart() -> None:
|
|
|
1202
1202
|
spaet = re.sub(r"2026-09-1\d", "2026-09-24", alt[0], count=1)
|
|
1203
1203
|
schreib(cl, text.replace(alt[0], spaet, 1))
|
|
1204
1204
|
aus = validator_ausgabe(root)
|
|
1205
|
-
ok = any(M95 in z and "
|
|
1205
|
+
ok = any(M95 in z and "koolie-docs-update" in z for z in aus.splitlines())
|
|
1206
1206
|
melde("SONDE", "95b", ok,
|
|
1207
1207
|
"Eine Zeile nach dem Stichtag ohne Nennung wird gemeldet, auch wenn sie "
|
|
1208
1208
|
"nicht die aktuelle Version ist (D-403)")
|
|
@@ -107,8 +107,8 @@ M105_MARKE = "(K-40, D-482)"
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
def _105_spanne_gehoben(root: str) -> None:
|
|
110
|
-
ersetze(_p(root, P105_CLAUDE), ("| Verbindliche Zielversion | `2.1.x
|
|
111
|
-
"| Verbindliche Zielversion | `2.2.x
|
|
110
|
+
ersetze(_p(root, P105_CLAUDE), ("| Verbindliche Zielversion | `2.1.x`.",
|
|
111
|
+
"| Verbindliche Zielversion | `2.2.x`."))
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
def _105_version_ausserhalb(root: str) -> None:
|
|
@@ -22,7 +22,7 @@ from .apparat import (
|
|
|
22
22
|
Praeparationsfehler, schreib, sonde, strict_ausgabe, unterprozess)
|
|
23
23
|
|
|
24
24
|
HOOK = ".koolie/core/tests/scripts/hook-check-secrets.py"
|
|
25
|
-
SKILL_109 = ".koolie/core/framework/skills/
|
|
25
|
+
SKILL_109 = ".koolie/core/framework/skills/koolie-code-explain/SKILL.md"
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def _p(root: str, rel: str) -> str:
|
|
@@ -82,14 +82,14 @@ def sonden_fremde_skills() -> None:
|
|
|
82
82
|
melde("GEGENPROBE", "111f", M72_FREMD not in aus and M37_FREMD not in aus,
|
|
83
83
|
"Skill(openspec-*) im ask-Korb deckt den deklarierten Skill und gilt nicht "
|
|
84
84
|
"als Ausweitung")
|
|
85
|
-
_deklarieren(root, "
|
|
86
|
-
testblatt = os.path.join(root, ".claude", "skills", "
|
|
85
|
+
_deklarieren(root, "koolie-, speckit-", urstand)
|
|
86
|
+
testblatt = os.path.join(root, ".claude", "skills", "koolie-plan", "TESTS.md")
|
|
87
87
|
if not os.path.isfile(testblatt):
|
|
88
|
-
raise Praeparationsfehler("
|
|
88
|
+
raise Praeparationsfehler("koolie-plan/TESTS.md fehlt in der Installation")
|
|
89
89
|
os.remove(testblatt)
|
|
90
90
|
aus = validator_ausgabe(root)
|
|
91
|
-
melde("SONDE", "111g", M111_UNZULAESSIG in aus and "
|
|
92
|
-
"'
|
|
91
|
+
melde("SONDE", "111g", M111_UNZULAESSIG in aus and "koolie-plan: TESTS.md fehlt" in aus,
|
|
92
|
+
"'koolie-' als fremdes Praefix wird gemeldet und nimmt nichts aus - der Koolie-Skill "
|
|
93
93
|
"bleibt geprueft")
|
|
94
94
|
melde("SONDE", "111h", M111_OHNE in aus,
|
|
95
95
|
"Ein deklariertes Praefix ohne Skill ('speckit-') wird gemeldet")
|
|
@@ -93,6 +93,39 @@ sonde("112g", "Ein Bau, der die Links der Beschreibung relativ laesst, wird geme
|
|
|
93
93
|
"und npm fuehrten sie ins Leere", _112_relative_links, M112_BAU)
|
|
94
94
|
sonde("112h", "Eine Vorabversion, deren npm-Paket die Version der Marke traegt, wird gemeldet - "
|
|
95
95
|
"sie belegte die Version vor der Signatur", _112_vorab, M112_BAU)
|
|
96
|
+
# Seit 2.0.0: die Veroeffentlichung ueber Trusted Publishing (Gegenstand d). Jede Sonde nimmt
|
|
97
|
+
# dem Workflow genau eine Zusage: den einzigen Ausloeser, den festen Commit einer Action, die
|
|
98
|
+
# Pruefung der Marke, die Reihenfolge TestPyPI vor PyPI und npm.
|
|
99
|
+
WORKFLOW = ".github/workflows/publish.yml"
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _112_ausloeser(root: str) -> None:
|
|
103
|
+
ersetze(_p(root, WORKFLOW), (' - "v*"', ' - "v*"\n workflow_dispatch:'))
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _112_beweglich(root: str) -> None:
|
|
107
|
+
ersetze(_p(root, WORKFLOW),
|
|
108
|
+
(" - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0",
|
|
109
|
+
" - uses: astral-sh/setup-uv@v10"))
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _112_ohne_signatur(root: str) -> None:
|
|
113
|
+
ersetze(_p(root, WORKFLOW), (' git tag -v "${MARKE}"', ' true # SYNTHETISCH'))
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _112_ohne_probe(root: str) -> None:
|
|
117
|
+
ersetze(_p(root, WORKFLOW), (" needs: [pruefen, testpypi]", " needs: [pruefen]"))
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
sonde("112k", "Ein Workflow, der ausser an einer Marke auch von Hand startet, wird gemeldet - "
|
|
121
|
+
"er veroeffentlichte ohne signierte Marke", _112_ausloeser,
|
|
122
|
+
"laeuft nicht nur an einer Marke v*")
|
|
123
|
+
sonde("112l", "Eine Action ueber ein bewegliches Tag statt einen Commit wird gemeldet",
|
|
124
|
+
_112_beweglich, "ohne festen Commit")
|
|
125
|
+
sonde("112m", "Ein Workflow, der die Signatur der Marke nicht prueft, wird gemeldet",
|
|
126
|
+
_112_ohne_signatur, "kein Job prueft Signatur und VERSION der Marke")
|
|
127
|
+
sonde("112n", "Ein Workflow, der PyPI und npm nicht erst nach der Probe auf TestPyPI beschickt, "
|
|
128
|
+
"wird gemeldet", _112_ohne_probe, "laeuft nicht erst nach TestPyPI")
|
|
96
129
|
gegenprobe("112", "Der ausgelieferte Befehl gibt das Banner vor install.py aus, und bauen.py "
|
|
97
130
|
"baut ohne Befund", None, M112)
|
|
98
131
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Sonden zur Umbenennung der mitgelieferten Skills auf koolie-* (2.0.0): install.py --update
|
|
2
|
+
hebt ein Projekt mit den Namen bis 1.25.0 an - Skillordner, Agentenprofil, Berechtigungsdatei.
|
|
3
|
+
|
|
4
|
+
Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
|
|
5
|
+
Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
|
|
6
|
+
Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
|
|
7
|
+
nur aus dem Apparat und aus frueheren Teilen."""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import re
|
|
12
|
+
import shutil
|
|
13
|
+
import sys
|
|
14
|
+
|
|
15
|
+
from .apparat import (
|
|
16
|
+
aufraeumen, buendel, installation, lies, melde, schreib, unterprozess, validator_ausgabe)
|
|
17
|
+
|
|
18
|
+
KERN = ("bugfix-prepare", "change-analyze", "change-small", "code-explain", "docs-update",
|
|
19
|
+
"error-analyze", "mr-description", "overlay-pflege", "plan", "refactor",
|
|
20
|
+
"repo-analyze", "review-support", "tests")
|
|
21
|
+
M_MIGRATION = "Seit 2.0.0 heissen die mitgelieferten Skills koolie-*"
|
|
22
|
+
M_OVERLAY = "Im Overlay stehen noch alte Namen"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _alt(text: str) -> str:
|
|
26
|
+
"""Ein Text mit den Namen bis 1.25.0 - so sah ein Projekt vor 2.0.0 aus."""
|
|
27
|
+
text = re.sub(r"koolie-(" + "|".join(KERN) + r"|reviewer)(?![a-z0-9-])", r"fw-\1", text)
|
|
28
|
+
return text.replace("koolie-ticket", "role-re-ticket")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _update(root: str, *mehr: str) -> str:
|
|
32
|
+
p = unterprozess([sys.executable, os.path.join(root, ".koolie", "core", "install.py"),
|
|
33
|
+
"--client", "claude-code", "--root", root, "--update", *mehr])
|
|
34
|
+
return (p.stdout or "") + (p.stderr or "")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def sonden_skillnamen() -> None:
|
|
38
|
+
"""install.py --update an einer claude-code-Installation mit den Namen bis 1.25.0."""
|
|
39
|
+
root = installation("claude-code")
|
|
40
|
+
try:
|
|
41
|
+
skills = os.path.join(root, ".claude", "skills")
|
|
42
|
+
agents = os.path.join(root, ".claude", "agents")
|
|
43
|
+
perm = os.path.join(root, ".claude", "settings.json")
|
|
44
|
+
overlay = os.path.join(root, ".koolie", "project-overlay", "OVERLAY.md")
|
|
45
|
+
quelle = os.path.join(root, ".koolie", "core", "framework", "role-packs",
|
|
46
|
+
"requirements-engineering", "skills", "koolie-ticket")
|
|
47
|
+
# Der Stand vor 2.0.0: alte Ordner, altes Profil, Pack-Skill aktiviert, alte Regeln.
|
|
48
|
+
for n in KERN:
|
|
49
|
+
os.rename(os.path.join(skills, f"koolie-{n}"), os.path.join(skills, f"fw-{n}"))
|
|
50
|
+
shutil.copytree(quelle, os.path.join(skills, "role-re-ticket"))
|
|
51
|
+
os.rename(os.path.join(agents, "koolie-reviewer.md"), os.path.join(agents, "fw-reviewer.md"))
|
|
52
|
+
rechte = lies(perm).replace('"Skill(koolie-plan)"',
|
|
53
|
+
'"Skill(koolie-plan)",\n "Skill(koolie-ticket)"', 1)
|
|
54
|
+
schreib(perm, _alt(rechte))
|
|
55
|
+
schreib(overlay, lies(overlay) + "\nVor jeder Aenderung /fw-plan. SYNTHETISCH\n")
|
|
56
|
+
vorher = lies(perm)
|
|
57
|
+
|
|
58
|
+
aus = _update(root, "--dry-run")
|
|
59
|
+
melde("GEGENPROBE", "D539a", M_MIGRATION in aus and lies(perm) == vorher
|
|
60
|
+
and os.path.isdir(os.path.join(skills, "fw-plan")),
|
|
61
|
+
"--update --dry-run nennt die Umbenennung und schreibt nichts")
|
|
62
|
+
|
|
63
|
+
aus = _update(root)
|
|
64
|
+
alt_ordner = [d for d in os.listdir(skills) if d.startswith(("fw-", "role-"))]
|
|
65
|
+
melde("SONDE", "D539b", M_MIGRATION in aus and not alt_ordner
|
|
66
|
+
and all(os.path.isdir(os.path.join(skills, f"koolie-{n}")) for n in KERN),
|
|
67
|
+
"--update benennt die dreizehn Kernskills um und laesst keinen alten Ordner stehen")
|
|
68
|
+
ticket = os.path.join(skills, "koolie-ticket", "SKILL.md")
|
|
69
|
+
melde("SONDE", "D539c", os.path.isfile(ticket) and "name: koolie-ticket" in lies(ticket),
|
|
70
|
+
"Der aktivierte Pack-Skill bleibt aktiviert und traegt den neuen Inhalt")
|
|
71
|
+
melde("SONDE", "D539d", not os.path.exists(os.path.join(agents, "fw-reviewer.md"))
|
|
72
|
+
and os.path.isfile(os.path.join(agents, "koolie-reviewer.md")),
|
|
73
|
+
"Das alte Agentenprofil ist entfernt, das neue angelegt")
|
|
74
|
+
rechte = lies(perm)
|
|
75
|
+
melde("SONDE", "D539e", "fw-" not in rechte and "role-re-ticket" not in rechte
|
|
76
|
+
and "Skill(koolie-plan)" in rechte and "Skill(koolie-ticket)" in rechte,
|
|
77
|
+
"Die Berechtigungsdatei nennt die Skills unter ihrem neuen Namen, auch den "
|
|
78
|
+
"aktivierten Pack-Skill")
|
|
79
|
+
melde("SONDE", "D539f", M_OVERLAY in aus and "OVERLAY.md" in aus
|
|
80
|
+
and "/fw-plan" in lies(overlay),
|
|
81
|
+
"Ein alter Name im Overlay wird genannt, nicht ersetzt - das Overlay gehoert "
|
|
82
|
+
"dem Projekt")
|
|
83
|
+
aus_val = validator_ausgabe(root)
|
|
84
|
+
melde("SONDE", "D539g", "fw-" not in aus_val and "role-re-ticket" not in aus_val
|
|
85
|
+
and "koolie-ticket" not in aus_val,
|
|
86
|
+
"Der Validator findet nach der Migration keinen Skill ohne Korb und keinen "
|
|
87
|
+
"alten Namen")
|
|
88
|
+
aus = _update(root)
|
|
89
|
+
melde("GEGENPROBE", "D539h", M_MIGRATION not in aus,
|
|
90
|
+
"Ein zweites --update hat nichts mehr umzubenennen")
|
|
91
|
+
finally:
|
|
92
|
+
aufraeumen(os.path.dirname(root))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
buendel(sonden_skillnamen,
|
|
96
|
+
"Die Umbenennung auf koolie-* durch install.py --update an einer claude-code-"
|
|
97
|
+
"Installation mit den Namen bis 1.25.0: sechs Sonden, zwei Gegenproben")
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""Sonden zu Pruefung 113 (2.0.0): keine Kennung in der Produktdokumentation, ausser an den
|
|
2
|
+
Stellen, die selbst Nachweis sind.
|
|
3
|
+
|
|
4
|
+
Teil des Sondenskripts probe-pruefungen.py, seit 1.19.1 in Module geteilt (K-174). Die
|
|
5
|
+
Einheiten melden sich beim Laden dieses Moduls an; der Einstieg laedt die Module in der
|
|
6
|
+
Reihenfolge ihrer Nummer, und das ist die Reihenfolge der Ausgabe (D-49). Ein Modul liest
|
|
7
|
+
nur aus dem Apparat und aus frueheren Teilen."""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
from .apparat import ersetze, gegenprobe, lies, P, schreib, sonde
|
|
13
|
+
|
|
14
|
+
M113 = "in der Produktdokumentation"
|
|
15
|
+
PLAN = ".koolie/core/framework/skills/koolie-plan/"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _p(root: str, rel: str) -> str:
|
|
19
|
+
return P(root, rel.replace("/", os.sep))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# SYNTHETISCH: K-99 ist eine belegte synthetische Kennung (Decision Log), nie echt vergeben.
|
|
23
|
+
def _113_startseite(root: str) -> None:
|
|
24
|
+
pfad = _p(root, "README.md")
|
|
25
|
+
schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nMehr dazu in K-99.\r\n")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _113_skill(root: str) -> None:
|
|
29
|
+
pfad = _p(root, PLAN + "EXAMPLES.md")
|
|
30
|
+
schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nSiehe K-99.\r\n")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _113_testblatt(root: str) -> None:
|
|
34
|
+
ersetze(_p(root, PLAN + "TESTS.md"), ("| SK-004-P01 | ", "| SK-004-P01 | K-99 "))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _113_hauptdokument(root: str) -> None:
|
|
38
|
+
pfad = _p(root, ".koolie/core/build/doc/01-executive-summary.md")
|
|
39
|
+
schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nSiehe K-99.\r\n")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _113_grenzen(root: str) -> None:
|
|
43
|
+
pfad = _p(root, ".koolie/core/build/doc/29-grenzen.md")
|
|
44
|
+
schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\nSiehe K-99.\r\n")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _113_verlauf(root: str) -> None:
|
|
48
|
+
pfad = _p(root, "README.md")
|
|
49
|
+
schreib(pfad, lies(pfad).rstrip("\r\n") + "\r\n\r\n| Version | Änderung |\r\n|---|---|\r\n"
|
|
50
|
+
"| 9.9.9 | K-99 |\r\n")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
sonde("113a", "Eine Kennung auf der Startseite wird gemeldet",
|
|
54
|
+
_113_startseite, "README.md: 1 Kennung(en) " + M113)
|
|
55
|
+
sonde("113b", "Eine Kennung in den Erlaeuterungen eines Skills wird gemeldet",
|
|
56
|
+
_113_skill, "koolie-plan/EXAMPLES.md: 1 Kennung(en) " + M113)
|
|
57
|
+
sonde("113c", "Eine Kennung in einer Spalte eines Testblatts, die kein Ergebnis traegt, wird "
|
|
58
|
+
"gemeldet - die Ausnahme gilt der Spalte, nicht dem Blatt",
|
|
59
|
+
_113_testblatt, "koolie-plan/TESTS.md: 1 Kennung(en) " + M113)
|
|
60
|
+
gegenprobe("113a", "Der ausgelieferte Bestand laeuft durch - Ergebnisspalten, Belegspalten der "
|
|
61
|
+
"Matrix und Versionsverlaeufe tragen ihre Kennungen, die Nachweisschicht ebenso",
|
|
62
|
+
None, M113)
|
|
63
|
+
gegenprobe("113b", "Eine Kennung in der Zeile eines Versionsverlaufs wird nicht gemeldet",
|
|
64
|
+
_113_verlauf, M113)
|
|
65
|
+
|
|
66
|
+
sonde("113d", "Eine Kennung in einem Kapitel des Hauptdokuments wird gemeldet - nur drei "
|
|
67
|
+
"Kapitel sind Nachweis",
|
|
68
|
+
_113_hauptdokument, "01-executive-summary.md: 1 Kennung(en) " + M113)
|
|
69
|
+
gegenprobe("113c", "Eine Kennung im Kapitel der Grenzen und offenen Entscheidungen wird nicht "
|
|
70
|
+
"gemeldet", _113_grenzen, M113)
|